1.生成加密的密鑰文件
要對Android系統進行簽名,需要生成四類密鑰文件。
a)釋放鍵
b)媒體
c)共享
d)平臺
下面以releasekey為例簡單介紹壹下生成過程。
1)進入/android_src/development/tools目錄。
/開發/工具$ ls
apk check etc 1 tool hosttestlib jdwpspy makedict mkstubs
axl find unused idegen line _ endings make _ key monkey runner zoneinfo
2)使用make_key工具生成簽名文件。
'開發/工具$ sh make _ key release key '/C = CN/ST = JiangSu/L = NanJing/O = Company/OU = Department/CN = your name/email address = your-mail address '
輸入“releasekey”的密碼(空白表示無;密碼將可見):mypassword & lt-設置您的密碼。
使用密碼[我的密碼]創建platform.pk8
生成RSA私鑰,2048位長模數
...............+++
........................................................+++
e是3 (0x3)
這裏順便介紹壹下make_key的參數。第壹個參數是生成密鑰的名稱,第二個參數是關於您的公司的信息。
key的名字很好理解,就是上面說的四類鍵。公司信息中有很多參數,其含義如下:
c->;國家名稱(2個字母的代碼)
ST->;州或省名(全名)
l-& gt;地點名稱(例如,城市)
o-& gt;組織名稱(如公司)
歐-& gt;組織單位名稱(例如,部門)
CN-& gt;常用名(例如,您的名字或服務器的主機名)
電子郵件地址-& gt;聯系人電子郵件地址
這樣就生成了壹組releasekey,其他三種類型的密鑰也是以同樣的方式生成的。
生成的結果如下:
/開發/工具$ ls
makedict media . pk8 MK stubs platform . pk8 release key . pk8 shared . pk8
make _ key media . x509 . PEM platform . x509 . PEM release key . x509 . PEM shared . x509 . PEM
*.pk8是生成的私鑰,* .x509.pem是公鑰,生成時成對出現。
2.將pk8和x509.pem文件復制到供應商/modul/security/product _ modul目錄。
/Android _ src/vendor/Modul/security/product _ Modul $ CP../../../../development/tools/*.pk8。/
/Android _ src/vendor/Modul/security/product _ Modul $ CP../../../../development/tools/*pem。/
雖然這壹條不是必須的,但是這樣做更好。由於該項目,產品和產品模塊被替換為MODM和MODM產品。
3.回到根目錄android_src
/Android _ src/vendor/Modul/security/product _ Modul $ CD../../../../
大家看完壹定覺得這壹步是多余的,沒必要單獨提。但事實證明,有必要提壹下這壹步,因為第五步的操作必須在根目錄下進行,否則會出錯。在這壹點上我吃了很多苦。
4.編譯系統
/Android _ src$make-j4產品-產品_模塊-用戶分布
為什麽這個和平時的編制不壹樣?還有兩個參數,PRODUCT-product_modul-user和dist。編譯完成後,將在/android_src/dist/目錄中生成壹個以product_modul-target_files開頭的zip文件。這是我們需要簽名的文件系統。
5.開始簽名
android_src$。/build/tools/release tools/sign _ target _ files _ apks-d vendor/Modul/security/product _ Modul/out/dist/product _ Modul-target _ files . zip out/dist/signed _ target _ files . zip
錯誤:沒有為指定密鑰:
CalendarWidget.apk
Contacts_yellowpage.apk
SnsAppMain.apk
fbandroid-1.5.0.apk
AnalogClockWidget.apk
MessageWidget.apk
NewsWidget.apk
上面的意思是使用sign_target_files_apks工具用vendor/module/security/product _ module/下的密鑰對product _ module-target _ files . zip文件進行簽名,並將簽名結果放入out/dist/signed _ target _ files . zip中.
從上面的簽名結果來看,簽名並不成功,因為部分apk程序已經被簽名或者找不到對應的密鑰。這也難不倒我們。我們可以設置過濾,不簽署上述程序。該方法如下:
使用參數"-e
android_src$。/build/tools/release tools/sign _ target _ files _ apks-d vendor/Modul/security/product _ Modul/-e calendar widget . apk =-e Contacts _ yellow page . apk =-e snsapmain . apk =-e FB Android-1 . 5 . 0 . apk =-e analogclockwidget . apk =-e message wid get . apk =-e news widget . apk = out/dist/product _ Modul-target _ files . zip out/dist/dist
輸入供應商/Modul/security/product _ Modul//介質密鑰的密碼& gt& lt-輸入密碼
輸入供應商/Modul/security/product _ Modul//平臺密鑰的密碼& gt& lt-輸入密碼
輸入vendor/Modul/security/product _ Modul//release key key & gt;的密碼。& lt-輸入密碼
輸入供應商/Modul/security/product _ Modul//共享密鑰的密碼& gt& lt-輸入密碼
正在重寫RECOVERY/RAMDISK/default.prop:
替換:ro.build.tags=test-keys
with:ro . build . tags =釋放鍵
未簽名:CalendarWidget.apk
未簽名:Contacts_yellowpage.apk
簽名:Mms.apk
簽名:SoundRecorder.apk
簽名:AccountAndSyncSettings.apk
簽名:Camera.apk
.......................................................................
重寫SYSTEM/build.prop:
替換:ro.build.tags=test-keys
with:ro . build . tags =釋放鍵
替換:ro.build.description= test-keys
使用:ro . build . description = release-keys
替換:ro.build.fingerprint=...........................
with: ro.build.fingerprint=.............................
簽名:framework-res.apk
完成了。
這就完成了android系統的簽名工作。
6.生成圖像文件
android_src$。/build/tools/release tools/img _ from _ target _ file out/dist/signed-target-files . zip out/dist/signed-img . zip
正在創建boot.img...
創建recovery.img...
正在創建system.img...
正在創建userdata.img...
清理...
完成了。
使用img_from_target_files工具生成signed-img.zip文件,包括boot.img、userdate.img、system.img文件等。
7.通過fastboot下載signed-img.zip文件。
快速啟動更新簽名-img.zip
可以通過fastboot將簽名的系統文件下載到手機上。