Android源码环境下编译自带JNI的APP
来源:互联网 发布:粮食进出口贸易数据 编辑:程序博客网 时间:2024/05/19 13:42
在eclipse或者Android Studio下可以通过NDK实现JNI的编译生成so库文件,那么在Android系统环境下,我们应该怎么做?直接使用eclipse或者AS的配置?NO,NO,NO 我们需要在项目的根目录下编写一个Android.mk文件如下:
Android.mk
LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE_TAGS := optionalLOCAL_CERTIFICATE := platformLOCAL_STATIC_JAVA_LIBRARIES := android-support-v4LOCAL_SRC_FILES := $(call all-java-files-under, src) \ $(call all-renderscript-files-under, src) \LOCAL_JAVA_LIBRARIES :=LOCAL_PACKAGE_NAME := XXXLOCAL_JNI_SHARED_LIBRARIES := libxxxLOCAL_REQUIRED_MODULES := libxxxLOCAL_PROGUARD_ENABLED := disabledinclude $(BUILD_PACKAGE)include $(call all-makefiles-under,$(LOCAL_PATH))
几个重要的属性(源码编译JNI时容易遇到的几个坑):
- LOCAL_JNI_SHARED_LIBRARIES := libxxx 编译的时候,NDK自动会把这个libxxx打包进apk;放在yourapk/lib/<arch>/
目录下
- LOCAL_REQUIRED_MODULES := libxxx 指定模块运行所依赖的模块(模块安装时将会同步安装它所依赖的模块),这里就是将我们的jni下对应的so库安装到system/lib/目录下,要不然APP运行时会找不到so库
- LOCAL_PROGUARD_ENABLED := disabled 不容许混淆,要不然我们通过jni反射java类的方法时,会找不到方法
下面是在jni目录下的Android.mk
jni/Android.mk
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE_TAGS := optionalLOCAL_MODULE := libxxxLOCAL_SRC_FILES := Xxx.cppLOCAL_SHARED_LIBRARIES :=LOCAL_STATIC_LIBRARIES :=LOCAL_C_INCLUDES += $(JNI_H_INCLUDE)LOCAL_CFLAGS +=LOCAL_LDLIBS := -lm -llogLOCAL_SHARED_LIBRARIES := liblog libcutils libandroid_runtime libnativehelper libbinderLOCAL_PRELINK_MODULE := falseinclude $(BUILD_SHARED_LIBRARY)
几个重要的属性:
LOCAL_LDLIBS := -lm -llog 链接的库不产生依赖关系,一般用于不需要重新编译的库,如库不存在,则会报错找不到。(eclipse和AS使用的方式)
LOCAL_SHARED_LIBRARIES := liblog libcutils libandroid_runtime libnativehelper libbinder 会生成依赖关系,当库不存在时会去编译这些库。(源码编译使用的方式)
development/samples/SimpleJNI
该目录下有Android系统提供的JNI编译规则的简单样例可以参考。
- Android源码环境下编译自带JNI的APP
- android 源码下的JNI编译
- Android源码编译并预装带JNI的apk
- Linux环境下Android JNI程序的编译
- loongson内核自带源码的编译
- android自带的APP导入eclipse
- Android源码编译JNI
- 在Android源码环境下编译系统App使用第三方jar包的方法(备忘)
- 编译android自带的ndk示例
- android 源码自带的Demo BluetoothChat
- Android NDK&&JNI 编译环境的搭建
- Android NDK&&JNI 编译环境的搭建
- 如何编译运行Android体系自带桌面Launcher2源码
- 如何编译运行Android系统自带桌面Launcher2源码
- Ubuntu环境下 Android平台源码的下载及编译
- Ubuntu 10.10下Android源码编译环境的搭建
- Ubuntu环境下 Android平台源码的下载及编译
- Ubuntu环境下 Android平台源码的下载及编译
- Error running app: Instant Run requires 'Tools | Android | Enable ADB integration' to be enabled解决办法
- 51nod 1005 大数加法
- 如何理解项目沟通管理
- Hive on Spark调优
- linux进行vi操作时的查询操作
- Android源码环境下编译自带JNI的APP
- 算法模板之最近公共祖先问题(LCA)
- VC 制作带弹出式菜单的按钮
- C#中allowdrop设置为true也不能让dragdrop事件触发解决办法
- Vim中显示不可见字符
- osg 透明度显示方式
- 关联修改数据
- 1029.旧键盘(20)
- 安装CPAT--使用CPAT分析lncRNA