多包名打包以及集成“極光推送”的坑點(區(qū)別于“多渠道打包”)

最近經(jīng)??吹焦就路窒硪恍┪恼拢既豢吹揭黄v運營的文章,大概說運營和技術(shù)是分不開的 balabala。

放幾張圖片,看下效果,直觀方便。

這三個app,安裝到同一臺機器上的是同一套代碼,你敢信?一般的分渠道打包,是同一套代碼,但是app也是同一個,只是里面渠道不一樣而已。我這個是app外觀和內(nèi)部全都不一樣。不信你看:

ASO技術(shù),一個能讓產(chǎn)品迅速火起來的東西,典型公司,某馬拉雅聽書(此處不評價,不撕逼,只說技術(shù))。不多說,下面進入技術(shù)分享階段。

先講一下“多渠道打包”和“多包名”打包的不同。

1.多渠道打包,一般用在app在各大應(yīng)用市場分發(fā)統(tǒng)計。比如,360應(yīng)用平臺、應(yīng)用寶、豌豆莢等。
2.多包名打包,這個詞是我自己想出來的,實際上算是ASO的一部分,確定的說應(yīng)該是多id打包,就是一套app的代碼打包成很多app這里就不糾結(jié)了。這個多用于ASO技術(shù),因為網(wǎng)上沒什么教程,所以自己寫一份,以供大家參考。

因為1技術(shù)網(wǎng)上資料很多,所以不再贅述。

講一下2,先說原理:主要是根據(jù)applicationId的不同來實現(xiàn)的,因為各大應(yīng)用平臺都是根據(jù)applicationId來區(qū)分app的異同。

下面我們用productFlavors來實現(xiàn)“多包名打包”。

代碼如下:

productFlavors {
        yunweikang {
            // 每個環(huán)境包名不同
            applicationId "com.bill.first.yunweikang"
            // 動態(tài)添加 string.xml 字段;
            // 注意,這里是添加,在 string.xml 不能有這個字段,會重名?。。?            resValue "string", "app_name", "云衛(wèi)康"
//            // 動態(tài)修改 常量 字段
            buildConfigField "String", "ENVIRONMENT", '"我的名字叫云衛(wèi)康"'
            // 修改 AndroidManifest.xml 里渠道變量
            manifestPlaceholders = [CHANNEL_VALUE: "yunweikang",
                                    JPUSH_CHANNEL: "yunweikang",
                                    app_icon     : "@mipmap/ic_yunweikang",
                                    appkey       : "4e3a7bbd9f3da0f9064e6580"]
        }
        liulvguangyin {
            applicationId "com.bill.second.liulvguangyin"
            // 注意,這里是添加,在 string.xml 不能有這個字段,會重名?。。?            resValue "string", "app_name", "六律光音"

            buildConfigField "String", "ENVIRONMENT", '"我的名字叫六律光音"'
            manifestPlaceholders = [CHANNEL_VALUE: "liulvguangyin",
                                    JPUSH_CHANNEL: "liulvguangyin",
                                    app_icon     : "@mipmap/ic_liulvguangyin",
                                    appkey       : "91022ae3a6df48ea523c70f8"]
        }
        jin {
            applicationId "com.bill.third.jin"
            // 注意,這里是添加,在 string.xml 不能有這個字段,會重名?。。?            resValue "string", "app_name", "金"

            buildConfigField "String", "ENVIRONMENT", '"我的名字叫金"'

            manifestPlaceholders = [CHANNEL_VALUE: "jinmaike",
                                    JPUSH_CHANNEL: "jinmaike"
                                    , app_icon   : "@mipmap/ic_jin",
                                    appkey       : "1c0c49844d4d2900cb7fd30b"]
        }

簡單對上面的代碼做一個解釋:
"yunweikang"這個算是定義了一個產(chǎn)品(在本文重點講的“多包名打包”中)。

"applicationId"這個是文章開頭講的原理中的重點,一個applicationId對應(yīng)了應(yīng)用市場中的一個產(chǎn)品,即便是同一套代碼,只要applicationId不同,那就有幾個applicationId就是幾個產(chǎn)品。

resValue "string", "app_name", "云衛(wèi)康"這個是動態(tài)生成strings.xml中的文件

buildConfigField "String", "ENVIRONMENT", '"我的名字叫云衛(wèi)康"'這個是動態(tài)生成BuildConfig中的一個變量,一般情況下使用BuildConfig都是判斷是否是Debug模式,例如BuildConfig.DEBUG。

**manifestPlaceholders **中定義的內(nèi)容,是方便在AndroidManifest.xml中引用,如下代碼:

 <application
        android:name=".app.PackApplication"
        android:allowBackup="true"
        android:icon="${app_icon}"
        android:label="@string/app_name"
        android:roundIcon="${app_icon}"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

其中引用方式為${}

注意:別忘記在根節(jié)點引用下面一句話

xmlns:tools="http://schemas.android.com/tools"

下面再講一下*多包名打包引入極光推送的時候,文檔上的一些坑

1.起包名的時候,明明是“applicationId”嘛,tell me why
![
]
](http://upload-images.jianshu.io/upload_images/3866750-4c56e70cb4d8e82b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

2.注冊的時候,有些是真正的包名,有些是applicationId,極光推送團隊把他們統(tǒng)稱為“包名”

![Uploading QQ截圖20171028105410_986493.png . . .]

總結(jié)一下:

雖然極光團隊做的文檔有瑕疵,不過也是情有可原,有谷歌的部分原因,畢竟剛開始的時候Eclipse上對于applicationId和packageName是沒區(qū)別的,兩者相同,到了AS上面才有了區(qū)分。不過還是希望極光團隊能把文檔修改一下,做到盡善盡美。此處應(yīng)該艾特“極光推送團隊”

本文講的主要講了:
1.Android中區(qū)別應(yīng)用的東西是:applicationId。
2.gradle的應(yīng)用。
3.極光在多包名打包的時候,文檔上的一些紕漏

其實講完發(fā)現(xiàn)并不是啥黑科技,只不過作為一個開發(fā)來說,總要懂一些運營的東西辣,萬一以后轉(zhuǎn)管理層呢,做人要有夢想,萬一實現(xiàn)了呢!

最后附上我寫的demo地址,喜歡的可以關(guān)注一波。
https://github.com/billllll1llllll/PackagePro

本文源地址:http://www.lxweimin.com/p/db8b0eb8827a

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容