1. 程式人生 > >windows下eclipse中,涉及原始碼編譯的apk開發——使用系統簽名機制

windows下eclipse中,涉及原始碼編譯的apk開發——使用系統簽名機制

我認為學習需要靠交流,我把我的一點心血發上來,希望可以促進大家交流
剛學android一個月,由於是在windows xp上開發的,也不會makefile,ndk還沒仔細研究,或許對一些初學者有用。

一、Android Apk簽名
Apk簽名首先要有一個keystore的簽名用的檔案。
keystore是由jdk自帶的工具keytool生成的。
具體生成方式參考:
開始->執行->cmd->cd到你安裝的jdk的目錄裡,我的是C:/Program Files/Java/jdk1.6.0_10/bin
然後輸入:
keytool -genkey -alias asaiAndroid.keystore -keyalg RSA -validity 20000 -keystore asaiAndroid.keystore
-alias 後面跟的是別名這裡是 asaiAndroid.store
-keyalg 是加密方式這裡是RSA
-validity 是有效期 這裡是20000
-keystore 就是要生成的keystore的名稱 這裡是asiAndroid.keystore
然後按回車鍵
按回車後首先會提示你輸入的密碼:這個在簽名時要用的,要記住
然後會再確認你的密碼。
之後會依次叫你輸入姓名、組織單位、組織名稱、城市區域、省份名稱、國家程式碼(CN)等。

開始簽名。
在 C:/Program Files/Java/jdk1.6.0_10/bin 還提供一個工具 jarsigner.exe
執行命令給APK簽名:
jarsigner -verbose -keystore asaiAndroid.keystore -signedjar Lotteryonline_signed.apk LotteryOnline.apk asaiAndroid.keystore
-keystore: keystore的名稱
LotteryOnline_signed.apk: 簽名後的APK
LotteryOnline.apk: 簽名前的APK
然後按回車:會要求輸入剛才設定的密碼,輸入後按回車就開始簽名了。


二、eclipse原始碼編譯,無需用make來編譯(android原始碼目錄<D:/myandroid_mx27>):
1、首先,AndroidManifest.xml中manifest節點中加入android:sharedUserId="android.uid.system"這個屬性

2、用eclipse編譯出apk(ClockSetting.apk)檔案,但這個檔案不能用,刪掉META-INF目錄下的CERT.SF和CERT.RSA兩個檔案

3、使用當前android系統(android系統可能不同)的platform金鑰來重新給apk檔案簽名(可能還未用使用者米要簽名)。
首先,找到金鑰檔案,在我的Android原始碼目錄中的位置是"build/target/product/security",下面的platform.pk8和platform.x509.pem兩個檔案。
然後,用Android提供的SignApk工具來簽名,signapk的原始碼是在"build/tools/signapk"下,這時得為下面的編譯工作做些準備:
<1>、編譯jar
命令列cd到signapk.java程式碼目錄下,
javac signapk.java
獲取SignApk$SignatureOutputStream.class和SignApk.class

建立目錄s/com/android/signapk,將兩個class檔案放入目錄下
jar cvfm signapk.jar SignApk.mf -C s/ .
注意:"s/"後面的"."前面有空格
生成signapk.jar檔案,得到了Android提供的簽名程式signapk.jar
<2>、用目標系統的platform金鑰簽名
將platform.pk8和platform.x509.pem檔案複製到"D:/myandroid_mx27/build/tools/signapk"目錄下,即signapk.jar和SignApk.mf所在的目錄。
java -jar signapk.jar platform.x509.pem platform.pk8 D:/ClockSetting.apk D:/ClockSettingSigned.apk
我的未簽名(ClockSetting.apk)和已簽名(ClockSettingSigned.apk)apk檔案都放在D盤,這樣就得到了用Android原始碼編譯的檔案。

<3>、開啟真機,安裝:
adb connect IP:Port (IP為真機IP地址,Port為埠)
adb install D:/ClockSettingSigned.apk

android tools:

1. android apk tool
一款用於重建apk的工具。可以解壓各種apk包,檢視完整的資源等,目前不支援檢視原始碼。

網址:http://code.google.com/p/android-apktool/


2. unyaffs
可以解壓yaffs格式的img檔案。

網址:http://code.google.com/p/unyaffs/


3. unyaffs2
可以解壓yaffs2格式的img檔案。

網址:http://code.google.com/p/unyaffs2/


4. traceview
android自帶的工具,可以檢視各個函式佔用的執行時間。具體用法參照document。


5. layoutopt
android自帶的工具,經常被忽略的工具,為layout檔案下的xml檔案給出優化建議。


6. app inventor
google開發的線上android開發工具,非常初級,比較像是PLC的開發方式。

網址:http://appinventor.googlelabs.com/about/



常用工具:


1. java decompiler
java的常用工具,可以檢視原始檔。可以用於android 1.6時代之前的apk。對於一款優秀的軟體來說,它必然經歷了android1.5到2.3這個過程,所以可以找一找之前的版本來學習下賞心悅目的程式碼是如何編寫的。

網址:http://java.decompiler.free.fr/


2. UE
一跨歷史悠久的文字編輯軟體,防止在windows上編輯檔案時,錯誤的將檔案儲存成dos格式。

網址:http://www.ultraedit.com/


3. Beyond compare
一個優秀的檔案比較工具,可以比較各種檔案,不足之處在於merge程式碼時缺陷比較大。

網址:http://www.scootersoftware.com/