Android离线多渠道打包教程
前言
Android 需要多渠道打包的主要原因是 支持不同的设备、市场和用户需求。通过多渠道打包,可以将一个应用根据不同的目标市场、设备配置、网络环境、语言等因素生成多个定制化的 APK,从而提高应用发布的灵活性和覆盖面。
一、原生build.gradle文件配置?
plugins {
alias(libs.plugins.android.application)
}
android {
namespace 'com.qnt'
compileSdk 35
defaultConfig {
applicationId "com.qnt"
minSdk 21
targetSdk 35
versionCode 1
versionName "1.0.0"
multiDexEnabled true
ndk {
abiFilters /*'x86',*/ 'armeabi-v7a', 'arm64-v8a'
}
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
// 定义动态的 BuildConfig 字段
buildConfigField "String", "DCLOUD_STREAMAPP_CHANNEL", "\"com.qnt|db288fe7d1e89fa4|0123456789|release\""
}
sourceSets {
main {
assets.srcDirs = ['src/main/assets']
}
}
aaptOptions {
additionalParameters '--auto-add-overlay'
ignoreAssetsPattern "!.svn:!.git:.*:!CVS:!thumbs.db:!picasa.ini:!*.scc:*~"
}
signingConfigs {
release {
storeFile file("../jnt.jks")
storePassword "jt"
keyAlias "jalias"
keyPassword "jt"
v1SigningEnabled true //兼容v1
v2SigningEnabled true //兼容v2
}
}
buildTypes {
debug {
signingConfig signingConfigs.release
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
release {
signingConfig signingConfigs.release
minifyEnabled false
shrinkResources false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
buildFeatures {
buildConfig = true // Enable BuildConfig generation
}
flavorDimensions "default"
productFlavors {
APP_CHANNEL_DOU {
buildConfigField "String", "DCLOUD_STREAMAPP_CHANNEL", "\"com.qnt|db288fe7d1e89fa4|0123456789|1_APP_CHANNEL_DOU\""
manifestPlaceholders = [DCLOUD_STREAMAPP_CHANNEL: "com.qnt|db288fe7d1e89fa4|0123456789|1_APP_CHANNEL_DOU"]
}
APP_CHANNEL_DOU {
buildConfigField "String", "DCLOUD_STREAMAPP_CHANNEL", "\"com.qnt|db288fe7d1e89fa4|0123456789|1_APP_CHANNEL_DOU\""
manifestPlaceholders = [DCLOUD_STREAMAPP_CHANNEL: "com.qnt|db288fe7d1e89fa4|0123456789|1_APP_CHANNEL_DOU"]
}
APP_CHANNEL_KUAI {
buildConfigField "String", "DCLOUD_STREAMAPP_CHANNEL", "\"com.qnt|db288fe7d1e89fa4|0123456789|2_APP_CHANNEL_KUAI\""
manifestPlaceholders = [DCLOUD_STREAMAPP_CHANNEL: "com.qnt|db288fe7d1e89fa4|0123456789|2_APP_CHANNEL_KUAI"]
}
APP_CHANNEL_BAIDU {
buildConfigField "String", "DCLOUD_STREAMAPP_CHANNEL", "\"com.qnt|db288fe7d1e89fa4|0123456789|4_APP_CHANNEL_BAIDU\""
manifestPlaceholders = [DCLOUD_STREAMAPP_CHANNEL: "com.qnt|db288fe7d1e89fa4|0123456789|4_APP_CHANNEL_BAIDU"]
}
huawei {
buildConfigField "String", "DCLOUD_STREAMAPP_CHANNEL", "\"com.qnt|db288fe7d1e89fa4|0123456789|huawei\""
manifestPlaceholders = [DCLOUD_STREAMAPP_CHANNEL: "com.qnt|db288fe7d1e89fa4|0123456789|huawei"]
}
xiaomi {
buildConfigField "String", "DCLOUD_STREAMAPP_CHANNEL", "\"com.qnt|db288fe7d1e89fa4|0123456789|xiaomi\""
manifestPlaceholders = [DCLOUD_STREAMAPP_CHANNEL: "com.qnt|db288fe7d1e89fa4|0123456789|xiaomi"]
}
vivo {
buildConfigField "String", "DCLOUD_STREAMAPP_CHANNEL", "\"com.qnt|db288fe7d1e89fa4|0123456789|vivo\""
manifestPlaceholders = [DCLOUD_STREAMAPP_CHANNEL: "com.qnt|db288fe7d1e89fa4|0123456789|vivo"]
}
oppo {
buildConfigField "String", "DCLOUD_STREAMAPP_CHANNEL", "\"com.qnt|db288fe7d1e89fa4|0123456789|oppo\""
manifestPlaceholders = [DCLOUD_STREAMAPP_CHANNEL: "com.qnt|db288fe7d1e89fa4|0123456789|oppo"]
}
a360 {
buildConfigField "String", "DCLOUD_STREAMAPP_CHANNEL", "\"com.qnt|db288fe7d1e89fa4|0123456789|360\""
manifestPlaceholders = [DCLOUD_STREAMAPP_CHANNEL: "com.qnt|db288fe7d1e89fa4|0123456789|360"]
}
YYB {
buildConfigField "String", "DCLOUD_STREAMAPP_CHANNEL", "\"com.qnt|db288fe7d1e89fa4|0123456789|YYB\""
manifestPlaceholders = [DCLOUD_STREAMAPP_CHANNEL: "com.qnt|db288fe7d1e89fa4|0123456789|YYB"]
}
RongYao {
buildConfigField "String", "DCLOUD_STREAMAPP_CHANNEL", "\"com.qnt|db288fe7d1e89fa4|0123456789|RongYao\""
manifestPlaceholders = [DCLOUD_STREAMAPP_CHANNEL: "com.qnt|db288fe7d1e89fa4|0123456789|RongYao"]
}
MeiZu {
buildConfigField "String", "DCLOUD_STREAMAPP_CHANNEL", "\"com.qnt|db288fe7d1e89fa4|0123456789|MeiZu\""
manifestPlaceholders = [DCLOUD_STREAMAPP_CHANNEL: "com.qnt|db288fe7d1e89fa4|0123456789|MeiZu"]
}
GDT {
buildConfigField "String", "DCLOUD_STREAMAPP_CHANNEL", "\"com.qnt|db288fe7d1e89fa4|0123456789|GDT\""
manifestPlaceholders = [DCLOUD_STREAMAPP_CHANNEL: "com.qnt|db288fe7d1e89fa4|0123456789|GDT"]
}
SAMSUNG {
buildConfigField "String", "DCLOUD_STREAMAPP_CHANNEL", "\"com.qnt|db288fe7d1e89fa4|0123456789|SAMSUNG\""
manifestPlaceholders = [DCLOUD_STREAMAPP_CHANNEL: "com.qnt|db288fe7d1e89fa4|0123456789|SAMSUNG"]
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.aar', '*.jar'], exclude: [])
implementation libs.appcompat
implementation libs.material
implementation libs.activity
implementation libs.constraintlayout
implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0'
implementation 'androidx.core:core:1.6.0'
implementation "androidx.fragment:fragment:1.1.0"
implementation 'androidx.recyclerview:recyclerview:1.1.0'
implementation 'androidx.webkit:webkit:1.5.0'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'com.facebook.fresco:fresco:2.5.0'
implementation "com.facebook.fresco:animated-gif:2.5.0"
implementation 'com.alibaba:fastjson:1.2.83'
implementation 'com.github.bumptech.glide:glide:4.9.0'
// 微信
implementation 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:6.7.9'
// 支付宝
implementation 'com.alipay.sdk:alipaysdk-android:15.8.11'
implementation "net.lingala.zip4j:zip4j:2.11.5"
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
implementation 'com.squareup.okio:okio:2.9.0'
// implementation project(':uniplugin_module')
implementation project(':qnt_module')
testImplementation libs.junit
androidTestImplementation libs.ext.junit
androidTestImplementation libs.espresso.core
}
二、模块AndroidManifest.xml
提示:将这块代码放到 <application> 里面
<meta-data
android:name="DCLOUD_STREAMAPP_CHANNEL"
android:value="${DCLOUD_STREAMAPP_CHANNEL}" />
三、uniapp代码使用教程
plus.runtime.channel 获取渠道
plus.runtime.version 获取版本号 1.0.0
plus.runtime.versionCode 获取code 1
if(plus.runtime.isApplicationExist({pname:'com.tencent.mm',action:'weixin://'})){
console.log("微信应用已安装");
}else{
console.log("微信应用未安装");
}
plus.runtime.appid 获取包名,需要云打包或者离线打包才能正确获取
四、打包处理
提示:有以下显示说明配置成功,具体自行验证是否生效

总结
多渠道打包的核心目的是便于管理和发布不同版本的应用,减少开发的重复劳动,同时提供定制化的功能和更好的数据分析能力,帮助开发者在不同的渠道和市场中更好地推广和管理应用。
2292

被折叠的 条评论
为什么被折叠?



