最近經(jīng)常看到公司同事分享一些文章扬虚,偶然看到一篇講運(yùn)營的文章努隙,大概說運(yùn)營和技術(shù)是分不開的 balabala。
放幾張圖片辜昵,看下效果荸镊,直觀方便。
這三個(gè)app,安裝到同一臺機(jī)器上的是同一套代碼躬存,你敢信张惹?一般的分渠道打包,是同一套代碼岭洲,但是app也是同一個(gè)宛逗,只是里面渠道不一樣而已。我這個(gè)是app外觀和內(nèi)部全都不一樣钦椭。不信你看:
ASO技術(shù)拧额,一個(gè)能讓產(chǎn)品迅速火起來的東西,典型公司彪腔,某馬拉雅聽書(此處不評價(jià)侥锦,不撕逼,只說技術(shù))德挣。不多說恭垦,下面進(jìn)入技術(shù)分享階段。
先講一下“多渠道打包”和“多包名”打包的不同格嗅。
1.多渠道打包番挺,一般用在app在各大應(yīng)用市場分發(fā)統(tǒng)計(jì)。比如屯掖,360應(yīng)用平臺玄柏、應(yīng)用寶、豌豆莢等贴铜。
2.多包名打包粪摘,這個(gè)詞是我自己想出來的,實(shí)際上算是ASO的一部分绍坝,確定的說應(yīng)該是多id打包徘意,就是一套app的代碼打包成很多app這里就不糾結(jié)了。這個(gè)多用于ASO技術(shù)轩褐,因?yàn)榫W(wǎng)上沒什么教程椎咧,所以自己寫一份,以供大家參考把介。
因?yàn)?技術(shù)網(wǎng)上資料很多勤讽,所以不再贅述。
講一下2拗踢,先說原理:主要是根據(jù)applicationId的不同來實(shí)現(xiàn)的脚牍,因?yàn)楦鞔髴?yīng)用平臺都是根據(jù)applicationId來區(qū)分app的異同。
下面我們用productFlavors來實(shí)現(xiàn)“多包名打包”秒拔。
代碼如下:
productFlavors {
yunweikang {
// 每個(gè)環(huán)境包名不同
applicationId "com.bill.first.yunweikang"
// 動態(tài)添加 string.xml 字段莫矗;
// 注意飒硅,這里是添加,在 string.xml 不能有這個(gè)字段作谚,會重名H洹!妹懒!
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 不能有這個(gè)字段眨唬,會重名;崆啊X腋汀瓦宜!
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 不能有這個(gè)字段临庇,會重名!j腔拧假夺!
resValue "string", "app_name", "金"
buildConfigField "String", "ENVIRONMENT", '"我的名字叫金"'
manifestPlaceholders = [CHANNEL_VALUE: "jinmaike",
JPUSH_CHANNEL: "jinmaike"
, app_icon : "@mipmap/ic_jin",
appkey : "1c0c49844d4d2900cb7fd30b"]
}
簡單對上面的代碼做一個(gè)解釋:
"yunweikang"這個(gè)算是定義了一個(gè)產(chǎn)品(在本文重點(diǎn)講的“多包名打包”中)。
"applicationId"這個(gè)是文章開頭講的原理中的重點(diǎn)斋攀,一個(gè)applicationId對應(yīng)了應(yīng)用市場中的一個(gè)產(chǎn)品已卷,即便是同一套代碼,只要applicationId不同淳蔼,那就有幾個(gè)applicationId就是幾個(gè)產(chǎn)品侧蘸。
resValue "string", "app_name", "云衛(wèi)康"這個(gè)是動態(tài)生成strings.xml中的文件
buildConfigField "String", "ENVIRONMENT", '"我的名字叫云衛(wèi)康"'這個(gè)是動態(tài)生成BuildConfig中的一個(gè)變量,一般情況下使用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é)點(diǎn)引用下面一句話
xmlns:tools="http://schemas.android.com/tools"
下面再講一下*多包名打包引入極光推送的時(shí)候,文檔上的一些坑
1.起包名的時(shí)候司草,明明是“applicationId”嘛艰垂,tell me why
![
]
](http://upload-images.jianshu.io/upload_images/3866750-4c56e70cb4d8e82b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
2.注冊的時(shí)候,有些是真正的包名埋虹,有些是applicationId猜憎,極光推送團(tuán)隊(duì)把他們統(tǒng)稱為“包名”。
總結(jié)一下:
雖然極光團(tuán)隊(duì)做的文檔有瑕疵搔课,不過也是情有可原胰柑,有谷歌的部分原因,畢竟剛開始的時(shí)候Eclipse上對于applicationId和packageName是沒區(qū)別的,兩者相同柬讨,到了AS上面才有了區(qū)分崩瓤。不過還是希望極光團(tuán)隊(duì)能把文檔修改一下,做到盡善盡美踩官。此處應(yīng)該艾特“極光推送團(tuán)隊(duì)”
本文講的主要講了:
1.Android中區(qū)別應(yīng)用的東西是:applicationId却桶。
2.gradle的應(yīng)用。
3.極光在多包名打包的時(shí)候蔗牡,文檔上的一些紕漏
其實(shí)講完發(fā)現(xiàn)并不是啥黑科技颖系,只不過作為一個(gè)開發(fā)來說,總要懂一些運(yùn)營的東西辣辩越,萬一以后轉(zhuǎn)管理層呢嘁扼,做人要有夢想,萬一實(shí)現(xiàn)了呢黔攒!
最后附上我寫的demo地址偷拔,喜歡的可以關(guān)注一波。
https://github.com/billllll1llllll/PackagePro