導航:首頁 > 操作系統 > androidjks簽名

androidjks簽名

發布時間:2023-05-02 10:07:07

A. android系統簽名

有時候,我們開發的apk需要用到系統許可權,需要在AndroidManifest.xml中添加共享系統進程屬性:

這時候apk的簽名就需要是系統簽名(platform、shared或media)才能正常使用。
常用系統簽名方式

這種方式比較麻煩,你需要有編譯過的源碼環境,並按如下步驟:
1、拷貝App源碼到Android源碼的packages/apps/目錄下,且App源碼是普通(Eclipse)格式的
2、配置Android.mk,在其中添加

3、使用mm編譯App,生成的apk即系統簽名

這種方式比在源碼環境下簽名簡單,App可以在Eclipse或Android Studio下編譯,然後給apk重新簽名即可。
但這種方式在頻繁調試的時候比較痛苦,即使寫成腳本,也需要重復一樣的操作。
相關文件
platform.x509.pem、platform.pk8、signapk.jar

文件位置
platform.x509.pem、platform.pk8:

signapk.jar:

signapk源碼路徑:

簽名命令

步驟

1、將相關文件及源apk文件置於同一路徑下
2、檢查源apk包,去掉META-INF/CERT.SF 和 META-INF/CERT.RSA 文件
3、執行簽名命令即可

讓Android Studio集成系統簽名,需要用到一個工具 keytool-importkeypair ,詳見下文。

這個工具的作用是將系統簽名的相關信息導入到已有的簽名文件里。

工具的使用方法可以通過–help或README.textile來尋求幫助

platform.x509.pem、platform.pk8、keytool-importkeypair、demo.jks、signature.sh

我的做法是在App根目錄新建Signature文件夾專門存放簽名相關文件。
步驟

1、生成demo.jks簽名文件

2、編寫簽名腳本signature.sh,內容如下:

為腳本文件添加可執行許可權:

執行腳本:

3、配置builde.gradle

在android區域下(與defaultConfig同級)添加配置:

這樣debug或release apk就帶有系統簽名了。

如果想直接Run app就是release版且帶系統簽名的apk,還需修改:

這樣直接Run app就是帶系統簽名的release版apk了。

B. Android Studio 之簽名

通過簽名可以確保數據來源的可靠性和數據的不可篡改性

對 Apk 進行簽名,也就是在 Apk 中寫入一個指紋,寫入指紋後,Apk 中有任何修改,都會導致這個指紋無效,Android 系統在安裝 Apk 進行簽名校驗時就會不通過,進而無法安裝該 Apk

如上圖:

通常的簽名驗簽過程中,接收方收到消息後,會先向 CA 機構驗證證書的合法性,再進行簽名校驗。但 Apk 的證書通常由開發者自己製作,沒有向 CA 機構申請,Android 系統在安裝 Apk 時也並沒有校驗證書本身的合法性,只是從證書中提取公鑰和加密演算法,因此,如果對第三方 Apk 重新簽名,也能安裝到沒有安裝過這個 Apk 的系統中

keystore 文件包含私鑰、公鑰和數字證書,分為很多種,Android 使用的是 Java 標准 keystore 格式 JKS(Java Key Storage)

Android App Bundle:用於通過 Google Play 發布的應用,需要升級到AS 3.2 以上版本才支持App Bundle 格式;
APK:用於創建可部署到設備上的簽名 APK

點擊 Finish 就會生成簽名文件與簽名後的 Apk

當我們需要升級 Apk 版本的時候,需要再次對 Apk 文件進行簽名,可以通過配置 build.gradle 讓其自動生成簽名後的 Apk

如果你的項目是開源的,需要把你的簽名信息寫在 local.properties 中,然後在 .gitignore 配置文件中加入 local.properties ,這樣 local.properties 就不會提交到開源項目中,簽名信息也就不會被人獲取

local.properties:

app/build.gradle:

有時候我們的 apk 中某些功能需要系統簽名,例如靜默安裝。測試系統簽名的 apk,需要 root 許可權,而帶 Google APIs 的模擬器不能 root,因此要注意不能選擇帶 Google APIs 的模擬器

下面執行的操作都是在 linux 中,如果 apk 是 window 中生成的,需要拷貝到 linux 操作,再將生成的系統簽名過得 apk 再拷貝到 window,比較麻煩,可以考慮後面的自動系統簽名,還是需要在 linux 操作一次,不過之後就可以只在 window 操作了

這兩個文件在目錄 aosp/build/target/proct/security 下,如下圖

在目錄 aosp/prebuilts/sdk/tools/lib 下,如下圖

將前面獲取的 platform.pk8 、 platform.x509.pem 和 signapk.jar 文件放到需要簽名的 apk 同一個目錄,執行以下命令

如果出現上面的錯誤:Failed to load any of the given libraries: [conscrypt_openjdk_jni-linux-x86_64, conscrypt_openjdk_jni-linux-x86_64-fedora, conscrypt_openjdk_jni]

解決方法:

到目錄 aosp/prebuilts/sdk/tools/linux/lib64 下,復制 libconscrypt_openjdk_jni.so 文件到需要簽名 apk 的同一個目錄,並將命令改為

自動進行系統簽名的原理是:先生成一個 system.jks 文件,使用 keytool-importkeypair 對 system.jks 文件進行系統簽名,再 build.gradle 和 local.properties 進行配置,直接使用帶有系統簽名的 system.jks 對 apk 進行簽名,這樣編譯生成的apk文件就自帶系統簽名了

按照前面的方法,生成一個 system.jks 文件,此時是在 window 系統中操作的

進入 keytool-importkeypair 目錄,將 system.jks、platform.pk8、platform.x509.pem 文件拷貝進來,拷貝之後的目錄結構為

使用 linux 中修改過的帶有系統簽名的 system.jks 文件將 window 中最開始生成的 system.jks 覆蓋掉,再像前面的自動簽名部分一樣,修改 build.gradle 和 local.properties 的配置,之後生成的 apk 就是系統簽名過的了

測試方法是,在 AndroidManifest.xml 中添加 android:sharedUserId="android.uid.system" 後安裝到 非 Google APIs 的模擬器上 , Google APIs 的模擬器不能 root,無法安裝

會發現只有使用 system.jks 文件簽名後才能安裝,否則安裝失敗,會報以下的錯誤:

C. 2022-06-24 關於android的簽名jks的替換嘗試.

android developer 開發者
掘金博客

首先這個需求是因為客戶安全部門對我們的apk進行安全測試,發現我們apk的證書簽名信息是不規范的,需要我們去修改證書裡面的信息,於是乎,我們開始了修改寫bug之路.

實現android apk 證書簽名的信息替換

至於什麼是敏漏keytool,這里不再贅述,自行網路.

這里需要注意的是你們需要替換的內容是KEY_ALIAS_OLD=「老的jks的別名」,KEYSTORE_PASSWORD_OLD=」老的jks的庫密碼「,KEY_PASSWORD_OLD = 「老的jks的別名密碼」
剩下的也是依次替換就行了,然後會在你所在執行命令的目錄下,生成一個lineage文件,這個文件非常重要
,相當於輪替文件的內容,下面我們在執行這個命令腳塌拿含本

這里需要注意的是這兩個佔位符號LINEAGE = 「lineage的文件路徑」 ,OUT_FILE="新生成的apk的路徑",
這樣你就會得到簽名後的apk,在執行apksigner verify --verbose 命令 ,你就能看到是否開啟V3

這樣能看到,V3開啟,還有V4的彩蛋,當然,V4,在官網還沒有更新出文檔.
所以我們就可以把這個apk當成我們簽名過度的apk,我們稱之為transition.apk,那我們後續升級的安排,就可以是 old.apk->transition.apk->直接使用新的簽名的apk,從而,完成apk的簽名更新,

這個流程雖然可以解決簽名替換的問題,但是,問題是,這個只在大於等於android9的機型上才會生效,經過測試,我自身的android 11 手機是可以的,android 9以下的手機還未測試,等待我後續更新,根據掘金的博主和google爸爸的描述中可以得出,只有在支持V3的手機上才會生效,而且,應用上架除非應用市場將其檢驗方式換成V3的應團笑該就可以了,可是並非所有版本的Android系統都可以直接覆蓋安裝,所以就算是安全上架了,系統版本低的還是要卸載才能安裝。所以,看的出來V3在解決這個問題,那麼V4呢,這個google爸爸留給我們的驚喜,不知道能不能徹底解決證書替換的問題.

D. Android查看應用簽名方法

打開 Android Studio,然後選擇右邊的 Gradle 標簽,選擇一個項目,然後選擇 signingReport 這個 Task,雙擊運行

然後選擇右下角的 Gradle Console,就可以看到簽名信息了

使用解壓工具解壓 APK 文件,在 META-INF 文李彎件夾拿到 CERT.RSA 文件。假設 CERT.RSA 文件的路徑哪粗悶是 C:\Users\Administrator\Desktop\CERT.RSA。在 CMD 中輸入

就可以得到簽名信息了

jks 作為簽名文件,也可以通過命令行來查看的其中的簽名信息,假設簽名文件的名稱是 test_release.jks,在終端中輸入

即凳鋒可得到簽名信息

E. Android查看應用簽名方法

查看應用簽名的MD5、SHA1、SHA256值及簽名演算法。

查看keystore文件簽名信息,前提要有keystore文件和密鑰,才能夠獲取keystore文件的簽名信息。

方法一:(適用於 AS)
1)打開 AS工具窗口欄右邊的 Gradle -> Project -> app -> Tasks -> android -> signingReport,雙擊運行 signingReport;

在沒有keystore文件和密鑰的情況下,要想查看我們所需應用的簽名信息,就需要藉助 keytool 工具來完成。
首先解壓要查看的apk包,通過數據證書管理工具 keytool 查看apk的簽名信息。具體步驟如下:
1)將apk修改後綴為 .rar 文件後進行解壓;
2)進入解壓後的 META-INF 目錄,找到該目錄下的 xxx.RSA 文件;
3)通過命令 cmd 打開DOS窗口,輸入命令 : keytool -printcert -file [RSA文件路徑]

在查看應用簽名信息過程中,可能會遇到以下幾個問題:

定位 keytool.exe 工具所在的目錄,使用相關操作命令查看簽名信息;

JKS(Java KeyStore) :是 Java 的 keytools 證書工具支持的證書私鑰格式。jks 包含了公鑰和私鑰,可以通過 keytool 工具來將公鑰和私鑰導出。因為包含了私鑰,所以 jks 文件通常通過一個密碼來加以保護。一般用於 Java 或者 Tomcat 伺服器。
PKCS #12 :定義了一種存檔文件格式,用於實現存儲許多加密對象在一個單獨的文件中。通常用它來打包一個私鑰及有關的 X.509 證書,或者打包信任鏈的全部項目。
定位 keytool.exe 工具所在的目錄,使用操作命令轉換證書格式;

F. 如何利用jks文件給apk簽名

jarsigner -verbose -keystore xxx.jks -signedjar xxx.apk(簽名後的apk名字) xxx.apk(需要簽名的apk) xxx(keystore別名)

以linux下為例:
進入android sdk下的platform-tools:輸入如下指令
jarsigner -verbose -keystore /cloud/xxx.jks -signedjar /cloud/app.apk( /cloud/app-unsigned.apk xxx
然後輸入密碼,即可簽名成功。

閱讀全文

與androidjks簽名相關的資料

熱點內容
java修改ip 瀏覽:149
php不需要編譯嗎 瀏覽:134
特斯拉新車如何用app控制 瀏覽:185
文檔拖到文件夾就不見了 瀏覽:814
標致308壓縮比是多少 瀏覽:749
伺服器和備用伺服器地址 瀏覽:926
程序員加班跳槽 瀏覽:706
青年員工在工作中如何化解壓力 瀏覽:602
包子解壓神器怎麼玩才爽 瀏覽:733
聯想加密電腦怎麼做系統 瀏覽:881
解壓最近的壓力 瀏覽:709
如何知道王牌戰爭新出來的伺服器 瀏覽:591
程序員建的房子 瀏覽:419
navicatlinux破解版 瀏覽:454
找個輔警或者程序員 瀏覽:452
軍團td預言命令 瀏覽:114
營指揮員下達作戰命令 瀏覽:258
exe打開指定文件夾 瀏覽:266
pdf裡面怎麼去水印 瀏覽:847
appleid賬號加密碼 瀏覽:222