標籤:android
問題:項目中不同的分發渠道可能需要打包多種APK(同樣的代碼),包名可能是不一樣的,如果一個一個修改包名重新編apk是很麻煩,可以參考下列步驟在Android Studio上操縱Gradle來打包不同包名的apk。
這裡例子的目標是,同樣的代碼,打包成com.example.android.newsreader和com.example.android.newsreaderdev兩個不同包名的apk
1. 首先在build.gradle的android節點中加入下列代碼
productFlavors{ flavors_release{ manifestPlaceholders = [str:"releaseStr",package_name:"com.example.android.newsreader"] applicationId "com.example.android.newsreader" } flavors_dev{ manifestPlaceholders = [str:"devStr",package_name:"com.example.android.newsreaderdev"] applicationId "com.example.android.newsreaderdev" }}這個productFlavors的功能即為打包的參數化而提供的,flavors_release和flavors_dev可以被視作自己定義的兩套變數集,實際操作中可以自訂注意到這裡有一個manifestPlaceholders的參數,裡面提供的實際上是幾個參數變數和值,這裡的參數都可以通過${name}的方式在AndroidManifest.xml中使用。原來是想在AndroidManifest中的manifest的節點將package給參數化來達到打不同包名的apk的目的,即:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="${package_name}" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="11" android:targetSdkVersion="14" />...
結果Android Studio的Lint自動給了我一個提示:
說明Android Studio推薦我採用設定applicationId的方式來將包名參數化 於是乎,我在flavors_release和flavors_dev中又加入了applicationId的設定,即:和
下面看看是否有作用
2.這一步需要操縱Gradle面板
此時我們在Android Studio的右側的gradle面板中點擊 按鈕重新整理下,於是在build子欄目中出現下列東西:
其中以assemble*打頭的都是產生apk的選項,產生的apk在build/outputs/apk中,這裡我們對任一項雙擊即可產生對應的apk
對應flavors_release和flavors_dev的apk應該就是和這兩個,於是分別雙擊他們等待各自產生apk的過程
3. 下面查看Project面板中的內容
開啟project面板,我們發現真的出現了幾個apk:
可以看出來每次雙擊gradle中的一條會產生三個apk,我們把newsreader-flavors_dev-debug.apk和newsreader-flavors_release-debug.apk拿出來,用aapt命令查看下他們的包名(命令為aapt dump badging {filename.apk})
果然,包名是不一樣的。那麼是否可以同時安裝呢,這裡把兩個apk都安裝到模擬器中,果然是可以的:
可以看到出現了兩個NewsReader,其實都是一模一樣的,只是包名不同
4. 如何在打包的時候指定簽名
在Android Studio功能表列進入Build->Generate Signed Apk:
指定你的keystore後點擊next:
這裡會發現在Flavors裡面有兩個項目,即我們在gradle裡面配置上的兩個flavors參數集,各自選上,點擊finish即可產生所需要的apk
5. 有個疑問,為什麼修改applicationId即可修改包名呢?applicationID和packagename到底是什麼關係
實際上, package 代表了 java 代碼中的包名。 applicationId 代表了應用中的唯一標識。和應用簽名一起用來區別和其他應用不同。我想這也就是為什麼 Google 市場能夠允許相同應用不同 applicationId 的原因。 最後一個提示: 打包出來後,發布前最好要全面測試下,以免出現問題
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
如何用Android Studio打多包名APK