我在一個文件夾中有十個Android項目。對於每個項目,我可以使用ant debug
來構建它。因此編寫一個簡單的腳本來編譯所有這些項目是沒有問題的。我使用哈德森每天建立這些項目,並且它工作正常。Android自動化發佈版本
但是現在我們的項目需要進入發佈階段。所以編譯命令變成ant release
。爲編譯發佈項目,我必須在編譯期間每次輸入證書的密碼。所以我不能做發佈的自動化。
這個編譯工作殺了我,因爲我有10個項目都需要與輸入密碼進行交互。
如何讓發佈版本仍然是自動的?
我在一個文件夾中有十個Android項目。對於每個項目,我可以使用ant debug
來構建它。因此編寫一個簡單的腳本來編譯所有這些項目是沒有問題的。我使用哈德森每天建立這些項目,並且它工作正常。Android自動化發佈版本
但是現在我們的項目需要進入發佈階段。所以編譯命令變成ant release
。爲編譯發佈項目,我必須在編譯期間每次輸入證書的密碼。所以我不能做發佈的自動化。
這個編譯工作殺了我,因爲我有10個項目都需要與輸入密碼進行交互。
如何讓發佈版本仍然是自動的?
假設您使用的是最新的Android工具,比如v9或v10。
如果您在Android SDK目錄看tools/ant/main_rules.xml
:
<!-- called through target 'release'. Only executed if the keystore and
key alias are known but not their password. -->
<target name="-release-prompt-for-password" if="has.keystore" unless="has.password">
<!-- Gets passwords -->
<input
message="Please enter keystore password (store:${key.store}):"
addproperty="key.store.password" />
<input
message="Please enter password for alias '${key.alias}':"
addproperty="key.alias.password" />
</target>
<!-- called through target 'release'. Only executed if there's no
keystore/key alias set -->
<target name="-release-nosign" unless="has.keystore">
<echo>No key.store and key.alias properties found in build.properties.</echo>
<echo>Please sign ${out.unsigned.file} manually</echo>
<echo>and run zipalign from the Android SDK tools.</echo>
</target>
搜索在XML文件中has.keystore
顯示:
<!-- properties for signing in release mode -->
<condition property="has.keystore">
<and>
<isset property="key.store" />
<length string="${key.store}" when="greater" length="0" />
<isset property="key.alias" />
</and>
</condition>
<condition property="has.password">
<and>
<isset property="has.keystore" />
<isset property="key.store.password" />
<isset property="key.alias.password" />
</and>
</condition>
所以我假設你有四個定義傳遞給build.xml:key.store
,key.alias
,key.store.password
, key.alias.password
。
爲了安全起見,切記不要在命令行上傳遞這些定義。 :)
只是一個說明......我不想在道具文件中設置密碼,默認情況下,您的密碼將在命令行上回顯,這也是一個問題。將SecureInputHandler的使用添加到您的main_rules.xml中,以便在命令行上不公開您的密碼。
<target name="-release-prompt-for-password" if="has.keystore" unless="has.password">
<!-- Gets passwords -->
<input
message="Please enter keystore password (store:${key.store}):"
addproperty="key.store.password" >
<handler classname="org.apache.tools.ant.input.SecureInputHandler" />
</input>
<input
message="Please enter password for alias '${key.alias}':"
addproperty="key.alias.password" >
<handler classname="org.apache.tools.ant.input.SecureInputHandler" />
</input>
</target>
看看this的文章,特別是當它開始提key.store.password
。我用它沒有麻煩。
基本上你應該在你的(構建)機器上創建一些本地的secure.properties
文件,它必須保持相對安全,例如,每個人都無法訪問或者沒有存儲在源代碼管理中的每個人。該文件將密碼存儲爲具有正確名稱的屬性,並將其導入項目ANT構建文件中。
您可以在項目文件夾的project.properties中定義您的密鑰庫配置。 就這樣
key.store = /路徑/到/你/密鑰庫
key.alias = yourkeyalias
key.store.password = yourkeystorepassword
key.alias。密碼= yourkeyaliaspassword
我可以問你一些關於你的答案的東西,只有當我有密鑰時,它才適用於我,但是我怎樣才能自動生成它。 – Reham 2013-03-19 06:49:10
您可以使用'$ keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000'來生成密鑰庫。細節是[here](http://developer.android.com/tools/publishing/app-signing.html) – lishali 2013-03-22 05:29:20
爲基礎的搖籃建立
1)創建secure.properties
文件包含你的密碼:
key.store.password=<your keystore password>
key.alias.password=<your alias password>
你可能不希望它的版本控制之下,這就是爲什麼我們把密碼放在一個單獨的*.properties
文件中。如果你不介意讓你的密碼在版本控制下,你可以直接輸入你的密碼到build.gradle
,但這不是建議的,所以我沒有直接顯示。
2)設置你的build.gradle
如下:
Properties secureProperties = new Properties()
secureProperties.load(new FileInputStream("secure.properties"))
android {
signingConfigs {
release {
storeFile file("<path to your keystore>")
storePassword secureProperties['key.store.password']
keyAlias "<alias name>"
keyPassword secureProperties['key.alias.password']
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
}
就是這樣。 ./gradlew assembleRelease
現在構建並簽署我的APK,而不會提示輸入我的密碼。
基於Ant構建
1)創建secure.properties
文件包含你的密碼:
key.store.password=<your keystore password>
key.alias.password=<your alias password>
你可能不希望它的版本控制之下,這就是爲什麼我們」不要將密碼放入現有的*.properties
文件之一中。如果您不介意在版本控制下使用您的密碼,請將這兩行寫入ant.properties
即可。
2)創建一個custom_rules.xml
文件以告知構建系統有關您的secure.properties
文件。
<?xml version="1.0" encoding="UTF-8"?>
<project name="custom_rules" default="help">
<property file="secure.properties" />
</project>
我不熟悉這個構建系統,所以我不知道的project
元素的name
或default
性質,但我相信我的選擇應該爲大家工作。
圖2b)任何近期的Android SDK工具版本應該是好走,但如果由於某種原因,您build.xml
文件不包含以下內容,你應該添加:
<import file="custom_rules.xml" optional="true" />
而且應該是這樣。 ant release
現在構建並簽署我的APK,而不會提示輸入我的密碼。
你在哪裏創建custom_rules.xml?這是否被檢入您的版本控制? – brianestey 2013-05-14 03:15:52
@brianestey'custom_rules.xml'位於項目的根目錄下,與'build.xml'一起。我將它檢入版本控制。 – 2013-05-14 03:28:27
感謝您的快速回復!我得到了它的工作。 =) – brianestey 2013-05-14 03:41:07
這是一個自動輸入密碼的教程:http://helpmeco.de/2012/2/compiling-and-signing-android-release-apk-from-the-command-line。 – browep 2012-02-29 23:00:23