1. 程式人生 > >Android學習探索之App多渠道打包及動態添加修改資源屬性

Android學習探索之App多渠道打包及動態添加修改資源屬性

Android App

前言:

關於Android渠道打包是一個比較老的話題,今天主要記錄總結一下多渠道打包以及如果動態配置修改一些資源屬性。今天以公司實際需求為例進行演示,由於項目復用很多公共的業務組件,而且業務組件之間的跳轉采用Scheme協議,每個業務組件的host地址不變,所以需要在打包的時候動態修改scheme協議名字。為了方便舉例,首先我們這裏假設我們一個App要打出兩個不同的渠道,方便進行數據統計。

第一步聲明一個渠道參數 AndroidManifest.xml中

<meta-data android:name="APP_CHANNEL"
android:value="external" />

為了方便通過gradle自動替換,value需要替換成標記位的方式

 <meta-data android:name="APP_CHANNEL" android:value="${APP_CHANNEL}" />

第二步在gradle中利用productFlavors聲明渠道類型,

比如我們這裏聲明一個外部版本一個內部版本,manifestPlaceholders 替換AndroidManifest中的${APP_CHANNEL}值

復制代碼
 productFlavors {
        external {
            manifestPlaceholders = [APP_CHANNEL: "external"]
        }
        internal {
            manifestPlaceholders = [APP_CHANNEL: "internal"]
        }
    }
復制代碼

上面的也可以修改成批量處理方式。整形http://www.bj-swjtu.com/

復制代碼
 productFlavors {
        external {}
        internal {}
        productFlavors.all { flavor ->
            flavor.manifestPlaceholders = [APP_CHANNEL: name]
        }
    }
復制代碼

第三步重新build項目會生成build選項,如下圖所示:

打包的話可以通過在android studio底欄中有個命令行工具Terminal,例如打包所有渠道可以執行下面的命令

gradlew assembleRelease

如果要打指定渠道的話,可以執行下面的命令,例如要打external外部版本

gradle assembleExternalRelease

也可以通過gradle projects裏面生成的命令選項進行打包,生成的選項如圖所示:

第四步修改生成渠道包文件名

復制代碼
buildTypes {
        release {
            //混淆
            minifyEnabled false
            //是否壓縮對齊
            zipAlignEnabled true
            //清除不用的資源
            shrinkResources false
            //混淆腳本路徑
            proguardFiles getDefaultProguardFile(’proguard-android.txt’), ’proguard-project.txt’
            signingConfig signingConfigs.releaseConfig
            //自定義apk名字
            applicationVariants.all { variant ->
                variant.outputs.each { output ->
                    output.outputFile = new File(
                            output.outputFile.parent,
                            "${applicationId}-${variant.productFlavors[0].name}-${versionName}-${releaseTime()}.apk".toLowerCase())
                }
            }
        }
        debug {
            //debug時候也采用正式簽名文件
            signingConfig signingConfigs.releaseConfig
        }
    }
}
復制代碼

第五步定制app scheme地址

根據上面的渠道替換原理,只需添加一個scheme標記即可

復制代碼
<activity android:name=".GoodsDetailActivity" android:theme="@style/AppTheme"> <!--要想在別的App上能成功調起App,必須添加intent過濾器--> <intent-filter> <!--協議部分,隨便設置--> <data android:host="goods" android:path="/goodsDetail" android:port="8888" android:scheme="${myScheme}"/> <!--下面這幾行也必須得設置--> <category android:name="android.intent.category.DEFAULT"/> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.BROWSABLE"/> </intent-filter> </activity>
復制代碼

在gradle中添加替換

 manifestPlaceholders = [
                myScheme: "XApp",
        ]

替換指定屬性,比如顏色值,使用如下代碼

  resValue  "color", "app_theme_color", "#283146"

總結:

根據多渠道打包的原理來實現定制特定需要的app包。

幹我們這行,啥時候懈怠,就意味著長進的停止,長進的停止就意味著被淘汰,只能往前沖,直到鳳凰涅槃的一天!

Android學習探索之App多渠道打包及動態添加修改資源屬性