Android gradle,针对不同架构的本机LIB
我正在尝试为所有体系结构构建通用的apk。以下是我的项目结构:Android gradle,针对不同架构的本机LIB,android,gradle,java-native-interface,native,Android,Gradle,Java Native Interface,Native,我正在尝试为所有体系结构构建通用的apk。以下是我的项目结构: -App -appModule -libraryModule -libs -armeabi -lib.so -src -java -jni 这是我的libraryModule的gradle文件: apply plugin: 'com.android.library'
-App
-appModule
-libraryModule
-libs
-armeabi
-lib.so
-src
-java
-jni
这是我的libraryModule的gradle文件:
apply plugin: 'com.android.library'
// http://stackoverflow.com/questions/28485309/how-to-build-single-apk-with-andoid-ndk-and-gradle
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
ndk {
moduleName "ProxyResolver" // <-- This is the name of AndroidProxy native module
stl "gnustl_shared"
cFlags "-std=c++11"
abiFilters = ['armeabi']
ldLibs (projectDir.absolutePath + "/libs/armeabi/libresolver.so")
}
}
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
}
apply插件:“com.android.library”
// http://stackoverflow.com/questions/28485309/how-to-build-single-apk-with-andoid-ndk-and-gradle
安卓{
编译DK23版
buildToolsVersion“23.0.2”
默认配置{
ndk{
moduleName“ProxyResolver”//我猜:
ndk {
moduleName "resolver"
stl "gnustl_shared"
cFlags "-std=c++11"
abiFilters = ['armeabi','arm-v7']
}
移除
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
在defaultConfig
中设置abiFilters
只会将信息添加到应用程序的功能中(仅对安装程序有用,即当您尝试安装的设备不兼容时,安装程序会给出错误),并且不会更改将哪些二进制文件添加到最终的apk
,另请参阅
我猜您想要实现的是为不同的体系结构使用不同的apk
。这是一个常见的用例,即减少构建大小。您可以通过在应用程序的build.gradle
中使用splits
来实现。请参阅
我强烈推荐(我不是作者)
使用库的注意事项/aar
s:
然而,当你使用库时,有一个主要的陷阱(aar
而不是apk
)。嗯,你不能(自动地)创建不同的ABI特定的aar
s。相反,您创建的aar
s包含所有ABI的二进制文件。将aar
添加到android应用程序时,您可以在应用程序build.gradle
中指定splits
,如上所述。我尝试了YOUR变体,它对我不起作用。libresolver.so是一个外部版本库,所以我认为它不应该与模块同名