android空包簽名一般有兩種方式
1.使用jarsigner簽名
2.使用平臺(tái)提供的簽名工具進(jìn)行簽名
使用jarsigner簽名:
(1)生成一個(gè)keystore
例如:keytool -genkey -alias android -keyalg RSA -validity 40000 -keystore android.keystore
-keyalg RSA 使用RSA算法對(duì)簽名加密
-validity 40000 有效期限4000天
-keystore demo.keystore
這時(shí)會(huì)在jdk的bin目錄下生成 .keystore
(2)為apk文件簽名
jdk已經(jīng)跟我們提供好工具了,具體命令如下
使用jarsigner簽名:jarsigner -verbose -keystore [keystorePath] -signedjar [apkOut] [apkIn] [alias]
例如:jarsigner -verbose -keystore E:\key\androidkey.jks -signedjar E:\key\OppoSignVerify_signed.apk E:\key\OppoSignVerify.apk android
jarsigner命令格式:-verbose輸出詳細(xì)信息 -keystore密鑰庫(kù)位置 -signedjar要生成的文件 要簽名的文件 密鑰庫(kù)文件
keystorePath參數(shù)代表keyStore的絕對(duì)路徑,如D:\keystore
apkOut參數(shù)代表簽名后的apk路徑,如D:\signed.apk
apkin參數(shù)代表在騰訊應(yīng)用中心下載的未簽名apk,默認(rèn)名稱(chēng)為tap_unsign.apk
alias參數(shù)代表簽名用的alias名稱(chēng)(創(chuàng)建keyStore時(shí)所填寫(xiě)),如timdong
參考:http://fine36.blog.163.com/blog/static/189251005201161113359393/
附上keytool參數(shù)以及jarsigner參數(shù):
keytool用法:
-certreq [-v] [-protected]
[-alias <別名>] [-sigalg <sigalg>]
[-file <csr_file>] [-keypass <密鑰庫(kù)口令>]
[-keystore <密鑰庫(kù)>] [-storepass <存儲(chǔ)庫(kù)口令>]
[-storetype <存儲(chǔ)類(lèi)型>] [-providername <名稱(chēng)>]
[-providerclass <提供方類(lèi)名稱(chēng)> [-providerarg <參數(shù)>]] ...
[-providerpath <路徑列表>]
-changealias [-v] [-protected] -alias <別名> -destalias <目標(biāo)別名>
[-keypass <密鑰庫(kù)口令>]
[-keystore <密鑰庫(kù)>] [-storepass <存儲(chǔ)庫(kù)口令>]
[-storetype <存儲(chǔ)類(lèi)型>] [-providername <名稱(chēng)>]
[-providerclass <提供方類(lèi)名稱(chēng)> [-providerarg <參數(shù)>]] ...
[-providerpath <路徑列表>]
-delete [-v] [-protected] -alias <別名>
[-keystore <密鑰庫(kù)>] [-storepass <存儲(chǔ)庫(kù)口令>]
[-storetype <存儲(chǔ)類(lèi)型>] [-providername <名稱(chēng)>]
[-providerclass <提供方類(lèi)名稱(chēng)> [-providerarg <參數(shù)>]] ...
[-providerpath <路徑列表>]
-exportcert [-v] [-rfc] [-protected]
[-alias <別名>] [-file <認(rèn)證文件>]
[-keystore <密鑰庫(kù)>] [-storepass <存儲(chǔ)庫(kù)口令>]
[-storetype <存儲(chǔ)類(lèi)型>] [-providername <名稱(chēng)>]
[-providerclass <提供方類(lèi)名稱(chēng)> [-providerarg <參數(shù)>]] ...
[-providerpath <路徑列表>]
-genkeypair [-v] [-protected]
[-alias <別名>]
[-keyalg <keyalg>] [-keysize <密鑰大小>]
[-sigalg <sigalg>] [-dname <dname>]
[-validity <valDays>] [-keypass <密鑰庫(kù)口令>]
[-keystore <密鑰庫(kù)>] [-storepass <存儲(chǔ)庫(kù)口令>]
[-storetype <存儲(chǔ)類(lèi)型>] [-providername <名稱(chēng)>]
[-providerclass <提供方類(lèi)名稱(chēng)> [-providerarg <參數(shù)>]] ...
[-providerpath <路徑列表>]
-genseckey [-v] [-protected]
[-alias <別名>] [-keypass <密鑰庫(kù)口令>]
[-keyalg <keyalg>] [-keysize <密鑰大小>]
[-keystore <密鑰庫(kù)>] [-storepass <存儲(chǔ)庫(kù)口令>]
[-storetype <存儲(chǔ)類(lèi)型>] [-providername <名稱(chēng)>]
[-providerclass <提供方類(lèi)名稱(chēng)> [-providerarg <參數(shù)>]] ...
[-providerpath <路徑列表>]
-help
-importcert [-v] [-noprompt] [-trustcacerts] [-protected]
[-alias <別名>]
[-file <認(rèn)證文件>] [-keypass <密鑰庫(kù)口令>]
[-keystore <密鑰庫(kù)>] [-storepass <存儲(chǔ)庫(kù)口令>]
[-storetype <存儲(chǔ)類(lèi)型>] [-providername <名稱(chēng)>]
[-providerclass <提供方類(lèi)名稱(chēng)> [-providerarg <參數(shù)>]] ...
[-providerpath <路徑列表>]
-importkeystore [-v]
[-srckeystore <源密鑰庫(kù)>] [-destkeystore <目標(biāo)密鑰庫(kù)>]
[-srcstoretype <源存儲(chǔ)類(lèi)型>] [-deststoretype <目標(biāo)存儲(chǔ)類(lèi)型>]
[-srcstorepass <源存儲(chǔ)庫(kù)口令>] [-deststorepass <目標(biāo)存儲(chǔ)庫(kù)口令>]
[-srcprotected] [-destprotected]
[-srcprovidername <源提供方名稱(chēng)>]
[-destprovidername <目標(biāo)提供方名稱(chēng)>]
[-srcalias <源別名> [-destalias <目標(biāo)別名>]
[-srckeypass <源密鑰庫(kù)口令>] [-destkeypass <目標(biāo)密鑰庫(kù)口令>]]
[-noprompt]
[-providerclass <提供方類(lèi)名稱(chēng)> [-providerarg <參數(shù)>]] ...
[-providerpath <路徑列表>]
-keypasswd [-v] [-alias <別名>]
[-keypass <舊密鑰庫(kù)口令>] [-new <新密鑰庫(kù)口令>]
[-keystore <密鑰庫(kù)>] [-storepass <存儲(chǔ)庫(kù)口令>]
[-storetype <存儲(chǔ)類(lèi)型>] [-providername <名稱(chēng)>]
[-providerclass <提供方類(lèi)名稱(chēng)> [-providerarg <參數(shù)>]] ...
[-providerpath <路徑列表>]
-list [-v | -rfc] [-protected]
[-alias <別名>]
[-keystore <密鑰庫(kù)>] [-storepass <存儲(chǔ)庫(kù)口令>]
[-storetype <存儲(chǔ)類(lèi)型>] [-providername <名稱(chēng)>]
[-providerclass <提供方類(lèi)名稱(chēng)> [-providerarg <參數(shù)>]] ...
[-providerpath <路徑列表>]
-printcert [-v] [-file <認(rèn)證文件>]
-storepasswd [-v] [-new <新存儲(chǔ)庫(kù)口令>]
[-keystore <密鑰庫(kù)>] [-storepass <存儲(chǔ)庫(kù)口令>]
[-storetype <存儲(chǔ)類(lèi)型>] [-providername <名稱(chēng)>]
[-providerclass <提供方類(lèi)名稱(chēng)> [-providerarg <參數(shù)>]] ...
[-providerpath <路徑列表>]
jarsigner用法: [選項(xiàng)] jar 文件別名
jarsigner -verify [選項(xiàng)] jar 文件
[-keystore <url>] 密鑰庫(kù)位置
[-storepass <口令>] 用于密鑰庫(kù)完整性的口令
[-storetype <類(lèi)型>] 密鑰庫(kù)類(lèi)型
[-keypass <口令>] 專(zhuān)用密鑰的口令(如果不同)
[-sigfile <文件>] .SF/.DSA 文件的名稱(chēng)
[-signedjar <文件>] 已簽名的 JAR 文件的名稱(chēng)
[-digestalg <算法>] 摘要算法的名稱(chēng)
[-sigalg <算法>] 簽名算法的名稱(chēng)
[-verify] 驗(yàn)證已簽名的 JAR 文件
[-verbose] 簽名/驗(yàn)證時(shí)輸出詳細(xì)信息
[-certs] 輸出詳細(xì)信息和驗(yàn)證時(shí)顯示證書(shū)
[-tsa <url>] 時(shí)間戳機(jī)構(gòu)的位置
[-tsacert <別名>] 時(shí)間戳機(jī)構(gòu)的公共密鑰證書(shū)
[-altsigner <類(lèi)>] 替代的簽名機(jī)制的類(lèi)名
[-altsignerpath <路徑列表>] 替代的簽名機(jī)制的位置
[-internalsf] 在簽名塊內(nèi)包含 .SF 文件
[-sectionsonly] 不計(jì)算整個(gè)清單的散列
[-protected] 密鑰庫(kù)已保護(hù)驗(yàn)證路徑
[-providerName <名稱(chēng)>] 提供者名稱(chēng)
[-providerClass <類(lèi)> 加密服務(wù)提供者的名稱(chēng)
[-providerArg <參數(shù)>]] ... 主類(lèi)文件和構(gòu)造函數(shù)參數(shù)
簽名工具bat:http://download.csdn.net/detail/u012790961/9607457
簽名文件在哪里查找? 一個(gè)擴(kuò)展名為jks或keystore的文件。