tinkerEnable能否根据buildTypes来配置打开或关闭?

Created on 22 Feb 2017  ·  5Comments  ·  Source: Tencent/tinker

我搜了相关的issues没有找到答案,也进行了多种尝试并没有成功,所以特来请教一下。

现在tinkerEnable只能手动的开或者关,能够根据buildTypes(release/debug)来判断打开与关闭?

平时开发的时候一般是打debug包,不需要tinker,这时候开发可以把Instant run打开,发布的时候打release包再把tinker开关打开。

Most helpful comment

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;
    }
}

All 5 comments

自己写就可以

@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!!

Was this page helpful?
0 / 5 - 0 ratings

Related issues

woshishuxiong picture woshishuxiong  ·  8Comments

xingstarx picture xingstarx  ·  5Comments

LaurenceYang picture LaurenceYang  ·  6Comments

AndwareSsj picture AndwareSsj  ·  5Comments

devzwy picture devzwy  ·  5Comments