本篇文章將帶你一起學習如何使用Android Studio進行多渠道打包,學習向導如下:
- 1.簽名檔案的創建
- 2.多渠道打包gradle代碼配置
- 3.使用美團的Walle進行多渠道打包
1.簽名檔案的創建
首先點擊Android Studio的Build選單下的Genreate Signed Bundle Or APK,如下所示:

接著就會出現以下界面,選擇Apk【1處】,然后點擊next:

接著出現以下界面:

這個界面是用已存在的簽名檔案進行簽名,并且輸入簽名檔案密碼,密鑰名和密鑰密碼,我們現在是要創建新的簽名檔案,因此我們要點擊Create new…

接著就會出現以下界面:

填好以上資訊之后點擊下方的OK之后,新版本的Android Studio會出現以下彈框:

只需要點擊OK即可,這對簽名檔案的創建沒有影響,接著會出現以下界面:

點擊Next之后,出現以下界面:

注意一定要選中V1和V2,最好是將簽名檔案放在專案目錄內,我放的地方是app下的jks檔案夾內,因為避免弄丟,弄丟之后上傳市場以及更新版本上傳安裝包時會特別麻煩,需要重新各種申請啥的,點擊finish之后,Android Studio會幫你打一次包,build檔案下會生成一個releas和debug包,這里我就不給截圖了,到這里簽名檔案的創建就完成了,接下來我們就來學習一下如何使用gradle進行腳本配置,進行一次性的打包和多渠道打包,
關于V1和V2簽名的作用:Android V1及V2簽名原理簡析
2.多渠道打包gradle代碼配置
2.1 配置簽名檔案 & 非渠道打正式包
首先我們需要在打包的module中存放簽名檔案,這個路徑很重要,筆者將簽名檔案創建在了app/jks檔案下,如下圖所示:

然后在app下的build.gradle中添加以下代碼:
//配置簽名資訊
signingConfigs{
release{
keyAlias 'test'
keyPassword '123456'
storeFile file('jks/test.jks')
storePassword '123456'
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
//應用簽名配置
signingConfig signingConfigs.release
}
}
然后你就可以進行一鍵打包了,點擊右側Gradle選單,如下所示

接著在彈出來的表單中點擊build下的assemble Task即可進行一鍵打包,打包完成后就可以在編譯完成之后的build目錄下看到release和debug包,這里我就不啰嗦了,

2.2 使用gradle配置多渠道打包
接下來我們來看看如何配置多渠道,首先在app下的AndroidManifest.xml配置以下代碼添加一個渠道的變數:
<!--多渠道打包配置渠道的變數-->
<meta-data
android:name="APP_CHANNEL"
android:value="${APP_CHANNEL_VALUE}"
/>
然后在app下的build.gradle下配置以下代碼:
//渠道配置
productFlavors{
xiaomi{
manifestPlaceholders = [APP_CHANNEL_VALUE:"xiaomi"]
}
baidu{
manifestPlaceholders = [APP_CHANNEL_VALUE:"baidu"]
}
google{
manifestPlaceholders = [APP_CHANNEL_VALUE:"google"]
}
pp{
manifestPlaceholders = [APP_CHANNEL_VALUE:"pp"]
}
}
筆者添加了xiaomi,baidu,google,pp等4個渠道,接下來就進行一鍵打包試試效果

如果出現以下錯誤:

這是由于版本較新,需要在app下build.gradle添加一個配置代碼,代碼如下所示:
android {
compileSdkVersion 29
buildToolsVersion "30.0.2"
defaultConfig {
applicationId "com.example.android_study"
minSdkVersion 21
targetSdkVersion 29
versionCode 1
versionName "1.0"
//添加下面這行代碼
flavorDimensions "default"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
......
}
添加完成之后再次進行打包,就可以發現等一會兒,4個渠道包被一一打出來了,如下圖所示:

到這里gradle配置多渠道打包已經完成,那么現在還存在一個問題,那就是如何獲取當前的渠道呢?代碼如下所示:
Kotlin代碼:
fun getChannelName(ctx: Activity?): String? {
if (ctx == null) {
return null
}
var channelName: String? = ""
try {
val packageManager = ctx.packageManager
if (packageManager != null) {
//注意此處為ApplicationInfo 而不是 ActivityInfo,因為友盟設定的meta-data是在application標簽中,而不是某activity標簽中,所以用ApplicationInfo
val applicationInfo =
packageManager.getApplicationInfo(ctx.packageName, PackageManager.GET_META_DATA)
if (applicationInfo.metaData != null) {
channelName = applicationInfo.metaData.getString("你的渠道變數名")
}
}
} catch (e: PackageManager.NameNotFoundException) {
e.printStackTrace()
}
return channelName
}
Java代碼:
//獲取渠道名稱
public static String getChannelName(Activity ctx) {
if (ctx == null) {
return null;
}
String channelName = "";
try {
PackageManager packageManager = ctx.getPackageManager();
if (packageManager != null) {
//注意此處為ApplicationInfo 而不是 ActivityInfo,因為友盟設定的meta-data是在application標簽中,而不是某activity標簽中,所以用ApplicationInfo
ApplicationInfo applicationInfo = packageManager.getApplicationInfo(ctx.getPackageName(), PackageManager.GET_META_DATA);
if (applicationInfo != null) {
if (applicationInfo.metaData != null) {
channelName = applicationInfo.metaData.getString("你的渠道變數名");
}
}
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return channelName;
}
查看完整代碼請點擊此處
3.使用美團的Walle進行多渠道打包
美團的Walle打包可謂是神器,筆者公司也是在一直使用,相比于自己去手動配置gradle進行多渠道打包,Walle不僅僅是方便,而且還有很多特色的功能,筆者這里也就不啰嗦了,直接上官方博客吧:新一代開源Android渠道包生成工具Walle
- WalleGitHub地址
- Walle的使用 & 常規問題以及解決方案
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/230330.html
標籤:其他
