轉自 http://blog.csdn.net/chen_chun_guang/archive/2011/04/15/6325833.aspx
網上Android數字簽名大多是與Android APK相關,而介紹Android係統簽名的方法卻不多。正巧前段時間幫別人做CTS 認證,需要用到給Android係統簽名。
為什麼需要給Android係統簽個名才能進行CTS認證呢?原來我們通過make -j4編譯出來的system.img使用的是test key,這種類型的key隻適用於開發階段,而且這種秘鑰是公開的,誰都可以使用。當發布一款android產品,就需要另外給整個係統簽個名,防止被別 人盜用。這種係統就是release版本的Android係統。
下麵就詳細介紹下整個過程。
1、生成加密key文件
要對Android係統進行簽名,需要生成四種類型的key文件。
a)releasekey (testkey)
b)media
c)shared
d)platform
我們就拿releasekey為例簡單介紹下生成過程。
1)進入/android_src/development/tools目錄。
/development/tools$ ls
apkcheck etc1tool hosttestlib jdwpspy makedict mkstubs
axl findunused idegen line_endings make_key monkeyrunner zoneinfo
2)使用make_key工具生成簽名文件
development/tools$ sh make_key releasekey /C=CN/ST=JiangSu/L=NanJing/O=Company/OU=Department/CN=YourName/emailAddress=YourE-mailAddress
Enter password for releasekey (blank for none; password will be visible): mypassword <------- 設置你的密碼
creating platform.pk8 with password [mypassword]
Generating RSA private key, 2048 bit long modulus
e is 3 (0x3)
這裏要順便介紹下make_key的參數。第一個參數是要生成key的名字,第二個參數是關於你公司的信息。
key的名字很好理解,就是前麵提到的4中類型的key,公司信息的參數比較多,它們的含義如下:
C ---> Country Name (2 letter code)
ST ---> State or Province Name (full name)
L ---> Locality Name (eg, city)
O ---> Organization Name (eg, company)
OU ---> Organizational Unit Name (eg, section)
CN ---> Common Name (eg, your name or your server’s hostname)
emailAddress ---> Contact email address
這樣就生成了一組releasekey,另外3種類型的key的生成方法也基本一樣。
生成後的結果如下:
/development/tools$ ls
makedict media.pk8 mkstubs platform.pk8 releasekey.pk8 shared.pk8
make_key media.x509.pem platform.x509.pem releasekey.x509.pem shared.x509.pem
*.pk8是生成的私鑰,而*.x509.pem是公鑰,生成時兩者是成對出現的.
另外,如果出現 openssl : relocation error
penssl : symbol ...嚐試用 sudo 執行命令, 問題解決了!
2 、 把pk8和x509.pem文件拷貝到vendor/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 ./
這一部雖然不是必須的,但最好還是這樣做下,由於牽涉到項目的原因,產品和產品型號就用Modul和product_modul代替了.
3 、 回到根目錄android_src
/android_src/vendor/Modul/security/product_modul$ cd ../../../../
大家看後肯定覺得這一步很多餘,根本沒有必要單獨提出來,但後來證明把這步提下還是很有必要的,因為第5步的操作必須要在根目錄下執行,不然會出錯.在這一點上我是吃了不少苦頭.
4 、編譯係統
/android_src$ make -j4 PRODUCT-product_modul-user dist
這個怎麼跟平時的編譯不一樣,後麵多了兩個參數PRODUCT-product_modul-user 和 dist. 編譯完成之後回在/android_src/dist/目錄內生成個product_modul-target_files開頭的zip文件.這就是我們 需要進行簽名的文件係統.
5 、開始簽名
android_src$ ./build/tools/releasetools/sign_target_files_apks -d vendor/Modul/security/product_modul/ out/dist/product_modul-target_files.zip out/dist/signed_target_files.zip
ERROR: no key specified for:
CalendarWidget.apk
Contacts_yellowpage.apk
SnsAppMain.apk
fbandroid-1.5.0.apk
AnalogClockWidget.apk
MessageWidget.apk
NewsWidget.apk
上麵的意思是使用sign_target_files_apks工具采用vendor/Modul/security/product_modul /下的key對product_modul-target_files.zip文件進行簽名,並把簽名結果放在out/dist /signed_target_files.zip裏.
從上麵的簽名結果看,簽名並沒有成功,原因是由於有些apk程序已經簽過名了或者找不到對應的key. 這也難不倒我們,我們可以通過設置過濾,不對上麵的程序進行簽名.方法如下:
通過參數"-e <apkname>=" 來過濾這些程序.
android_src$ ./build/tools/releasetools/sign_target_files_apks -d vendor/Modul/security/product_modul/ -e CalendarWidget.apk= -e Contacts_yellowpage.apk= -e SnsAppMain.apk= -e fbandroid-1.5.0.apk= -e AnalogClockWidget.apk= -e MessageWidget.apk= -e NewsWidget.apk= out/dist/product_modul-target_files.zip out/dist/signed_target_files.zip
Enter password for vendor/Modul/security/product_modul//media key> <----- imput the password
Enter password for vendor/Modul/security/product_modul//platform key> <----- imput the password
Enter password for vendor/Modul/security/product_modul//releasekey key> <----- imput the password
Enter password for vendor/Modul/security/product_modul//shared key> <----- imput the password
rewriting RECOVERY/RAMDISK/default.prop:
replace: ro.build.tags=test-keys
with: ro.build.tags=release-keys
NOT signing: CalendarWidget.apk
NOT signing: Contacts_yellowpage.apk
signing: Mms.apk
signing: SoundRecorder.apk
signing: AccountAndSyncSettings.apk
signing: Camera.apk
rewriting SYSTEM/build.prop:
replace: ro.build.tags=test-keys
with: ro.build.tags=release-keys
replace: ro.build.description= test-keys
with: ro.build.description= release-keys
replace: ro.build.fingerprint=...........................
with: ro.build.fingerprint=.............................
signing: framework-res.apk
done.
這樣就完成了android係統的簽名工作.
6 、生成image文件
android_src$ ./build/tools/releasetools/img_from_target_files out/dist/signed-target-files.zip out/dist/signed-img.zip
creating boot.img...
creating recovery.img...
creating system.img...
creating userdata.img...
cleaning up...
done.
使用img_from_target_files工具生成signed-img.zip文件.signed-img.zip文件包含了boot.img,userdate.img,system.img文件等.
7 、通過fastboot下載signed-img.zip文件
fastboot update signed-img.zip
通過fastboot就可以把簽了名的係統文件下載到手機上了。
介紹android APK簽名的方法有很多,下麵這篇文章寫的挺不錯,有需要的可以參考一下.
http://yangguangfu.iteye.com/blog/723182
分享到:
相关推荐
三、生成Release APK 完成签名文件设置后,点击“Finish”,Android Studio会开始编译Release版本的APK。完成后,可以在项目的`app/build/outputs/apk/release`目录下找到生成的APK文件。 四、ProGuard配置 如果你...
"AndroidTool_Release.zip"是一个专门针对release版本发布的工具集合,旨在帮助开发者高效地完成应用的打包、签名、优化和发布工作。本文将详细探讨Android应用的Release流程以及如何使用AndroidTool_Release进行...
- **V1 (Jar Signature Scheme)**:来自JDK的签名方案,适用于所有Android版本。 - **V2 (Full APK Signature Scheme)**:从Android 7.0(API级别24)开始支持的签名方案,提供了更安全的签名方式。 - **建议**:...
Android Studio将开始编译并打包过程,完成后在指定目录下生成Release版APK。 4. **ProGuard与R8代码混淆** 代码混淆是提高应用安全性和防止反编译的重要手段。ProGuard是Android默认的混淆工具,而在新版本的...
2. 注意Android版本的兼容性,测试应用在不同Android版本上的表现。 3. 使用官方提供的文档和示例代码,确保正确集成和使用SDK。 总结,uniapp安卓离线SDK——Android-SDK@3.2.3.81011_20210826是开发者实现高效...
Android系统要求每个发布到Google Play商店的应用都需要经过签名,以便验证应用的来源和确保其在安装和更新过程中的完整性。本文将深入探讨Android签名生成工具以及签名格式转换工具的相关知识。 一、Android签名的...
总的来说,Android APK生成系统签名文件是一个涉及安全、权限和版本控制的重要过程。开发者不仅需要理解签名的基本概念,还需要熟悉相关工具的使用,以及如何在不同场景下正确地签署和管理签名文件。通过这个过程,...
Android系统要求每个发布到市场的APK文件都必须有一个数字证书签名。这个签名用于验证应用程序的开发者身份,确保应用在安装和更新过程中不被篡改。同时,签名也用于权限管理,只有拥有相同签名的应用才能进行权限...
1. **兼容性问题**:不同Android版本可能需要不同的NDK版本,Android 1.5的NDK可能会与较新版本的Android不兼容。 2. **调试难度**:本地代码的调试通常比Java代码更复杂,需要使用NDK提供的NDK-GDB工具。 3. **性能...
Android项目编译系统是Android软件开发中一个至关重要的环节,它涉及到将源代码转换成可在Android设备上运行的应用程序。本文将详细介绍Android项目编译的基本方法,以及make调用的具体操作。 首先,了解Android...
这个插件能够自动化地为Android应用生成版本代码(versionCode)和版本名称(versionName),帮助开发者更方便地管理项目的版本迭代。 在Android开发中,版本代码(versionCode)是一个整数,用于内部表示应用的...
现在,当你运行`./gradlew assembleRelease`命令时,Gradle会自动使用指定的Keystore对应用进行签名,并生成Release版的APK。 Android签名过程还包括对应用进行zipalign优化,这一步可以提高应用的启动速度和内存...
3. AndroidManifest.xml 文件:是 Android 应用程序的配置文件,定义了应用程序的名称、版本号、权限和其他信息。 4. classes.dex 文件:包含了 Android 应用程序的 Java 代码和资源文件。 5. lib 文件夹:包含了 ...
在发布前,务必在多台设备上进行测试,确保应用在不同Android版本和硬件配置上都能正常运行。可以使用Android Studio内置的模拟器或者通过adb(Android Debug Bridge)将APK安装到真实设备上进行测试。 9. **APK...
最新版本的ExoPlayer jar文件包含了核心组件、DASH、HLS和SS支持,以及用户界面和AAC解码器,这些都是Android应用开发中处理多媒体内容的关键部分。 1. **ExoPlayer核心组件**:这是ExoPlayer的基础,包含播放器的...
5. **测试**:发布前应进行全面的测试,包括单元测试、集成测试和兼容性测试,确保应用在不同设备和Android版本上都能正常运行。 6. **应用商店发布**:最后,将APK上传到Google Play Console或其他应用市场,填写...
1、在Build中找到生成release的选项: 2、 3、 4、创建密钥库及密钥,创建后会自动选择刚创建的密钥库和密钥, 点击“Create new…”按钮创建密钥库 (已拥有密钥库跳过这一步) 5、一下内容一般都是自己带出来的...
Make Project`,NDK会根据Android.mk文件编译C/C++源码并生成`.a`格式的静态库文件,通常位于`app/build/intermediates/cmake/debug/obj/armeabi-v7a`或`app/build/intermediates/cmake/release/obj/armeabi-v7a`...
3. **Release模式编译**:在生成签名之前,开发者需要将项目设置为Release模式,因为Debug签名虽然方便调试,但不能用于发布。在Android Studio中,选择Build > Generate Signed Bundle / APK,然后按照向导操作,...
本文将详细讲解如何从生成keystore文件到完成应用的签名过程,这是安卓应用程序生命周期中的一个重要环节。 首先,理解keystore的概念。keystore是一个包含一个或多个密钥对(公钥和私钥)的文件,用于数字签名。在...