我的问题类似于这里提出的问题:
How to Exclude Duplicate C Shared Libraries (.so) in a Multi-Project Android Build?
在我的项目中,我有一个共享库,其中包含一些本机代码MySharedLib
。我有一个应用TestDuplicateSharedLibApp
,它取决于MySharedLib
并且还有本机代码。
作为Gradle构建的一部分,我通过设置ndk-build
禁用对jni.srcDirs =[]
的自动调用。我明确地调用了ndk-build命令。
作为MySharedLib
构建过程的一部分,libMySharedLib.so
已生成并打包到MySharedLib.aar
。
TestDuplicateSharedLibApp
取决于MySharedLib
。作为ndk-build的一部分,libTestDuplicateSharedLibApp.so
和libMySharedLib.so
将复制到TestDuplicateSharedLibApp/libs
目录。
由于我需要在最终的apk中打包共享库,因此我的build.gradle中有jniLibs.srcDirs=['libs']
。
当打包最终的apk时,由于libMyShared.so
的副本,MySharedLib.aar
的一个副本和TestDuplicateSharedLibApp/libs
的其他副本,打包失败。我尝试了pick-first
和exclude
打包选项,但他们没有帮助。
基本上我需要的是文件的等效jniLibs.srcDirs
。在TestDuplicateSharedLibApp
我想说:只包括libTestDuplicateSharedLibApp.so
。我设想这样做:jniLibs.srcDirs=[]
,如果存在jniLibs.srcFiles
选项jniLibs.srcFiles='libTestDuplicateSharedLibApp.so'
我很感激解决这个问题的见解。