use*_*882 5 android gradle android-gradle-plugin
我试图根据它的a 或a 来交换res/raw文件夹和jniLibs/armeabi文件夹中的一些资源.我目前也有两种产品口味.release buildTypedebug buildType
build.gradle文件:
apply plugin: 'com.android.application'
android {
dexOptions {
preDexLibraries = false
}
compileSdkVersion 21
buildToolsVersion "22.0.1"
defaultConfig {
applicationId "com.example.test"
minSdkVersion 17
targetSdkVersion 22
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
}
productFlavors{
phone{
applicationId "com.example.testPhone"
}
tablet{
applicationId "com.example.testTablet"
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
sourceSets{
release{
res.srcDirs = ['androidRelease/res/raw']
}
}
}
dependencies {
compile project(':facebook')
}
Run Code Online (Sandbox Code Playgroud)
是用sourceSet正确的方法吗?如果是,应该创建什么文件夹,以便它根据buildType唯一的资源交换适当的资源,而不管是productFlavors什么?
编辑:甚至可以交换jniLibs和raw文件夹资源?
文件夹结构:
src/main/jniLibs/armeabi
phoneRelease/jniLibs/armeabi
tabletRelease/jniLibs/armeabi
Run Code Online (Sandbox Code Playgroud)
文件夹结构是否正确.?
编辑2:根据Xavier的答案,gradle应如下所示:
android {
sourcesets {
phone {
jniLibs.srcDirs = ['phoneRelease/jniLibs/']
res.srcDirs = ['androidRelease/res/raw']
}
tablet {
jniLibs.srcDirs = ['tabletRelease/jniLibs/']
res.srcDirs = ['androidRelease/res/raw']
}
}
}
Run Code Online (Sandbox Code Playgroud)
我一直在阅读很多相互矛盾的答案,其中一些人提到你只需要基于构建变体的单独文件夹,还有一些提到必须使用sourceSet?谢谢!
他们中的一些人提到您只需要基于构建变体的单独文件夹,有些人提到必须使用 sourceSet?
Android 的 Gradle/Gradle 具有源集的预期结构:
res/java/jniLibs/assets/当sourceSets关闭进场是,如果对于给定的sourceset,你想有一个不同的结构:
foo/bar/ickyNativeStuff/assetsBecauseThatSeemsLikeADecentName/每个构建类型、产品风格和构建变体都可以有一个单独的源集(androidTest用于仪器测试),与main. 它们的名称与构建类型/产品风格/构建变体相同。这些将在库存结构中,除非您用于sourceSets更改内容。
因此,要回滚到:
我试图根据它是发布构建类型还是调试构建类型来交换 res/raw 文件夹和 jniLibs/armeabi 文件夹中的一些资源
在资源的情况下,其他源集覆盖main。因此,如果您有src/main/res/...andsrc/main/debug/...和src/main/release/...,并且您正在进行debug构建,src/main/release/...则忽略in 中的任何内容(因为我们没有这样做release),src/main/res/...并且src/main/debug/...将使用in 中和中的任何内容。如果 (src/main/res/raw/boom.ogg和src/debug/res/raw/boom.ogg) 中的资源相同,则debug一个胜过main一个。
我还没有尝试过随jniLibs/构建变体而变化。我的猜测是它的行为更像 Java 代码,在构建变体的源集中的内容和main. 因此,您可以将编译后的 JNI 代码的调试版本src/debug/jniLibs/放在src/release/jniLibs/. 仅在src/main/jniLibs/没有变化的任何库中都有。话虽如此,正如我所提到的,我还没有尝试过这个,所以这里可能会出现问题。
因此,我希望您在 中没有sourcesets闭包build.gradle,而仅使用股票源集结构来处理您的各种位:
src/
main/
...
debug/
jniLibs/
res/
raw/
release
jniLibs/
res/
raw/
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4448 次 |
| 最近记录: |