私は最終的に私の問題のためのハッキーなアプローチを見つけました。それから、私は皆のためにここで共有して改善する方が良いです。
ステップ1:
あなたはアプリからフラグを提供し、preBuild
に、それに依存する必要があります。ここにそれを行うためのサンプルコードです。機能のためにHow to get current flavor in gradleありがとう。私はちょっと修正しました。
import java.util.regex.Matcher
import java.util.regex.Pattern
def getCurrentFlavor() {
Gradle gradle = getGradle()
String tskReqStr = gradle.getStartParameter().getTaskRequests().toString()
Pattern pattern;
if(tskReqStr.contains(":app:assemble"))
pattern = Pattern.compile("assemble(\\w+)(Release|Debug)")
else if(tskReqStr.contains(":app:generate"))
pattern = Pattern.compile("generate(\\w+)(Release|Debug)")
else
pattern = Pattern.compile("incremental(\\w+)(Release|Debug)")
Matcher matcher = pattern.matcher(tskReqStr)
if(matcher.find())
return matcher.group(1).toLowerCase()
else
{
println "NO MATCH FOUND"
return "";
}
}
task setFlavorFlag() {
def flavorName = getCurrentFlavor();
if (!flavorName.equals("")) {
printf("Setting flag from app...\n")
def f = file("../build/conf.tmp")
if (!f.exists()) f.createNewFile()
f.write("-D${flavorName.toUpperCase()}")
}
}
preBuild.dependsOn setFlavorFlag
dependencies {
compile project(path: ':mylibrary')
}
ステップ2:ライブラリーから
アクセスフラグ。
ndk {
...
def f = file("../build/conf.tmp")
if (f.exists()) {
printf("Building library for Flavor:%s\n", f.text)
ndk.CFlags.add(f.text);
f.delete()
}
}
OK:私はndk
セクションでそれをやりました。今あなたのアプリFlavorは-D
オプションで渡され、ライブラリをコンパイルします。 2〜3日後に私が見つけたアプローチがありました。私はこのアプローチのすべての改善のために開いています。