国产精品国产三级国产试看,香蕉人精品视频多人免费永久视频,宅男噜噜噜66一区二区,天天插天天射,女人体(1963)菠萝蜜视频,97在线视频人妻无码一区,精品久久久久精品色婷婷综合

網(wǎng)站首頁
手機(jī)版

android多渠道打包配置 android 多渠道打包

更新時(shí)間:2023-07-31 00:04:55作者:佚名

android多渠道打包配置 android 多渠道打包

在平時(shí)的Android開發(fā)中,我們經(jīng)常會(huì)遇到在不同網(wǎng)絡(luò)環(huán)境(比如:開發(fā)環(huán)境、測試環(huán)境)之間的切換、一次打多個(gè)渠道包等需求,如何優(yōu)雅的管理網(wǎng)絡(luò)環(huán)境的配置?如何快速的打出多個(gè)渠道包?這是一個(gè)值得研究的問題。

如果每一次在不同網(wǎng)絡(luò)環(huán)境間切換,都需要更改代碼,然而重新打包,那未免有點(diǎn)低效。下面是我的實(shí)踐探索,看網(wǎng)上很多人都是根據(jù)buildType來切換網(wǎng)絡(luò)環(huán)境,感覺有點(diǎn)不好,因?yàn)榫W(wǎng)絡(luò)環(huán)境可能很多種,而buildType我們一般是2種,而且,不同網(wǎng)絡(luò)環(huán)境的包最好能同時(shí)安裝在手機(jī)上,以便我們調(diào)試。最好,我一看這個(gè)包的名稱和圖標(biāo),就能知道這是什么環(huán)境的包。

一、概述

1.多版本

基于buildTypes

(1)debug:調(diào)試版本,無混淆

(2)release:發(fā)布版本,有混淆、壓縮

2.多環(huán)境

基于productFlavors

(1)develop:開發(fā)環(huán)境,開發(fā)和自測時(shí)使用

(2)check:測試環(huán)境,克隆一份生產(chǎn)環(huán)境的配置,在這里測試通過后,再發(fā)布到生產(chǎn)環(huán)境。

之所以沒命名為test是因?yàn)樵趃radle編譯時(shí):ProductFlavor names cannot start with ‘test’

(3)product:生產(chǎn)環(huán)境,正式提供服務(wù)的。

3.多渠道

基于Android新的應(yīng)用簽名方案APK Signature Scheme v2中的APK Signing Block區(qū)塊

我這里使用的是美團(tuán)封裝的Walle庫。使用Walle庫請確保你的Android Gradle 插件版本在2.2.0以上。

為什么不直接使用productFlavors來打包多渠道?因?yàn)閜roductFlavors打多渠道包太慢了,打30個(gè)包差不多十幾分鐘,無法忍受!

為什么不使用美團(tuán)之前基于META-INF進(jìn)行渠道標(biāo)識(shí)的方案?因?yàn)锳ndroid7.0之后的這種黑科技已經(jīng)失效了!

二、示例

1、配置build.gradle

(1) 在位于項(xiàng)目的根目錄 build.gradle 文件中添加Walle Gradle插件的依賴, 如下:

buildscript { dependencies { classpath 'com.android.tools.build:gradle:2.2.3' classpath 'com.meituan.android.walle:plugin:1.0.3' }}

(2) 在當(dāng)前App的 build.gradle 文件中apply這個(gè)插件,并添加上用于讀取渠道號(hào)的aar

apply plugin: 'com.android.application'apply plugin: 'walle'android { compileSdkVersion 25 buildToolsVersion "25.0.2" defaultConfig { minSdkVersion 15 targetSdkVersion 25 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } signingConfigs { release { keyAlias KEY_ALIAS keyPassword KEY_PASSWORD storeFile rootProject.file(KEYSTORE_FILE) storePassword KEYSTORE_PASSWORD } } buildTypes { //調(diào)試版本,無混淆 debug { minifyEnabled false signingConfig signingConfigs.release } //發(fā)布版本,有混淆 release { minifyEnabled true zipAlignEnabled true shrinkResources true signingConfig signingConfigs.release proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } productFlavors { //開發(fā)環(huán)境 develop { buildConfigField "int", "ENV_TYPE", "1" applicationId 'om.soubu.walledemo.develop' manifestPlaceholders = [ app_name: "開-WalleDemo", app_icon: "@drawable/icon_develop" ] } //測試環(huán)境 check { buildConfigField "int", "ENV_TYPE", "2" applicationId 'om.soubu.walledemo.check' manifestPlaceholders = [ app_name: "測-WalleDemo", app_icon: "@drawable/icon_check" ] } //生產(chǎn)環(huán)境 product { buildConfigField "int", "ENV_TYPE", "3" applicationId 'com.soubu.walledemo.product' manifestPlaceholders = [ app_name: "WalleDemo", app_icon: "@drawable/icon_product" ] } }}dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:25.1.0' testCompile 'junit:junit:4.12' compile 'com.meituan.android.walle:library:1.0.3'}

(3) 這里,我根據(jù)不同的環(huán)境生成了不同包名的apk,方便在手機(jī)上同時(shí)安裝多個(gè)環(huán)境的應(yīng)用。為了讓gradle動(dòng)態(tài)更改apk的名稱和圖標(biāo),我們需要在manifest文件中使用


這里我們可以看到debug包都是1.4M,而release包都是0.7M,顯然,我們的混淆和壓縮配置是生效了的,雖然這里我并沒寫混淆規(guī)則


我們分別安裝3個(gè)環(huán)境的包到自己的手機(jī)上:

看三個(gè)包的名稱和圖標(biāo)都不一樣,顯然我們之前在manifest文件中配置的占位符生效了。

然后我們點(diǎn)進(jìn)去分別看看這3個(gè)app的區(qū)別:



這樣,我們就可以在代碼中,根據(jù)環(huán)境字段envType的不同,來選擇不同的網(wǎng)絡(luò)環(huán)境了。

界面的代碼如下:

public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView tvEnv = (TextView) findViewById(R.id.tv_env); TextView tvChannel = (TextView) findViewById(R.id.tv_channel); TextView tvPackage = (TextView) findViewById(R.id.tv_package); String channel = WalleChannelReader.getChannel(this.getApplicationContext()); int envType = BuildConfig.ENV_TYPE; String packageName = getPackageName(); switch (envType) { case EnvType.DEVELOP: tvEnv.setText("envType=" + "開發(fā)環(huán)境"); break; case EnvType.CHECK: tvEnv.setText("envType=" + "測試環(huán)境"); break; case EnvType.PRODUCT: tvEnv.setText("envType=" + "生產(chǎn)環(huán)境"); break; } tvChannel.setText("channel=" + channel); tvPackage.setText("package=" + packageName); }}

3、打包多渠道

在Project的根目錄下新建channel文件:

anzhi #安智baidu #百度huawei #華為oppo #oppowdj #豌豆莢xiaomi #小米yyb #應(yīng)用寶

執(zhí)行g(shù)radle命令:

(1) 打包文件內(nèi)的渠道包

gradle assembleProductRelease -PchannelFile=channel

(2) 打包自定義數(shù)組內(nèi)的渠道包

gradle assembleProductRelease -PchannelList=qihu,vivo,lenovo

關(guān)于Walle庫的更多使用:詳見Github-walle

運(yùn)行結(jié)果:17秒搞定8個(gè)包:1個(gè)默認(rèn)包+7個(gè)渠道包


最后,奉上源碼:WalleDemo

常見問題

1、找不到簽名文件的配置?

汗,因?yàn)槲业腄emo中并沒有上傳我的jks文件,你可以添加自己的jks文件,然后在gradle.properties里面配置好簽名文件的密碼即可

在gradle.properties添加簽名文件的配置key-value

在build.gradle中引用配置的key

2、develop、check、product,如果直接run代碼,怎么設(shè)置默認(rèn)的環(huán)境?

點(diǎn)擊查看AndroidStudio左下角的BuildVariants,然后選擇設(shè)置默認(rèn)的run環(huán)境即可。

BuildVariants= buildTypes* productFlavors

文末送福利啦!!

同時(shí)我經(jīng)過多年的收藏目前也算收集到了一套完整的學(xué)習(xí)資料以及高清詳細(xì)的Android架構(gòu)進(jìn)階學(xué)習(xí)導(dǎo)圖及筆記免費(fèi)分享給大家,希望對(duì)想成為架構(gòu)師的朋友有一定的參考和幫助。

**下面是部分資料截圖,誠意滿滿:特別適合有開發(fā)經(jīng)驗(yàn)的Android程序員們學(xué)習(xí)。

以上就是本站?android多渠道打包配置(安卓多渠道打包教程)的相關(guān)內(nèi)容了,更多精彩請關(guān)注作者:萬年知識(shí)

聲明:本文由本站【創(chuàng)業(yè)者資源平臺(tái)】作者編輯發(fā)布,更多技術(shù)關(guān)注萬年技術(shù)!

本文標(biāo)簽: [db:關(guān)鍵詞]  

為您推薦

android多渠道打包配置 android 多渠道打包

在平時(shí)的Android開發(fā)中,我們經(jīng)常會(huì)遇到在不同網(wǎng)絡(luò)環(huán)境(比如:開發(fā)環(huán)境、測試環(huán)境)之間的切換、一次打多個(gè)渠道包等需求,如何優(yōu)雅的管理網(wǎng)絡(luò)環(huán)境的配置?如何快速的打出多個(gè)渠道包?這是一個(gè)值得研究的問題

2023-07-31 00:04

發(fā)帖器好不好用(發(fā)帖器好不好用怎么看)

Linkedin已經(jīng)成為了很多的企業(yè)老板、領(lǐng)導(dǎo)、職場員工甚至自由職業(yè)者使用最多的社交平臺(tái),與休閑社交類的社交平臺(tái)比較大的區(qū)別是,Linkedin是定位在于職場商務(wù)人士使用的,與商業(yè)營銷推廣有著天然的契

2023-07-31 00:04

免費(fèi)的高效項(xiàng)目管理軟件(免費(fèi)的高效項(xiàng)目管理軟件有哪些)

項(xiàng)目管理軟件有哪些?對(duì)于很多從事項(xiàng)目開發(fā)與設(shè)計(jì)的團(tuán)隊(duì)都會(huì)有這樣的需求,一款優(yōu)秀的項(xiàng)目進(jìn)度管理軟件在企業(yè)項(xiàng)目實(shí)施中有著極為重要的作用,它伴隨著項(xiàng)目計(jì)劃、定義、監(jiān)控、控制以及確認(rèn)交付的全部過程。本文盤點(diǎn)分

2023-07-31 00:04

證婚人講話內(nèi)容(證婚人講話內(nèi)容范本)

1、各位來賓。2、很高興能以證婚人的身份參加婚禮!今天,..先生和..小姐即將步入婚姻的殿堂,成為牽手一生的伴侶。(音樂開始)借用一句詩人的話說,黑夜給了我黑色的眼睛,我卻用它尋找美好的愛情,如今,新郎、新娘都找到了他們

2023-07-31 00:03

2020安徽高考時(shí)間(2020年安徽省高考錄取時(shí)間)

1、經(jīng)黨中央、國務(wù)院同意,2020年全國普通高等學(xué)校招生統(tǒng)一考試(以下簡稱“高考”)延期一個(gè)月舉行,考試時(shí)間為7月7日至8日。2、具體科目考試時(shí)間安排為:7月7日,語文9:00至11:30;數(shù)學(xué)15:00至17:00。7

2023-07-31 00:01

2020陜西中考時(shí)間(20201年陜西中考時(shí)間)

1、2020陜西中考時(shí)間:7月17日-19日(文化課)。2、“中考”,是檢驗(yàn)初中在校生是否達(dá)到初中學(xué)業(yè)水平的考試;它是初中畢業(yè)證書發(fā)放的必要條件,考試科目將國家課程方案所規(guī)定的學(xué)科全部列入初中學(xué)業(yè)水平考試的范圍。3、考試

2023-07-30 23:59