在開發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.keystore
key.alias=jollywing.android.keystore
key.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 周六