在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//目录下
- 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编译规则的简单样例可以参考。

更多相关文章

  1. Android(安卓)一些常用的依赖及使用
  2. Ubuntu Linux14 64位下在Android(安卓)studio下用gradle编译Andr
  3. AndroidStudio中多个Module依赖同一个jar的解决方案
  4. Android(安卓)NDK开发环境搭建_r8
  5. android 6.0指纹模块学习 1
  6. Linux系统Android(安卓)NDK编译环境搭建
  7. 用cmake生成ios framework库
  8. mac下编译ffmpeg1.1.4
  9. SpringSource通过Spring for Android(安卓)1.0将Spring Framewor

随机推荐

  1. 关于.net使用Cache框架如何给程序添加Cac
  2. C#中关于TCP粘包出现的问题解决的示例
  3. 如何使用C#自定义音乐播放器进度条的实例
  4. C#实现身份证识别功能的图文代码详解
  5. 关于ASP.NET MVC4如何使用PagedList.Mvc
  6. Windows服务在C#下如何创建(图)?
  7. .NET下关于log4net的使用方法的图文代码
  8. 详解ASP.NET中DES加密与解密MD5
  9. 分享Asp.Net MVC4如何实现通过id更新表单
  10. 用asp.net mvc部分视图渲染html的实例教