众所周知,相同包名的APP,是不能同时安装的,但是我们实际开发中,测试同学往往在测试环境没问题,上了生产环境,却发现了bug,这时候就只能卸载生产环境的包,再去安装测试环境。如果开发流程中缺少自动化打包或者测试同学不保存蒲公英二维码,这时候就会产生多余时间成本。那么有没有一种可能,同时安装测试与生产环境的包呢?
第一步:在项目的build.gradle增加
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
debuggable true
zipAlignEnabled true //是否支持zip
resValue("string", "ENVIRONMENT", "RELEASE")
buildConfigField "boolean", "LOG_DEBUG", "false"
resValue "string", "name", "release"//必须保证资源文件存在,否则会报错
resValue "int", "logo", "release"//必须保证资源文件存在,否则会报错
signingConfig signingConfigs.release
}
debug {
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
minifyEnabled false
zipAlignEnabled true
debuggable true
applicationIdSuffix ".debug"
resValue("string", "ENVIRONMENT", "DEBUG")
resValue "string", "name", "debug"//必须保证资源文件存在,否则会报错
}
}
以上操作适用于大部分同学,但如果你的APP中含有 ContentProvider或者FileProvider(Android7.0文件适配必备),也就是和包名相关的;或者你想更直接点,直接区分测试与生产的app名及图标,那么你可能需要如下操作了:
第二步:
<provider
android:name="com.huawei.hms.update.provider.UpdateProvider"
android:authorities="{applicationId}"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths" />
适配也很简单,将 authorities=”" 里的包名改为 ${applicationId} 即可
都到这一步了,那不如更友好点,让测试同学更好辨认:
修改app.build文件
buildTypes {
release {
...
manifestPlaceholders = [icon: "@mipmap/logo",
//这里也可以加入FileProvider的不同包名
//例如: fileProvider: "com.petterp.release.provider"
//根据自己的需求来定
name: "I贝康"]
...
}
debug {
...
manifestPlaceholders = [icon: "@mipmap/logo_debug",
//这里也可以加入FileProvider的不同包名
//例如: fileProvider: "com.petterp.debug.provider"
//根据自己的需求来定
name: "I贝康测试"]
...
}
}
第三步:
<application
android:name=".application.SampleApplication"
android:allowBackup="true"
android:appComponentFactory="任意值"
android:hardwareAccelerated="true"
android:icon="{name}"//重点
android:largeHeap="true"
android:supportsRtl="true"
android:testOnly="false"
android:theme="@style/AppTheme"
tools:replace="android:label,android:icon">//重点
注意:1.这样包名会增加.debug所以使用包名的地方请注意
2.定义变量
buildTypes {
release {
buildConfigField "boolean", "debug", "true"
}
debug {
buildConfigField "boolean", "debug", "false"
}
}
获取BuildConfig.debug
网友评论