我搜了相关的issues没有找到答案,也进行了多种尝试并没有成功,所以特来请教一下。
现在tinkerEnable只能手动的开或者关,能够根据buildTypes(release/debug)来判断打开与关闭?
平时开发的时候一般是打debug包,不需要tinker,这时候开发可以把Instant run打开,发布的时候打release包再把tinker开关打开。
自己写就可以
@iluhcm 请教,这个应该怎么写?
@shwenzhang @iluhcm
这样写可行么?但是tinker 的配置是在另外一个 tinkerpatch.gradle文件里。
`buildTypes {
debug {
//debug时使用release签名
signingConfig signingConfigs.release
//Zip代码压缩优化
zipAlignEnabled true
//移除无用资源
shrinkResources true
// tinker 开关
tinkerEnable = false
}
release {
//release时使用release签名
signingConfig signingConfigs.release
//代码混淆
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
//Zip代码压缩优化
zipAlignEnabled true
//移除无用资源
shrinkResources true
tinkerEnable = true
}
}`
Try this please. @BeEagle
ext {
//for some reason, you may want to ignore tinkerBuild, such as instant run debug build?
tinkerEnabled = isRelease()
...
}
/**
* 如果只想在Release中打开tinker,可以把tinkerEnable赋值为这个函数的return
* @return 是否为release
*/
def isRelease() {
Gradle gradle = getGradle()
String tskReqStr = gradle.getStartParameter().getTaskRequests().toString()
Pattern pattern;
if (tskReqStr.contains("assemble")) {
println tskReqStr
pattern = Pattern.compile("assemble(\\w*)(Release|Debug)")
} else {
pattern = Pattern.compile("generate(\\w*)(Release|Debug)")
}
Matcher matcher = pattern.matcher(tskReqStr)
if (matcher.find()) {
String task = matcher.group(0).toLowerCase()
println("[BuildType] Current task: " + task)
return task.contains("release")
} else {
println "[BuildType] NO MATCH FOUND"
return true;
}
}
iluhcm: isRelease() - it works!!
Most helpful comment
Try this please. @BeEagle