[英]Using Android Studio how do I get a signed, non-debug and zip aligned APK?
使用Android Studio如何獲得已簽名,非調試和zip對齊的APK?
到目前為止,我可以得到一個簽名但它被拒絕,因為它已經調試。
我可以得到一個非調試版本的apk但它被拒絕,因為它不是拉鏈對齊。
我可以拉鏈對齊但是我無法上傳它,因為那個沒有簽名。
編輯:我應該提到我在Windows上。 我所看到的大部分內容都是基於Linux的,很難將linux路徑與配置路徑分開。
編輯2:目前情況暫停。 我更新了Android Studio並殺死了所有內容,因為它帶有gradle 1.9 dependancies,但沒有正確安裝gradle 1.9。 所以我想我會用gradle 1.9下載完整的安裝程序,但是下載鏈接給了我開始的版本。 我知道。 我應該知道更新比更新,但考慮到我認為它可能實際上包含修復的問題。
編輯3:問題解決了。 我有一個完整的答案打印准備發布但是我不會讓我發布到明天。
所有構建都是簽名的,甚至是調試版(使用調試密鑰簽名)。 只需將其設置為使用正確的密鑰簽署發布版本即可。 您可以通過“項目結構”對話框設置簽名配置,也可以按照“ Gradle插件用戶指南”中的說明手動編輯build.gradle
文件。
設置構建文件后,您可以使用命令從命令行生成發布APK
./gradlew assembleRelease
在Linux或Mac或Windows上:
gradlew.bat assembleRelease
或者在GUI中,您可以通過從Build Variants視圖中選擇它來生成發布版本:
構建APK,並使用向導對其進行簽名。
我已經解決了問題第1部分:k3v1n4ud3的鏈接確實有助於合並信息。 謝謝你。 這是我在項目文件夾下的整個build.gradle:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.6.+'
}
}
apply plugin: 'android'
repositories {
mavenCentral()
}
android {
compileSdkVersion 19
buildToolsVersion "19.0.0"
signingConfigs {
debug {
storeFile file("debug.keystore")
}
release {
storeFile file("D:\\AndroidStudioProjects\\KeyStore\\Keystore_password1.jks")
storePassword "password"
keyAlias "MyAppName"
keyPassword "password"
}
}
productFlavors {
free {
packageName "com.mypackage.myappname"
}
paid {
packageName "com.mypackage.myappname"
}
}
buildTypes {
debug {
signingConfig signingConfigs.release
}
release {
signingConfig signingConfigs.release
debuggable false
zipAlign true
}
/*
alpha {
packageNameSuffix ".alpha"
}
beta {
packageNameSuffix ".beta"
}*/
}
defaultConfig {
minSdkVersion 7
targetSdkVersion 19
}
}
android.applicationVariants.all { variant ->
if (variant.buildType.name == "release") {
switch (variant.name) {
case "FreeRelease":
variant.mergeResources.doFirst {
android.sourceSets.debug.setRoot("src/free")
}
break;
case "PaidDebug":
variant.mergeResources.doFirst {
android.sourceSets.debug.setRoot("src/paid")
}
break;
}
}
else if (variant.buildType.name == "debug") {
switch (variant.name) {
case "FreeDebug":
variant.mergeResources.doFirst {
android.sourceSets.debug.setRoot("src/debug/free")
}
break;
case "PaidDebug":
variant.mergeResources.doFirst {
android.sourceSets.debug.setRoot("src/debug/paid")
}
break;
}
}
}
dependencies {
compile 'com.android.support:appcompat-v7:+'
}
第2部分:我使用了最初使用Build-> Generate Signed APK ...向導時創建的密鑰庫。 注意使用的keyalias。 經過半天的撞擊我的頭撞牆,我忘記了我輸入的內容:-)
第3部分:這個線程幫助我設置源文件夾並理解風格。 gradle構建變體的文件夾命名約定
第4部分:只有一個AndroidManifest.xml我無法在包名上使用后綴。 使用后綴時,上傳到設備時會被拒絕。 當build.gradle的每個例子都包含后綴時,這就成了一個問題。
第5部分:使用View-> Tool Windows-> BuildVariants來調出構建變體。 第二列實際上是一個下拉列表。 選擇你想要在這里構建的內容,否則它將繼續構建調試版本。 (為什么它不在構建菜單下或運行/調試配置是一個謎?)
第6部分:未來......我必須嘗試解決這些問題以及如何設置它們,因為我最終希望在相同的代碼庫中部署免費和付費版本。 我將開始使用自己的密鑰簽署調試版本。
可以使用任何現有的Android Studio gradle項目,並從命令行構建/簽名,而無需編輯任何文件。 這使得將項目存儲在版本控制中同時保持密鑰和密碼分離而不是build.gradle文件非常好:
./gradlew assembleRelease -Pandroid.injected.signing.store.file=$KEYFILE -Pandroid.injected.signing.store.password=$STORE_PASSWORD -Pandroid.injected.signing.key.alias=$KEY_ALIAS -Pandroid.injected.signing.key.password=$KEY_PASSWORD
如果您使用的是不同的gradle構建版本而不是您開發密鑰庫文件,那么它可能會影響。
我也在我的項目中遇到了這個問題,我做了以下更改:
設置classpath
來自classpath'com.android.tools.build:grad:2.2.0-alpha3'
至
classpath'com.android.tools.build:grad:2.1.2'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.