如何解决使用Gradle将外部.so文件打包为Android .apk文件
最近,我将现有的Android项目从一个古老的Gradle版本移植到了Gradle 6.6和Android Studio的Gradle插件4.0.1。该项目使用外部本机库(.so文件),该库通过JNI在Java代码中使用。该.so库依赖于libc++_shared.so
,因为它是用C ++编写的。
我意识到,如果仅将.so文件复制到{{1}中的相应平台文件夹(arm64-v8a
,armeabi-v7a
,x86
,x86_64
)中} Gradle将其“正确”打包到我的.apk文件中。
“正确地”是指它会自动将jniLibs
(我的库所依赖的)以及我自己的库添加到.apk文件中。另外,如果我在libc++_shared.so
文件中另外将jniDebuggable
设置为true
,它还将添加build.gradle
库,它必须能够附加本机代码调试器。
现在,这正是我想要的。问题是我找不到任何描述此行为的文档。我能找到的最佳来源是this,但它没有提及有关自动打包依赖项的任何内容。因此,我不知道这是否是官方支持的处理方式。
我怀疑Android的基于Gradle的构建过程中有一部分会自动分析gdbserver
文件夹中的文件并采取相应措施。知道更多一点以了解实际情况真是太好了。
有人参考证实我的上述观点,还是知道哪个Gradle任务(或其他任务)完成了此任务?最好知道此行为是在哪个Android Gradle插件版本中引入的。
编辑:
This对另一个SO问题的回答使我进入了Android源文件https://android.googlesource.com/platform/tools/build/+/master/builder/src/main/java/com/android/builder/internal/packaging/Packager.java
这似乎是将.so文件和jniLibs
打包到.apk文件中的代码。但是我没有解释为什么gdbserver
也被打包。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。