標籤:pre 自己 android lld log oid blog 程式 build.xml
在開發android程式的過程中,我們使用ant debug
和ant installd
這兩個命令就夠了,不涉及到APK的簽名。
但是在正式發布我們的Android程式時,需要對APK簽名。ant release
產生一個release版程式。
ant release
在package這一步會產生一個未簽名的apk:xxx-release-unsigned.apk
。然後試圖用ant.properties
裡面給出的keystore檔案對這個apk簽名,產生xxx-release.apk
。如果ant.properties
沒有給出keystore,不會產生簽名的apk。這時你運行ant installr
就會失敗,因為ant找不到xxx-release.apk
。
解決方案有兩種:(1)在ant.properties檔案中設定key.store和key.alias,然後重新運行ant release
和ant installr
命令。(2)自己用命令對xxx-release-unsigned.apk
簽名和zipalign,產生xxx-release.apk
,然後再運行ant installr
。
不管用哪種方法,我們都要先準備好keystore檔案。JDK提供了keytool程式,可以產生key.store檔案。
keytool.exe -genkey -alias jollywing.android.keystore -keyalg RSA -validity 36500 -keystore android.keystore
- -genkey 表示要進行的動作是產生keystore.
- -alias 是這個keystore的別名。
- -keyalg 表示產生金鑰組的演算法。
- -validity 表示有效期間,這裡36500接近100年。
- -keystore 指定最終產生的keystore檔案名稱。
運行命令,會提示輸入密鑰庫口令。這個口令在給apk簽名時還會問到。
然後會詢問一些資訊,你的姓名、你的組織、你所在的地區等。
最後還會詢問key.alias的密鑰口令,直接斷行符號,表示使用和密鑰庫相同的口令。
命令運行成功,還會得到一個警告資訊:
JKS 密鑰庫使用專用格式。建議使用 "keytool -importkeystore -srckeystore android.keystore -destkeystore android.keystore -deststoretype pkcs12" 遷移到行業標準格式 PKCS12。
我們可以運行警告資訊中的命令,把密鑰庫轉換成標準格式。這一步可選。
然後我們可以簽名了。兩種方式,一種是用ant release命令簽名,另一種是手動簽名。
如果用ant release命令簽名,我們把android.keystore放在工程根目錄下,即和build.xml和ant.properties相同的目錄。然後編輯ant.properties,增加以下內容。
key.store=android.keystorekey.alias=jollywing.android.keystorekey.store.password=<剛才設定的密鑰庫口令>key.alias.password=<剛才設定的密鑰庫別名口令>
如果android.keysotre沒放在工程根目錄下,最好使用絕對路徑指明keystore檔案放在哪裡。
然後ant release
和ant installr
就OK了。
最後再講一下自己用命令對xxx-release-unsigned.apk
進行簽名。
使用jdk中的jarsigner命令(apk就是一個jar包檔案)。
jarsigner -keystore <keystore檔案的路徑> <xxx-release-unsigned.apk的路徑> 密鑰庫別名
命令運行後,xxx-release-unsigned.apk就是已經簽名的了。
zipalign -v 4 <xxx-release-unsigned.apk的路徑> <要產生的xxx-release.apk的路徑>
zipalign
命令放在android sdk的build-tools目錄下。
好了,一個發行就緒的apk新鮮出爐了,adb install <xxx-release.apk的路徑>
試試看吧。如果xxx-release.apk放在工程的bin目錄下,也可以直接運行ant installr
。
2017-11-25 周六
用命令列發布android程式