- 首先我們先來說說包名(一般是http://com.company.xxx的形式),包名這個概念是出現在Android生態系統裏面的,對於Android系統來說,包名是App的唯一標識。這個對技術人員來說很好理解,對於非技術人員,稍微再囉嗦一下: 如果兩個安卓App,A和B包名一樣的話,如果先安裝A,再安裝B,那麼會出現B覆蓋A的情況,最終只會是B會安裝在系統上,即使這是兩個完全不同的App。其實在安卓設備上一個App的升級過程就是包名相同,覆蓋安裝的例子。
- 接着我們來聊聊多包名的需求,對於一些遊戲App來說,如果他們要和市場渠道(諸如91,安智、豌豆莢,360等)做聯運的話,那麼就必須得使用不同的包名來做區分了,這個其實也是渠道強制要求的,因爲這要涉及到最終的流量推廣、下載結算等。感興趣的讀者可以看一下我之前回答過的一個問題: 爲什麼有的安卓App在不同市場渠道發版的時候使用不同的包名呢? - 沙漠的回答, 解釋的比較詳細。這種場景佔絕大多數,所以我們網站的用戶引導語也說得是“若一個APP針對不同渠道有不同的包名,則可通過開通多包名支持一個appkey對應多個包名發送消息”。
- 最後,再補充一種小衆的需求,這種場景不是太常見,但是和我們在下文提出的友盟推送提供“多包名”關係比較大,所以還是提一下。有些App是系列App,比如小說類的,或者明星類App。開發者在開發這些App的時候其實是有一個代碼模板的,大部分時候只需要改改App的Icon,Name等就可以生成一個新的App,但是既然是不同的App,那麼包名部分還是要去變換一下的(包名是安卓系統上對App的唯一標識)。這種場景大多出現在一些外包類的公司裏面。
productFlavors {
a{
versionCode 100
versionName "1.0.0"
//無需變更信息
applicationId "com.test.a"
manifestPlaceholders = [
app_lable: "@string/app_name",
app_logo: "@drawable/logo",
welcome_splash: "@style/AppSplash",
key_weixin: "",
key_amap: "",
umeng_app_key: "a項目對應友盟的key",
umeng_message_secret: "a項目對應友盟推送的key",
]
}
b{
versionCode 100
versionName "1.0.0"
//無需變更信息
applicationId "com.test.a.b"
manifestPlaceholders = [
app_lable: "@string/app_name_insurance",
app_logo: "@drawable/logo_insurance",
welcome_splash: "@style/AppSplashInsurance",
key_weixin: "",
key_amap: "",
umeng_app_key: "b項目對應友盟的key",
umeng_message_secret: "b項目對應的友盟推送的key",
]
}
}
3.2.5 配置build.gralde
- 在Application Module的build.gradle文件的
dependencies
下添加compile project(':PushSDK')
。 - 請確保Application Module的build.gradle文件中的
applicationId
與應用包名package
一致。
裏面也有人問相同的問題。友盟解釋爲:
mPushAgent.setResourcePackageName("com.test.a");