Android 打包so动态库文件到APK

 时由于项目需要使用JNI来调用.so文件,需要将so文件一起打包到APK文件中,这有两种方法:

 

1. 使用mm命令和Android SDK源代码一起编译。

  • 在project根目录创建一个Android.mk,文件内容如:

       LOCAL_PATH:= $(call my-dir)   
  1. include $(CLEAR_VARS)   
  2. LOCAL_MODULE_TAGS := user  
  3. LOCAL_SRC_FILES := $(call all-subdir-java-files)   
  4. LOCAL_PACKAGE_NAME := jnisample   
  5. LOCAL_JNI_SHARED_LIBRARIES := libtest   
  6. include $(BUILD_PACKAGE)   
  7. include $(LOCAL_PATH)/jni/Android.mk   
  8. # Use the folloing include to make our test apk.    
  9. include $(call all-makefiles-under,$(LOCAL_PATH))  

LOCAL_JNI_SHARED_LIBRARIES := libtest 就是把so文件放到apk文件里的libs/armeabi里,而include $(LOCAL_PATH)/jni/Android.mk为了编译so文件。

    • 在Project目录下创建jni文件夹,在jni文件里创建Android.mk,内容如下:
      1. LOCAL_PATH := $(call my-dir)  
      2.   
      3. include $(CLEAR_VARS)  
      4. MY_ANDROID_SRC := $(ANDROID_BUILD_TOP)  
      5. LOCAL_CFLAGS += -DHAVE_CONFIG_H -DKHTML_NO_EXCEPTIONS -DGKWQ_NO_JAVA  
      6. LOCAL_CFLAGS += -DNO_SUPPORT_JS_BINDING -DQT_NO_WHEELEVENT -DKHTML_NO_XBL  
      7.   
      8. LOCAL_SHARED_LIBRARIES += libskia libsurfaceflinger liblog  
      9. LOCAL_PRELINK_MODULE := false  
      10.   
      11. LOCAL_CFLAGS += -DPACKED=""  
      12.   
      13. LOCAL_MODULE    := libtest  
      14. LOCAL_SRC_FILES := Ltest.cpp / BlurFilter.cpp / clz.cpp   
      15. LOCAL_C_INCLUDES := $(MY_ANDROID_SRC)/external/skia/include/core /  
      16. $(MY_ANDROID_SRC)/external/qemu/android /  
      17. $(MY_ANDROID_SRC)/frameworks/base/include /  
      18. $(MY_ANDROID_SRC)/system/core/include /  
      19. $(MY_ANDROID_SRC)/frameworks/base/libs/surfaceflinger /  
      20. $(MY_ANDROID_SRC)/system/core/include/pixelflinger /  
      21. $(JNI_H_INCLUDE)  
      22.   
      23. include $(BUILD_SHARED_LIBRARY)  
    • LOCAL_C_INCLUDES += /$(JNI_H_INCLUDE) 为了让jni编译通过,因为工程通过jni调用本地库.

    • 把工程文件放到SDK platform/packages/apps目录下,然后进入该目录,命令里输入mm,进行该工程的编译,这样编译出来的apk,在libs/armeabi文件夹里面包含so文件。

     2.使用Eclipse build APK文件,只要将so文件放在与src平级的地方创建目录结构libs/armeabi,文件名格式如:libs/armeabi/libxxx.so.
        eclipse在打包的时候会根据文件名的命名规则(lib****.so)去打包so文件,开头和结尾必须分别为“lib”和“.so”,否则是不会打包到apk文件中的

      方法都经验证可正确打包使用,仅供大家参考

    • 1
      点赞
    • 6
      收藏
      觉得还不错? 一键收藏
    • 1
      评论

    “相关推荐”对你有帮助么?

    • 非常没帮助
    • 没帮助
    • 一般
    • 有帮助
    • 非常有帮助
    提交
    评论 1
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值