[英]packaging options based on product flavor in gradle
我正在使用打包選項來排除一些庫。 是否可以根據產品口味提供包裝選項。 例如 -
android {
productFlavors {
flavorDimensions 'models'
S2 {
flavorDimension 'models'
minSdkVersion 22
....
}
S6 {
flavorDimension 'models'
minsdkversion 22
....
}
}
packagingOptions {
exclude 'lib/armeabi/libs2.so'
exclude 'lib/arm64-v8a/libs6.so
}
}
現在在上面的代碼中,我只想排除為s6
風格生成的 apk 中的'lib/armeabi/libs2.so'
,並且只想排除為s2
風格生成的 apk 中的'lib/arm64-v8a/libs6.so'
我們怎樣才能做到這一點。
我遇到了同樣的問題,然后,我開發了一個 gradle 插件來解決這個問題。 你可以在這里查看(android-soexcluder)
它非常易於使用:
soexcluder {
s2 {
exclude 'lib/arm64-v8a/libs6.so'
}
s6 {
exclude 'lib/armeabi/libs2.so'
}
}
除此之外, 存儲庫中甚至還有一個示例項目
基於@Dodolong 解決方案:
packagingOptions {
...
gradle.startParameter.getTaskNames().each { task ->
if (task.contains('assemble')) {
if (task.contains('s2')) {
exclude 'lib/**/my_cool_lib1.so'
} else if (task.contains('s6')) {
exclude 'lib/**/my_cool_lib2.so'
}
}
}
}
我遇到了同樣的問題,我在依賴項閉包中添加了代碼短語。 這個概念是在執行任務時檢測風味類型。 並找到 productFlavors 的實例以排除庫。
android {
productFlavors {
flavorDimensions 'models'
S2 {
flavorDimension 'models'
minSdkVersion 22
....
}
S6 {
flavorDimension 'models'
minsdkversion 22
....
}
}
}
dependencies {
gradle.startParameter.getTaskNames().each { task ->
println 'task name is :' + task
if (task.contains('assemble')) {
def android = project.extensions.findByName("android")
if(android != null) {
com.android.build.gradle.internal.dsl.PackagingOptions packagingOptions = android["packagingOptions"]
if (packagingOptions != null) {
if(task.contains("S2")){
packagingOptions.exclude('lib/lib_for_s2.so')
} else if(task.contains("S6")) {
packagingOptions.exclude'lib/lib_for_s6.so')
}
}
}
println 'libraries will be excluded: ' + packagingOptions.excludes
}
}
}
偶然發現了同樣的問題,但想刪除一些資產文件,運行 Android Studio 4.0。
排除每個變體/風格的 .so 文件實際上非常容易:
productFlavors {
flavor1 {
packagingOptions {
exclude 'lib/x86/libshared.so'
}
}
}
可悲的是,它不適用於資產!?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.