歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 如何用Android Studio打多包名APK

如何用Android Studio打多包名APK

日期:2017/3/1 9:28:11   编辑:Linux編程

問題:項目中不同的分發渠道可能需要打包多種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 的原因。

最後一個提示: 打包出來後,發布前最好要全面測試下,以免出現問題。

Ubuntu 12.04(64位)安裝Android Studio 全過程 http://www.linuxidc.com/Linux/2013-05/84812.htm

Android Studio v0.1嘗鮮 http://www.linuxidc.com/Linux/2013-05/84681.htm

Android Studio使用教程 http://www.linuxidc.com/Linux/2013-05/84579.htm

Android Studio開發指南 http://www.linuxidc.com/Linux/2013-05/84543.htm

Android Studio設置主題 和 不支持中文的問題解決方法 http://www.linuxidc.com/Linux/2013-05/84488.htm

Android Studio 下載安裝以及不能打開的解決辦法 http://www.linuxidc.com/Linux/2013-05/84409.htm

Android Studio安裝使用圖文教程 http://www.linuxidc.com/Linux/2014-09/106914.htm

Android Studio 的詳細介紹:請點這裡
Android Studio 的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved