Android gradle,针对不同架构的本机LIB

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'

我正在尝试为所有体系结构构建通用的apk。以下是我的项目结构:

-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是一个外部版本库,所以我认为它不应该与模块同名