本文目录一览:
- 1、android 编译好的ndk库应该放在哪个目录
- 2、安卓jni不生成lib文件
- 3、如何解决android ndk r8c 老是重新编译源代码的问题
- 4、android开发,怎么使用ndk编译成.so文件
- 5、android ndk build BUILD_EXECUTABLE 为什么是这个application/x-sharedlib
- 6、ndk编译生成so
android 编译好的ndk库应该放在哪个目录
可以使用的。 解析:首先Android就是Linux内核。 android应用程序开发环境: 包括eclipse、java、 android sdk、 adt等。 安装android-ndk开发包,这个开发包可以在google android 官网下载: 通过这个开发包的工具才能将android jni 的C/C++的代码编译成库 android的NDK开发需要在linux下进行: 因为需要把C/C++编写的代码生成能在arm上运行的.so文件,这就需要用到交叉编译环境,而交叉编译需要在linux系统下才能完成。 备注:NDK编译步骤: 1.选择 ndk 自带的例子 hello-jni ,位于E:\android-ndk-r5\samples\hello-jni( 根据具体的安装位置而定 ) 。 2.运行 cygwin ,输入命令 cd /cygdrive/e/android-ndk-r5/samples/hello-jni ,进入到 E:\android-ndk-r5\samples\hello-jni 目录。 3.输入 $NDK/ndk-build ,执行成功后,它会自动生成一个 libs 目录,把编译生成的 .so 文件放在里面。 ($NDK是调用我们之前配置好的环境变量, ndk-build 是调用 ndk 的编译程序 ) 4.此时去 hello-jni 的 libs 目录下看有没有生成的 .so 文件,如果有,ndk 就运行正常了。
安卓jni不生成lib文件
安卓jni不生成lib文件
1、android源码环境下编译so包,编出来的.so的包前面不会自动给添加lib,NDK编译会自动给添加lib,即使Android.mk文件里面LOCAL_MODULE :=名字前面没有lib,NDK也会自动给你添加lib. 所以NDK编译时Android.mk文件编译出来的so包名字可以加lib也可不加,但源码下编译必须加 -安卓ndk编译之后是什么文件
2、系统应用和用户应用的区别
在package/app下的工程 编译后生成的apk都会在system/app下 将系统 烧录到手机后 这些apk都会作为系统应用,系统应用所使用到的.so库全部在system/lib下面,若没有则会出错。这就是为什么源码下编译jni生成的库会放在out/target/product/xxxxxxxx_xx_m0/system/lib -安卓ndk编译之后是什么文件
用户应用会默认到应用的data/data目录的lib文件夹下找.so,如果找不到就会报错误。当前前提是你的系统system/lib下没有同样的so文件.
3、adb push 与 adb install 区别
adb push 能够指定安装目录。比如执行"adb push xxx.apk system/app" 后,xxx.apk被安装到了system/app目录下。 这时候就是系统应用
adb install 用此命令安装的软件位于 data/app 目录,则为user application。
如何解决android ndk r8c 老是重新编译源代码的问题
ndk编译是针对jni的。jni是java native interface的缩写,意为java本地接口。 java本地接口一般是用C语言来实现一些功能,然后通过特定的格式暴露接口给java调用。但是C语言的代码不能直接被java使用,而是需要通过ndk进行编译,编译后会在libs目录下生成.so文件,这事动态运行库,这时C语言曝露出的接口才能被java调用。楼主可以检查你的vlc项目中的libs目录下,是否包含了.so文件,如果有的话一般是不需要ndk进行 编译的。不过如果楼主修改了c语言中的代码,那么为了使修改生效必须从新用ndk编译,编译后会删除原来生成的.so,并生成新的.so文件。使用ndk-r7以及更高版本的ndk,可以免安装cygwin而直接使用命令行进行编译,非常方便。 方法:将ndk的根目录设置环境变量,然后dos命令行进入需要编译的项目的根目录,执行命令ndk-build-安卓ndk编译之后是什么文件
android开发,怎么使用ndk编译成.so文件
一、首先下载android-ndk,官方网站是:
目前最新的版本是android-ndk-r8e-windows-x86.zip,下载地址:
下载后把压缩包解压出来,例如:D:\ndk,目录下的ndk-build.cmd就是用来编译的批处理命令。
二、编译,打开cmd命令行窗口,cd进入目录:D:\ndk\samples\hello-jni,
然后执行命令:D:\ndk\ndk-build.cmd(如果设置过环境变量则直接使用ndk-build.cmd)来编译hello-jni,如果没有错误会输出:
Gdbserver : [arm-linux-androideabi-4.6] libs/armeabi/gdbserver
Gdbsetup : libs/armeabi/gdb.setup
"Compile thumb : hello-jni = hello-jni.c
SharedLibrary : libhello-jni.so
Install : libhello-jni.so = libs/armeabi/libhello-jni.so
三、创建android应用程序并使用so文件
打开eclipse创建一个android应用程序HelloJni,默认的com.example.hellojni包下面有一个MainActivity.java,
在此包下添加一个HelloJni.java,
android ndk build BUILD_EXECUTABLE 为什么是这个application/x-sharedlib
android编译系统的makefile文件Android.mk写法如下
(1)Android.mk文件首先需要指定LOCAL_PATH变量,用于查找源文件。由于一般情况下
Android.mk和需要编译的源文件在同一目录下,所以定义成如下形式:
LOCAL_PATH:=$(call my-dir)
上面的语句的意思是将LOCAL_PATH变量定义成本文件所在目录路径。
(2)Android.mk中可以定义多个编译模块,每个编译模块都是以include $(CLEAR_VARS)开始
以include $(BUILD_XXX)结束。
include $(CLEAR_VARS)
CLEAR_VARS由编译系统提供,指定让GNU MAKEFILE为你清除除LOCAL_PATH以外的所有LOCAL_XXX变量,
如LOCAL_MODULE,LOCAL_SRC_FILES,LOCAL_SHARED_LIBRARIES,LOCAL_STATIC_LIBRARIES等。
include $(BUILD_STATIC_LIBRARY)表示编译成静态库
include $(BUILD_SHARED_LIBRARY)表示编译成动态库。
include $(BUILD_EXECUTABLE)表示编译成可执行程序
ndk编译生成so
本文讲述使用Android 的ndk-build来编译生成so库,在命令行中编译。编译后的so库可以调用。
环境问题略过,请自行百度或谷歌安装ndk。
新建文件夹/cn/scnu
并在文件夹中创建java 文件:
该命令会编译java文件并在build目录下生成,然后我们打开build目录
然后我们使用javah命令:
然后会生成一个.h头文件,我们打开这个头文件看看:
可以看到这里面只有一个函数,这个函数返回一个整形,和前面的java头文件对应。
接下来我们另外创建一个Test文件夹,在Test文件夹下创建jni目录,然后将刚才生成的头文件拷贝进来。
然后我们创建JNITest.c文件,文件内容如图:
这个文件的主要内容就是调用头文件并实现头文件中的方法,我们返回了1024。
LOCAL_MODULE 就是我们要生成的so,LOCAL_SRC_FILES就是编译的文件
这里就表示我们要生成的so库的CPU架构。
使用命令行进入到Test目录下,即jni的根目录处,然后打命令:
结果如图,然后我们就可以在libs目录下发现生成的so库了。