apkandroidstudio
⑴ 請教如何使用android studio同時打包多個apk
問題:項目中不同的分發渠道可能需要打包多種APK(同樣的代碼),包名可能是不一樣的,如果一個一個修改包名重新編apk是很麻煩,可以參考下列步驟在Android Studio上操縱Gradle來打包不同包名的apk。
這里例子的目標是,同樣的代碼,打包成com.example.android.newsreader和com.example.android.newsreaderdev兩個不同包名的apk
1. 首先在build.gradle的android節點中加入下列代碼
proctFlavors{
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"
}
}
這個proctFlavors的功能即為打包的參數化而提供的,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 mp 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
1、生成你自己的jks文件
將下載好的keytool-importkeypair配置一下,其實主要就是配置一下環境變數,不熟悉的可以閱讀官方文檔,然後使用下面這條命令(需要在linux下,用windows的可以去在linux下生成jks,然後復制出新的jks回原目錄也可以)對jks文件引入系統簽名
./keytool-importkeypair -k [jks文件名] -p [jks的密碼] -pk8 platform.pk8 -cert platform.x509.pem -alias [jks的別名]
例如我的對應的就是:./keytool-importkeypair -k SignDemo.jks -p 123456 -pk8 platform.pk8 -cert platform.x509.pem -alias SignDemo
運行完這條命令之後,我們就得到了有系統簽名的jks
3、配置gradle(app)
在在android區域下(與defaultConfig同級)添加signingConfigs配置:
依次填寫jks的路徑,密碼,別名等
詳情介紹
⑶ android studio怎樣生成apk文件
1、連接上手機或者模擬器,運行一下你的程序
⑷ Android Studio 生成正式簽名apk(app-release.apk)的兩種方式
方式一:使用Android Studio生成
1.點擊Build->Generate,首次點擊可能會提示輸入操作系統密碼
2.彈出如下對話框,因為我們還沒有生成過keystore ,所以點擊Create new,新建keystore
3.填寫相關內容
Key store path 是 keystore的存放路徑
Alias 是別名,填寫APP名稱即可,別的名稱你記得住的也行
validity 是有效期限。
兩種密碼結合上一幅圖看
填寫完成後點擊ok
(記得備份,因為以後這個apk的新版本都是用這個keystore了)
4.彈出此窗口,自動填充好了這密碼和別名,Next
如果點擊了Remember passwords 可能需要輸入操作系統密碼。
5.填寫路徑,選擇簽名版本,點擊Finish
V2是Android 7.0出現的更安全更快速的簽名方式。
點擊ShowInExplore,或者自己打開路徑,就可以看到app-release.apk了
方式二:使用Gradle 生成
1.編輯 根目錄文件 gradle.properties
添加如下內容:
KEY_PATH=D:/Android/test1.jks
KEY_PASS=12345678
ALIAS_NAME=test
ALIAS_PASS=12345678
2.編輯 app/build.gradle 讀取指定的路徑密碼
在android 閉包中添加signingConfigs閉包:
android {
compileSdkVersion 25
buildToolsVersion "25.0.3"
defaultConfig {
applicationId "com.example.test"
minSdkVersion 16
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
signingConfigs {
config {
storeFile file(KEY_PATH)
storePassword KEY_PASS
keyAlias ALIAS_NAME
keyPassword ALIAS_PASS
}
}
在buildTypes release 閉包中添加 signingConfig signingConfigs.config 應用前面的簽名配置(ps:signingConfigs閉包必須在buildTypes閉包前)
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.config
}
}
3.點擊右側工具欄的Gradle->項目名->:app->Tasks->build
assemble 用於生成測試版和正式版的apk
assembleDebug 用於生成測試版apk