我有一个Android应用程序,我已经能够使用Gradle成功构建(使用Gradle 0.7)。现在我想设置Gradle来构建两个独立的.APK,一个只有ARM本机库,另一个只有Intel x86本机库。我尝试过使用productFlavors,如下例所示:
How to configure NDK with Android Gradle plugin 0.7
但是,使用我的Gradle脚本中指定的productFlavor,.APKs根本不包含任何库(libs目录本身不在.APK中)。如果没有productFlavors,则包含库 - 尽管生成的APK将包含ARM和x86库。
使用Gradle,似乎我们的库被放置在以下目录中:
建立/ javaResources / release / lib目录/ armeabi-V7A
建立/ javaResources / release / lib目录/ 86
建立/ javaResources /调试/ lib目录/ armeabi-V7A
建立/ javaResources /调试/ lib目录/ 86
如果没有Gradle脚本中的productFlavors,Gradle似乎知道在这些目录中查找库。所以我对于发生了什么感到茫然。为什么包含productFlavor会阻止Gradle查找库?
答案 0 :(得分:3)
关于您所指的示例,您使用的是主帖或其最佳答案的片段吗?主帖中的那个有点过时,也许这就是为什么它不适用于你的项目。
您必须使用productFlavors中的abiFilter
属性,并将您的本机库放在jniLibs
文件夹中。这是一个示例build.gradle:
apply plugin: 'com.android.application'
android {
compileSdkVersion 20
buildToolsVersion "20"
defaultConfig{
minSdkVersion 15
targetSdkVersion 20
versionCode 101
versionName "1.0.1"
}
flavorDimensions "abi"
productFlavors {
x86 {
flavorDimension "abi"
ndk {
abiFilter "x86"
}
versionCode 5
}
arm {
flavorDimension "abi"
ndk {
abiFilter "armeabi-v7a"
}
versionCode 2
}
all {
flavorDimension "abi"
versionCode 0
}
}
// make per-variant version code
applicationVariants.all { variant ->
// get the version code of each flavor
def abiVersion = variant.productFlavors.get(0).versionCode
// set the composite code
variant.mergedFlavor.versionCode = abiVersion * 100000 + defaultConfig.versionCode
}
}
请注意,在此示例中,我还修改了每个productFlavor应用的versionCode,因此它可以正常使用Play商店中的多个APK处理功能。
您可以在此处获取有关所有这些内容的更多背景信息:http://ph0b.com/android-studio-gradle-and-ndk-integration/