需求:测试环境和生产环境两个APP同时安装到手机上。
分析:两个功能相同的APP在不同环境下要求都能安装则相当于更改了包名,而更改包名可以采用android studio多渠道打包的方式类似更改相应的应用图标、应用名字、甚至应用包名。
第一步
在AndroidManifest.xml
中修改 application
配置,
<application
android:name=".App"
android:allowBackup="true"
android:icon="${app_icon}"//更改
android:label="${app_name}"//更改
android:theme="@style/ActivityTheme">
//添加
<meta-data
android:name="CHANNEL_ID"
android:value="${UMENG_CHANNEL_VALUE}" />
第二步
主module中的gradle.build
配置更改
//*************************新增**********************************
//******应用程序ID,务必保证准确性,不得随意更改******
def final ApplicationId = 'com.sinovatech.wanda.sg'
def releaseTime() {
return new Date().format("yyyyMMdd_HHmm")
}
//***********************************************************
android {
compileSdkVersion 26
buildToolsVersion '27.0.3'
defaultConfig {
applicationId "com.cqx.sg"
minSdkVersion 14
targetSdkVersion 26
versionCode 61
versionName '3.2.8'
flavorDimensions "app"//新增
ndk {
// 设置支持的SO库架构
abiFilters 'armeabi' //, 'x86', 'armeabi-v7a', 'x86_64', 'arm64-v8a'
}
}
signingConfigs {
config {
keyAlias 'cc'
keyPassword 'cc'
storeFile file('F:/work/yhxx/cc.keystore')
storePassword 'cc'
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
//*************************新增start**********************************
productFlavors {
//********生产环境(默认渠道)******
prod {
manifestPlaceholders = [
UMENG_CHANNEL_VALUE: "prod",
app_icon : "@drawable/ic_launcher",
app_name : "@string/app_name",
]
}
//********开发环境(applicationId不一样)******
dev {
applicationId applicationId + ".dev"
manifestPlaceholders = [
UMENG_CHANNEL_VALUE: "dev",
app_icon : "@drawable/ic_launcher_test",
app_name : "@string/app_name",
]
}
}
android.applicationVariants.all {
variant ->
variant.outputs.all {
output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
// 输出apk名称为WDSG__pro/dev_version_time.apk
def fileName = "WDSG_${variant.productFlavors[0].name}_V${defaultConfig.versionName}_${releaseTime()}.apk"
outputFileName = fileName
}
}
}
//*************************新增End**********************************
useLibrary 'org.apache.http.legacy'
}
dependencies {
implementation project(':floatingGroupExpandableListView')
implementation 'com.google.code.gson:gson:2.6.2'
implementation files('libs/Msc.jar')
implementation files('libs/Sunflower.jar')
implementation files('libs/commons-codec-1.4.jar')
implementation files('libs/httpmime-4.1.3.jar')
implementation files('libs/trinea-android-common.jar')
implementation files('libs/universal-image-loader-1.9.2-with-sources.jar')
implementation files('libs/zxing22_android-integration.jar')
implementation files('libs/zxing22_core.jar')
implementation project(':viewPagerIndicatorLib')
implementation 'com.android.support:recyclerview-v7:26.1.0'
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support:support-v4:26.1.0'
implementation 'com.bm.photoview:library:1.4.1'
implementation project(':easypermissions')
implementation 'com.tencent.bugly:crashreport:2.6.6'
//其中latest.release指代最新Bugly SDK版本号,也可以指定明确的版本号,例如2.1.9
implementation 'com.tencent.bugly:nativecrashreport:3.3.1'
//其中latest.release指代最新Bugly NDK版本号,也可以指定明确的版本号,例如3.0
implementation 'com.github.bumptech.glide:glide:4.6.1'
annotationProcessor 'com.github.bumptech.glide:compiler:4.6.1'
implementation 'com.hyman:flowlayout-lib:1.1.2'
debugImplementation 'com.amitshekhar.android:debug-db:1.0.4'
//RxJava
implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'
implementation 'com.tbruyelle.rxpermissions2:rxpermissions:0.9.5@aar'
第三步
直接按照平时打包习惯用工具或者命令行均可