Android JNI以及打包so文件到apk中

本文介绍了两种将SO动态库文件打包到Android APK的方法:1) 编译SO文件后手动拷贝到项目的libs/armeabi目录;2) 在Android源码中使用mm命令编译,通过Android.mk文件指定本地库。同时提到,如果生成多个.so文件,可能需要在armeabi和armeabi-v7a目录下分别放置,以适配不同CPU架构。
摘要由CSDN通过智能技术生成


Android JNI 的使用,之前很少使用这个,所以这次用到占用了很多时间搞,不熟悉C++好痛苦的说啊~

Android JNI如何用呢?

下面这段拷贝别人的,是没问题的:

常用有两种方法:

1、在windows/linux下,首先把so动态库文件 编译出来(通过NDK),然后再 拷贝到android的工程里 libs/armeabi/下,如果libs/armeabi 不存在,那就自己创建,最后用eclipse编译本项目,这样将自动把so文件打包到apk里;eclipse在打包的时候会根据文件名的命名规则(lib****.so)去打包so文件,开头和结尾必须分别为“lib”和“.so”,否则是不会打包到apk文件中的。

2、在android源码里,使用mm命令编译apk工程。

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

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

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


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


分割线----------

说说我知道的两种:
1. 在jni目录下放置你的.c等源文件,在Android.mk文件中标注好源文件,生成的lib文件名称等,然后在NDK中 ndb-build编译so文件,这种适合大多数的单独的第三方应用,就是在应用市场发布的那种第三方应用,缺点是比较麻烦,需要手动生成so文件到libs/armeabi下(我发现最后其实在lib/armeabi-v7a/ 下,可以自行查阅armeabi&armeabi-v7a的区别),不过生成一次,后面无需再生成,也还算好;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值