① android系統簽名apk,讓應用獲取系統級許可權
使用手機的platform平台簽名後,能夠獲取到系統許可權。
1、在AndroidManifest.xml設置android:sharedUserId="android.uid.system"。
2、編譯通過後,導出未簽名的apk。
3、使用\out\host\Linux-x86\framework\signapk.jar \build\target\proct\security\platform.pk8 +platform.x509.pem
4.執行「java -jar signapk.jar platform.x509.pem platform.pk8 test.apk testSigned.apk」做平台簽名得到testSigned.apk。
test.apk必須放在上面同一個目錄之下。
② 安卓APP在應用市場加固之後怎麼重新簽名
可以使用jarsigner對未簽名的加固包進行簽名。
建議使用之前對APP簽名時使用的keystore對加固包進行簽名
jarsigner-digestalgSHA1-sigalgMD5withRSA-verbose-keystore[your_key_store_path]-signedjar
[signed_apk_name][usigned_apk_name][your_key_store_alias]
your_key_store_path:密鑰所在位置的絕對路徑
signed_apk_name:簽名後安裝包名稱
usigned_apk_name:未簽名的安裝包名稱
your_key_store_alias:密鑰的別名就是你自己創建的.keystore文件
③ Android中APK簽名工具之jarsigner和apksigner詳解
轉自 https://www.cnblogs.com/slysky/p/9780015.html
一.工具介紹
jarsigner是JDK提供的針對jar包簽名的通用工具,
位於JDK/bin/jarsigner.exe
apksigner是Google官方提供的針對Android apk簽名及驗證的專用工具,
位於Android SDK/build-tools/SDK版本/apksigner.bat
不管是apk包,還是jar包,本質都是zip格式的壓縮包,所以它們的簽名過程都差不多(僅限V1簽名),
以上兩個工具都可以對Android apk包進行簽名.
1.V1和V2簽名的區別
在Android Studio中點擊菜單 Build->Generate signed apk... 打包簽名有兩種簽名選項 V1(Jar Signature) V2(Full APK Signature),
從Android 7.0開始, 谷歌增加新簽名方案 V2 Scheme (APK Signature);
但Android 7.0以下版本, 只能用舊簽名方案 V1 scheme (JAR signing)
V1簽名:
V2簽名:
V2簽名優點很明顯:
注意: apksigner工具默認同時使用V1和V2簽名,以兼容Android 7.0以下版本
2.zipalign和V2簽名
位於Android SDK/build-tools/SDK版本/zipalign.exe
zipalign 是對zip包對齊的工具,使APK包內未壓縮的數據有序排列對齊,從而減少APP運行時內存消耗
zipalign -v 4 in.apk out.apk //4位元組對齊優化
zipalign -c -v 4 in.apk //檢查APK是否對齊
zipalign可以在V1簽名後執行
但zipalign不能在V2簽名後執行,只能在V2簽名之前執行!!!
二.簽名步驟
1.生成密鑰對(已有密鑰庫,可忽略)
Android Studio在Debug時,對App簽名都會使用一個默認的密鑰庫:
1.生成密鑰對
進入JDK/bin, 輸入命令
參數:
提示: 可重復使用此條命令,在同一密鑰庫中創建多條密鑰對
例如: 在debug.keystore中新增一對密鑰,別名是release
keytool -genkeypair -keystore debug.keystore -alias release -validity 30000
2.查看密鑰庫
進入JDK/bin, 輸入命令
keytool -list -v -keystore 密鑰庫名
參數:
例如:
keytool -list -v -keystore debug.keystore
現在debug.keystore密鑰庫中有兩對密鑰, 別名分別是androiddebugkey release
2.簽名
1.方法一(jarsigner,只支持V1簽名)
進入JDK/bin, 輸入命令
從JDK7開始, jarsigner默認演算法是SHA256, 但Android 4.2以下不支持該演算法,
所以需要修改演算法, 添加參數 -digestalg SHA1 -sigalg SHA1withRSA
參數:
例如:
用JDK7及以上jarsigner簽名,不支持Android 4.2 以下
jarsigner -keystore debug.keystore MyApp.apk androiddebugkey
用JDK7及以上jarsigner簽名,兼容Android 4.2 以下
jarsigner -keystore debug.keystore -digestalg SHA1 -sigalg SHA1withRSA MyApp.apk androiddebugkey
2.方法二(apksigner,默認同時使用V1和V2簽名)
進入Android SDK/build-tools/SDK版本, 輸入命令
若密鑰庫中有多個密鑰對,則必須指定密鑰別名
禁用V2簽名
apksigner sign --v2-signing-enabled false --ks 密鑰庫名 xxx.apk
參數:
例如:
在debug.keystore密鑰庫只有一個密鑰對
apksigner sign --ks debug.keystore MyApp.apk
在debug.keystore密鑰庫中有多個密鑰對,所以必須指定密鑰別名
apksigner sign --ks debug.keystore --ks-key-alias androiddebugkey MyApp.apk
3.簽名驗證
1.方法一(keytool,只支持V1簽名校驗)
進入JDK/bin, 輸入命令
keytool -printcert -jarfile MyApp.apk (顯示簽名證書信息)
參數:
2.方法二(apksigner,支持V1和V2簽名校驗)
進入Android SDK/build-tools/SDK版本, 輸入命令
apksigner verify -v --print-certs xxx.apk
參數:
例如:
apksigner verify -v MyApp.apk
④ Android Studio打包沒有Generate signed apk選項
1.點擊build欄目-並沒有Generate signed apk選項
2.點擊file,選中如下圖所示Sync Project with Gradle Files
3.如下圖所示,Generate signed就會出來
這樣就可以打包apk啦,本人也是剛入坑,調試了半天各種查,才誤打誤撞發現的。
⑤ Android APK編譯流程
apk 是Android Package的簡寫, 在平時的開發過程中,通過點擊 Run app 按鈕 或者 在命令行中輸入
這樣Android Studio就會啟動構建流程,最終輸出一個我們想要的APK。
直達官網介紹
對於小白來說,上面一張圖已經可以解釋apk的構建過程了,不過對於Andoid開發者而言還需要了解一些更詳細的構建過程。
詳細的對應步驟 和 使用工具如下:
資源文件(res文件夾下的文件)通過 AAPT(Android Asset Packaging Tool)打包生成R.java類(資源索引表)、.arsc資源文件 和res文件。
resources.arsc 是一個App的資源索引表,通過R.java 文件 和 resources.arsc 可以定位到資源的內存地址,resources.arsc文件的作用是通過一樣的ID,根據不同的配置索引到最佳的資源顯示在UI中。
AIDL (Android Interface Definition Language), 是Android介面定義語言,是Android提供的IPC (Inter Process Communication,進程間通信)的一種獨特實現。
如果有aidl文件,這個階段會生成對應的Java介面文件。
R.java文件、工程源碼文件、aidl.java文件, 在這一步通過javac生成.class文件。
源碼.class文件和第三方jar或者library通過dx工具打包成dex文件
Android系統的Dalvik虛擬機的可執行文件為DEX格式,所以這里會將上一步中生成的.class文件 和 引用的第三方jar等過程中的.class 一起通過dx工具打包成dex文件
apkbuilder工具會將所有沒有編譯的資源、.arsc資源、.dex文件打包到一個完成apk文件中
tips:
apksigner工具會對未簽名的apk驗證簽名。得到一個簽名後的apk(signed.apk)
apksigner 是google 退出的V2簽名方式
Jarsigner 是之前一直使用的V1簽名方式
可以通過在命令行中輸入apksigner --help來獲取詳情信息,如果沒有特殊需求,使用下面命令即可完成簽名
release mode 下使用 aipalign進行align,即對簽名後的apk進行對齊處理
所謂對齊,主要過程是將APK包中所有的資源文件距離文件起始偏移為4位元組整數倍,這樣通過內存映射訪問apk文件時的速度會更快。對齊的作用主要是為了減少運行時內存的使用。
zipalign是一個android平台上整理APK文件的工具,它對apk中未壓縮的數據進行4位元組對齊,對齊後就可以使用mmap函數讀取文件,可以像讀取內存一樣對普通文件進行操作。如果沒有4位元組對齊,就必須顯式的讀取,這樣比較緩慢並且會耗費額外的內存。
參考文章:
Android-Studio配置構建
淺談Android打包流程
apk打包流程
END!
⑥ Android Studio 沒有 Generate Signed APK
我們在調試APK,直接Build是可以正常生成,沒有報錯,但是當我們將自己的簽名文件加上去,就會報錯。一般情況下,我們可以在build.gradle中的android{}裡面添加一個東西
lintOptions{
checkReleaseBuildsfalse
abortOnErrorfalse
}
詳細
⑦ Android studio怎麼直接對apk簽名
1、對apk的簽名需要把項目導入到Android studio軟體中,進行點擊菜單中「Build」選項,彈出的下拉菜單中的「generate signed APK」.
2、進入到generate signed apk中界面框中,因第一次對apk的簽名,就需要先創建簽名文件鑰匙,點擊」create new「的按鈕。
3、進行選擇鑰匙保存的位置,指定到磁碟的位置,然後在文件昵稱填入,點擊「ok」的選項
4、進入到new key store的界面中,根據界面中提示信息輸入內容信息,輸入完成之後點擊「ok」。
5、鑰匙創建完成之後,進行點擊"next下一步"操作。
6、進入到這個界面中選擇apk生成保存的位置,然後在build type中選擇release的選項,然後點擊「Finish」的選項,這樣就生成到apk的保存路徑中。
⑧ Android studio怎麼生成簽名apk
打開項目以後,點擊項目,選擇 Build 菜單, 然後選擇 Generate Signed APK.
打開生成對話框:
選擇 Create new... 按鈕, 生成新的Key, 彈出新生成對話框:
首先選擇 Key 存儲的路徑.
可能是有BUG, 在彈出的選擇 keystore file 對話框中,需要先輸入 File name, 如 ``, 文件後綴名 保持默認的 jks 不變。然後再改變保存的路徑(否則輸入不了名字).
最後的路徑可能是這樣的: E:\CODE_ALL\02_GIT_ALL\cncounter-Android\key_store\cncounter-android-key.jks
接著輸入密碼, 建議不要太簡單,也不要太復雜。 此處示例的密碼為:
為了簡單起見, 所有密碼都設置為同一個:
有效時間默認25年,以支撐你的整個APP周期。
Country Code (XX) 應該是 CN,
然後點擊OK, 回到生成界面
勾選上記住密碼,然後點擊下一步.
如果彈出輸入密碼保護,可以選擇留空,不使用這種保護。
點擊OK,進入下一步:
選擇 release 是發布版本,選擇 debug 是調試版本。 此處, 選擇 release , 然後點擊完成按鈕即可。
然後會告訴你生成完畢,可以選擇查看:
生成的APK
下次需要生成,只需要從 Build 菜單, 選擇 Generate Signed APK 即可。
因為上次選擇了記住密碼,所以這里不需要記住密碼。
然後繼續即可。