Android的多渠道打包

941 阅读2分钟

一套Android代码,不同的url,打出来不同apk包名的包,对应不同的仓库。

1.打包名称


// App名称 + 渠道号 +版本号 + 正式测试 + 时间  
applicationVariants.all { variant ->  
variant.outputs.all { output ->  
def outputFile = output.outputFile  
if (outputFile != null && outputFile.name.endsWith('.apk')) {  
// def fileName =outputFile.name.replace(".apk", "-${defaultConfig.versionName}.apk")  
def fileName = "WMS_${variant.productFlavors[0].name}_${versionName}_${buildType.name}_${generateTime()}.apk"  
outputFileName = fileName  
}  
}  
}

2.主要配置


flavorDimensions "example_value"  
  
productFlavors {  
origin { // 湖北  
// manifestPlaceholders = [channel_value: "origin channel"]  
buildConfigField("String", "API_HOST", "\"address\"")  
// resValue("string", "example_value", "origin tips")  
  
signingConfig signingConfigs.wdsys  
}  
  
exampleFlavor { // 湖南  
// applicationId "com.chenyihong.exampledflavordemo"  
versionCode 2  
versionName "1.0.2-flavor"  
  
// manifestPlaceholders = [channel_value: "flavor channel"] // App的名字  
buildConfigField("String", "API_HOST", "\address\"")  
// resValue("string", "example_value", "flavor tips")  
  
signingConfig signingConfigs.wdsys  
}  
}

3.测试环境对应同一个url

buildTypes {  
release {  
minifyEnabled false  
// signingConfig null  
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'  
signingConfig signingConfigs.test  
}  
  
debug {  
buildConfigField "String", "API_HOST", '"http://10.1.12.144:9010/wms-client/"'  
signingConfig signingConfigs.test  
}  
}

4.要在 Android 的多渠道打包中配置不同的 URL 供 releasedebug 使用,你可以通过以下步骤实现:

1. 配置 build.gradle

app/build.gradle 文件中,为 releasedebug 配置不同的构建类型,并为每个产品风味(flavor)设置相应的 URL。

android {
    compileSdkVersion 33
    defaultConfig {
        applicationId "com.example.app"
        minSdkVersion 21
        targetSdkVersion 33
        versionCode 1
        versionName "1.0"
    }

    flavorDimensions "version"
    productFlavors {
        flavorA {
            dimension "version"
        }
        flavorB {
            dimension "version"
        }
    }

    buildTypes {
        debug {
            buildConfigField "String", "BASE_URL", '"https://debug-api.example.com/"'
        }
        release {
            buildConfigField "String", "BASE_URL", '"https://release-api.example.com/"'
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}
2. 使用 BuildConfig 获取 URL

在你的应用代码中,你可以通过 BuildConfig 类访问不同构建类型和风味的配置。例如:

String baseUrl = BuildConfig.BASE_URL;
3. 资源文件配置

如果你需要为不同风味和构建类型配置不同的 URL,还可以通过资源文件配置。例如:

目录结构
  • src/debug/res/values/strings.xml
  • src/release/res/values/strings.xml
  • src/flavorA/debug/res/values/strings.xml
  • src/flavorA/release/res/values/strings.xml
  • src/flavorB/debug/res/values/strings.xml
  • src/flavorB/release/res/values/strings.xml
strings.xml 示例

src/debug/res/values/strings.xml:

<resources>
    <string name="api_base_url">https://debug-api.example.com/</string>
</resources>

src/release/res/values/strings.xml:

<resources>
    <string name="api_base_url">https://release-api.example.com/</string>
</resources>
4. 使用资源文件中的 URL

在你的代码中,通过资源文件访问 URL,例如:

String baseUrl = getString(R.string.api_base_url);
5. 打包和测试

通过执行不同的 Gradle 构建命令,例如 ./gradlew assembleFlavorADebug./gradlew assembleFlavorARelease,Gradle 会根据配置自动使用不同的 URL。

这些步骤将帮助你在多渠道打包中正确地配置不同的 releasedebug 环境 URL。

参考文章

6.找到BuildConfig文件

image.png 在这里添加多渠道打包添加的参数,该文件中属性赋初始值,不影响使用。 特别注意!!!切换渠道编译的时候,多渠道打包配置的参数比如API_HOST,会出现无法引用的问题,是因为该渠道下,BuildConfig文件没有更新,重新切换选择即可。

image.png