Android Studio中一套代碼多渠道打包的實現方法
一套代碼達到以下效果:
打包不同applicationId能同時安裝在同一手機上 不同logo,app名稱, 不同第三方SDK接入配置(例如微信分享appid,激光推送appkey) 能區分debug和release配置 使用到的功能:productFlavor和buildTypes原理:優先級buildTypes大于productFlavor
示例:一套代碼為兩家銀行打包apk
1. 修改build.gradle。buildTypes保持默認debug和release兩種設置即可,android節點內添加兩個productFlavor。
flavorDimensions ’bank’productFlavors { icbc { dimension = ’bank’ applicationId=’com.icbc.mobilebank manifestPlaceholders = [bankName: ’工商銀行’] } ccb { dimension = ’bank’ applicationId = ’com.cbc. mobilebank manifestPlaceholders = [bankName: ’建設銀行’] }}
2. 修改srcmainAndroidManifest.xml,使用'${bankName}'和${applicationId}替換相應位置
2.1 設置app名稱,android:label='${bankName}',切記tools:replace要加上android:label。(App logoandroid:icon也可以利用這個方法來區分,但更推薦后面的方法)
<applicationandroid:name='com.dhcc.app.application.MyApplication'android:allowClearUserData='true'android:icon='@drawable/logo'android:label='${bankName}'android:largeHeap='true'android:networkSecurityConfig='@xml/network_security_config'tools:replace='android:name,android:label'tools:targetApi='n'>
2.2 設置所有android:authorities,例如
<providerandroid:name='android.support.v4.content.FileProvider'android:authorities='${applicationId}. FileProvider 'android:exported='false'android:grantUriPermissions='true'><meta-dataandroid:name='android.support.FILE_PROVIDER_PATHS'android:resource='@xml/file_paths' /></provider> <provider android:name='cn.jpush.android.service.DataProvider'android:process=':pushcore'android:authorities='${applicationId}.DataProvider' android:exported='false' />
2.3引用了第三方sdk,例如極光推送需要修改
<permission android:name='${applicationId}.permission.JPUSH_MESSAGE'android:protectionLevel='signature' /><permission android:name='${applicationId}.permission.MIPUSH_RECEIVE'android:protectionLevel='signature' />
3.在srcmain同級目錄添加三個文件夾'icbc ',''icbcRelease,'release '。選擇icbcRelease編譯時,編譯器會按照' icbcRelease > release>icbc>main'這樣的優先級合并同名文件編譯。
4. 根據上面的優先級,設置圖片資源。參照mainresdrawablelogo.png文件層級一樣,給文件夾添加自定義app logo,如果你icbc在debug和release用同一個logo,那就只在icbc文件夾添加即可。
5. 設置字符串xml資源。
5.1 新建srcmainresvaluesconfigs.xml,放置一些各銀行不一樣的參數。也可以不增加configs.xml文件,直接追加在strings.xml內。
<?xml version='1.0' encoding='utf-8'?><resources><string name='WXAPPId'>XXXXXXXXXXXXXXX</string><string name='JPUSH_APPKEY'>XXXXXXXXXXXXXXXXXX</string></resources>
5.2 根據實際情況為'icbc ',''icbcRelease,'release '增加對應configs.xml。可以只增加JPUSH_APPKEY,那么WXAPPId會使用main的值。
5.3 AndroidManifest.xml等xml文件中按'@string/JPUSH_APPKEY '使用
5.4activity代碼中使用方法:'this.getString(R.string.resource_name);'或者'this.getString(R.string.resource_name);'
5.5在其他java文件使用方法(必須有Context或pplication):'context.getString(R.string.resource_name);'或'application.getString(R.string.resource_name);'
其它建議:
1. 其它任何文件包括java也可以用這樣的優先級,達到不同包打出不同邏輯的效果。
2. Logo,configs.xml內的參數也可以在manifestPlaceholders各自定義達到不同flavor不同效果,但無法產生'icbc ','icbcRelease','icbcDebug','release ','debug'這樣的多種組合各不相同的效果。同時java代碼中取manifestPlaceholders中的值比取configs.xml的值麻煩。所以推薦各自建立不同文件夾,以后如果要刪除一個銀行的配置也容易。
總結
到此這篇關于Android Studio中一套代碼多渠道打包的文章就介紹到這了,更多相關Android Studio多渠道打包內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!
相關文章:
1. ThinkPHP5 通過ajax插入圖片并實時顯示(完整代碼)2. ASP.NET MVC通過勾選checkbox更改select的內容3. Android實現圖片自動切換功能(實例代碼詳解)4. jsp+mysql實現網頁的分頁查詢5. Python使用oslo.vmware管理ESXI虛擬機的示例參考6. 存儲于xml中需要的HTML轉義代碼7. javascript xml xsl取值及數據修改第1/2頁8. 解決Python paramiko 模塊遠程執行ssh 命令 nohup 不生效的問題9. JavaScript Tab菜單實現過程解析10. 使用AJAX(包含正則表達式)驗證用戶登錄的步驟
