博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在Android源码下编译jni所需要知道的事~
阅读量:4704 次
发布时间:2019-06-10

本文共 1697 字,大约阅读时间需要 5 分钟。

以下只是自己的一些总结,欢迎讨论 

通过NDK编译jni网上有很多例子,在这我只总结在Android源码下编译 
1、android源码环境下编译so包,编出来的.so的包前面不会自动给添加lib,NDK编译会自动给添加lib,即使Android.mk文件里面LOCAL_MODULE :=名字前面没有lib,NDK也会自动给你添加lib. 所以NDK编译时Android.mk文件编译出来的so包名字可以加lib也可不加,但源码下编译必须加 
2、系统应用和用户应用的区别 
   在package/app下的工程 编译后生成的apk都会在system/app下 将系统 烧录到手机后 这些apk都会作为系统应用,系统应用所使用到的.so库全部在system/lib下面,若没有则会出错。这就是为什么源码下编译jni生成的库会放在out/target/product/xxxxxxxx_xx_m0/system/lib 
   用户应用会默认到应用的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。 
4、当我们修改系统应用中的jni文件,你刷机后,系统的system/lib下就有你需要的so文件了。如果你不想刷机,你也可以通过adb push *.so \system\lib的方式,将*.so放到system\lib下,以供调用,因为不刷机系统中的system/lib下并没有刚才生成的.so 
5、如果我们没有jni文件只有.so的话,系统应用因为需要在system/lib下调用.so,所有我们就需要在编译的时候将这个.so文件预置到out/target/product/xxxxxxxx_xx_m0/system/lib中 
include $(CLEAR_VARS) 
LOCAL_MODULE := libfp_gf_mp 
LOCAL_SRC_FILES := ../libs/arm64-v8a/libfp_gf_mp.so 
LOCAL_MODULE_TAGS := optional 
LOCAL_MODULE_SUFFIX := .so 
LOCAL_PROPRIETARY_MODULE := true 
LOCAL_MODULE_CLASS := SHARED_LIBRARIES 
include $(BUILD_PREBUILT) 
6、直接使用.so 库 步骤 
   1、第三方的so文件或者别人编译好的so文件,你可以直接放到 libs/armeabi 下 
   2、在主文件夹的Android.mk中加上依赖    LOCAL_JNI_SHARED_LIBRARIES :=      libuserbookpatcher_jni 
   3 、如果是系统应用则要在jni的Android.mk中将.so文件预置到system/lib中 
   注:在程序中用jni文件生成.so不用进行预置,因为会直接生成到里面system/lib中  但是主文件夹的Android.mk中加上依赖  LOCAL_JNI_SHARED_LIBRARIES := libuserbookpatcher_jni 
7、在工程目录的Android.mk中 最后加上 
# Use the folloing include to make our test apk. 
include $(call all-makefiles-under,$(LOCAL_PATH)) 
会将当前工程目录所有子目录中的Android.mk进行编译 

转载于:https://www.cnblogs.com/xiaorenwu702/p/6852484.html

你可能感兴趣的文章
springcloud(一):大话Spring Cloud
查看>>
魔力Python--经典SQL语法大全
查看>>
python如何永久添加模块搜索路径
查看>>
Struts2自定义拦截器
查看>>
SHA和MD5的Salt
查看>>
Aspose------导入Excel
查看>>
python之面向对象
查看>>
vi命令
查看>>
文件操作(把源文件拷贝到目标文件路径下)
查看>>
spring-mvc报红错误
查看>>
springboot 整合redis 以及redis的简单使用
查看>>
BZOJ 3884 上帝与集合的正确用法(扩展欧拉定理)
查看>>
心肝脾肺肾的功能
查看>>
[转]不看这篇也许会节省你十分钟,但是却会耽误你的一辈子
查看>>
Linux实战教学笔记08:Linux 文件的属性(上半部分)
查看>>
666
查看>>
[转载]Java(Android)对文件全文生成MD5摘要
查看>>
String.replaceAll()方法替换字符串中的反斜杠(\)
查看>>
Go语言实战 - revel框架教程之MongDB的最佳搭档revmgo
查看>>
Hive简单安装
查看>>