android獲取簽名apk
㈠ android 系統簽名
也有提到怎麼單獨給一個apk簽名,這里補充一下android的簽名許可權控制機制。
android的標准簽名key有:
testkey
media
latform
hared
以上的四種,可以在源碼的/build/target/proct/security裡面看到對應的密鑰,其中shared.pk8代表私鑰,shared.x509.pem公鑰,一定是成對出現的。
其中testkey是作為android編譯的時候默認的簽名key,如果系統中的apk的android.mk中沒有設置LOCAL_CERTIFICATE的值,就默認使用testkey。
而如果設置成:
LOCAL_CERTIFICATE := platform
就代表使用platform來簽名,這樣的話這個apk就擁有了和system相同的簽名,因為系統級別的簽名也是使用的platform來簽名,此時使用android:sharedUserId="android.uid.system"才有用!
在/build/target/proct/security目錄下有個README,裡面有說怎麼製作這些key以及使用問題(android4.2):
從上面可以看出來在源碼下的/development/tools目錄下有個make_key的腳本,通過傳入兩個參數就可以生成一對簽名用的key。
其中第一個為key的名字,一般都默認成android本身有的,因為很多地方都默認使用了這些名字,我們自定義的話只需要對第二個參數動手腳,定義如下:
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 addre
另外在使用上面的make_key腳本生成key的過程中會提示輸入password,我的處理是不輸入,直接enter,不要密碼!後面解釋,用自定義的key替換/security下面的。
可以看到android源碼裡面的key使用的第二個參數就是上面README裡面的,是公開的,所以要release版本的系統的話,肯定要有自己的簽名key才能起到一個安全控製作用。
在上面提到如果apk中的編譯選項LOCAL_CERTIFICATE沒有設置的話,就會使用默認的testkey作為簽名key,我們可以修改成自己想要的key,按照上面的步驟製作一個releasekey,修改android配置在/build/core/config.mk中定義變數:
在主makefile文件裡面:
ifeq ($(DEFAULT_SYSTEM_DEV_CERTIFICATE),build/target/proct/security/releasekey)
BUILD_VERSION_TAGS += release-key
這樣的話默認的所有簽名將會使用releasekey。
修改完之後就要編譯了,如果上面的這些key在製作的時候輸入了password就會出現如下錯誤:
我在網上找到了合理的解釋:
其實會出現這個錯誤的最根本的原因是多線程的問題。在編譯的時候為了加速一般都會執行make -jxxx,這樣本來需要手動輸入密碼的時候,由於其它線程的運行,就會導致影響當前的輸入終端,所以就會導緻密碼無法輸入的情況!
再編譯完成之後也可以在build.prop中查看到變數:
這樣處理了之後編譯出來的都是簽名過的了,系統才算是release版本
我發現我這樣處理之後,整個系統的算是全部按照我的要求簽名了。
網上看到還有另外的簽名release辦法,但是應該是針對另外的版本的,借用學習一下:
make -j4 PRODUCT-proct_mol-user dist
這個怎麼跟平時的編譯不一樣,後面多了兩個參數PRODUCT-proct_mol-user 和 dist. 編譯完成之後回在源碼/out/dist/目錄內生成個proct_mol-target_files開頭的zip文件.這就是我們需要進行簽名的文件系統.
我的proct_mol 是full_gotechcn,後面加「-user」代表的是最終用戶版本,關於這個命名以及proct_mol等可參考http://blog.csdn.net/jscese/article/details/23931159
編譯出需要簽名的zip壓縮包之後,就是利用/security下面的准備的key進行簽名了:
./build/tools/releasetools/sign_target_files_apks -d /build/target/proct/security out/dist/full_gotechcn-target_files.zip out/dist/signed_target_files.zi
簽名目標文件 輸出成signed_target_files.zi
如果出現某些apk出錯,可以通過在full_gotechcn-target_files.zip前面加參數"-e =" 來過濾這些apk.
然後再通過image的腳本生成imag的zip文件,這種方式不適用與我目前的工程源碼,沒有做過多驗證!
Android簽名機制可劃分為兩部分:(1)ROM簽名機制;(2)第三方APK簽名機制。
Android APK實際上是一個jar包,而jar包又是一個zip包。APK包的簽名實際上使用的是jar包的簽名機制:在zip中添加一個META的子目錄,其中存放簽名信息;而簽名方法是為zip包中的每個文件計算其HASH值,得到簽名文件(*.sf),然後對簽名文件(.sf)進行簽名並把簽名保存在簽名塊文件(*.dsa)中。
在編譯Android源碼生成ROM的過程中,會使用build/target/proct/security目錄中的4個key(media, platform, shared, testkey)來對apk進行簽名。其中,*.pk8是二進制形式(DER)的私鑰,*.x509.pem是對應的X509公鑰證書(BASE64編碼)。build/target/proct/security目錄中的這幾個默認key是沒有密碼保護的,只能用於debug版本的ROM。
要生成Release版本的ROM,可先生成TargetFiles,再使用帶密碼的key對TargetFiles重新簽名,最後由重簽名的TargetFiles來生成最終的ROM。
可以使用Android源碼樹中自帶的工具「development/tools/make_key」來生成帶密碼的RSA公私鑰對(實際上是通過openssl來生成的): $ development/tools/make_key media 『/C=CN/ST=Sichuan/L=Cheng/O=MyOrg/OU=MyDepartment/CN=MyName』 上面的命令將生成一個二進制形式(DER)的私鑰文件「media.pk8」和一個對應的X509公鑰證書文件「media.x509.pem」。其中,/C表示「Country Code」,/ST表示「State or Province」,/L表示「City or Locality」,/O表示「Organization」,/OU表示「Organizational Unit」,/CN表示「Name」。前面的命令生成的RSA公鑰的e值為3,可以修改development/tools/make_key腳本來使用F4 (0×10001)作為e值(openssl genrsa的-3參數改為-f4)。
也可以使用JDK中的keytool來生成公私鑰對,第三方APK簽名一般都是通過keytool來生成公私鑰對的。
可以使用openssl x509命令來查看公鑰證書的詳細信息: $ openssl x509 -in media.x509.pem -text -noout or, $ openssl x509 -in media.x509.pem -inform PEM -text -noout
還可以使用JDK中的keytool來查看公鑰證書內容,但其輸出內容沒有openssl x509全面: $ keytool -printcert -v -file media.x509.pem
有了key之後,可以使用工具「build/tools/releasetools/sign_target_files」來對TargetFiles重新簽名: $ build/tools/releasetools/sign_target_files_apks -d new_keys_dir -o target_files.zip target_files_resigned.zip 其中,new_keys_dir目錄中需要有四個key(media, platform, shared, releasekey)。注意:這里的releasekey將代替默認的testkey(請參考build/tools/releasetools/sign_target_files腳本實現),也就是說,如果某個apk的Android.mk文件中的LOCAL_CERTIFICATE為testkey,那麼在生成TargetFiles時是使用的build/target/proct/security/testkey來簽名的,這里重新簽名時將使用new_keys_dir/releasekey來簽名。
uild/tools/releasetools/sign_target_files_apks是通過host/linux-x86/framework/signapk.jar來完成簽名的。也可以直接使用host/linux-x86/framework/signapk.jar來對某個apk進行簽名: $ java -jar signapk [-w] publickey.x509[.pem] privatekey.pk8 input.jar output.jar 其中,」-w」表示還對整個apk包(zip包)進行簽名,並把簽名放在zip包的comment中。
對於第三方應用開發者而言,對APK簽名相對要簡單得多。第三方應用開發一般採用JDK中的keytool和jarsigner來完成簽名密鑰的管理和APK的簽名。
使用keytool來生成存儲有公私鑰對的keystore: $ keytool -genkey -v -keystore my-release-key.keystore -alias mykey -keyalg RSA -keysize 2048 -validity 10000
查看生成的密鑰信息: $ keytool -list -keystore my-release-key.keystore -alias mykey -v or, $ keytool -list -keystore my-release-key.keystore -alias mykey -rfc (註:獲取Base64格式的公鑰證書,RFC 1421)
導出公鑰證書: $ keytool -export -keystore mystore -alias mykey -file my.der (註:二進制格式公鑰證書,DER) $ keytool -export -keystore mystore -alias mykey -file my.pem -rfc (註:Base64格式公鑰證書,PEM)
對APK進行簽名: $ jarsigner -verbose -keystore my-release-key.keystore my_application.apk mykey
驗證簽名: $ jarsigner -verify -verbose -certs my_application.apk
在進行Android二次開發時,有時需要把build/target/proct/security下面的公私鑰對轉換為keystore的形式,可以參考這篇文章:把Android源碼中的密碼對轉換為keystore的方法。
㈡ 怎樣查看android的apk文件的簽名
以下介紹查看自己的應用簽名及三方APK或系統APK簽名信息,包含其中的MD5、SHA1、SHA256值和簽名演算法等信息。
1、查看自己的應用簽名
可以通過兩種方式查看
(1) debug的apk通過Eclipse查看,如下圖:
可以查看簽名的MD5、SHA1、SHA256值及簽名演算法
㈢ 如何獲取android的數字簽名及SHA1
生成好apk後,選擇window屬性,
打開屬性面板,計入屬性面板
打開android選項下面的build面板
在build面板中有需要的sha1信息
創建網路應用中會使用的到
㈣ 怎樣查看android的apk文件的簽名
操作如下:
1,通過apktool工具解壓當前apk(比如:demo.apk),解壓後,會生成CERT.RSA文件
**** apktool d demo.apk。備註:通過這種方式解壓出來的Androidmenifest.xml文件可以通過文件編輯器打開查看
2,通過keytool命令獲取簽名信息
keytool -printcert -file C:-INFCERT.RSA所有者: CN=ryt, OU=ryt, O=ryt, L=nanjing, ST=china, C=cn發布者: CN=ryt, OU=ryt,O=ryt, L=nanjing, ST=china, C=cn
㈤ 如何獲取android app的簽名
方法/步驟
1
1 win7,開始菜單,搜索cmd
2
2 打開cmd
3
3 進入.android
4
4 使用命令keytool -list -v -keystore debug.keystore
5
5 需要安裝keytool,辦法是安裝jdk,網路搜索jdk並下載安裝;具體平台按實際情況選擇
6 安裝完畢,進入到jdk安裝bin目錄,並復制地址
7 回到cmd命令窗口,輸入cd + 空格,並在標題欄右側點擊粘貼
8 回車,進入到這個目錄
9 再次輸入keytool -list -v -keystore debug.keystore命令並回車,出現錯誤
10 先執行以下命令keytool -genkey -v -keystore debug.keystore -alias androiddebugkey -keyalg RSA -validity 10000
11 按提示輸入密碼(自己定),密保答案等;到後來需要重新再輸入密碼,生成完成
12 到keytool目錄下,看到debug.keystore已經生成成功
13 將這個文件復制到.android文件夾下
14 現在再次鍵入生成android簽名的命令:keytool -list -v -keystore debug.keystore,按提示輸入密碼,即可成功生成簽名
步驟閱讀
15 在標題欄右鍵選擇標記復制其中的SHA1的值,即為android的簽名
㈥ android 有apk 能得到簽名文件嗎
1)使用jdk的keytool工具生成簽名用的證書> keytool -genkey -v -alias CERT -keyalg RSA -keysize 2048 -validity 10000 -keystoreCERT.keystore 創建過程需要輸入一些標識信息和密碼,一些重要的參數值說明如下(根據自己的需要要進行相應的修改): CERT.keystore ---- 證書保存的文件名 CERT ---- 證書的別名 10000 ---- 10000天的有效期 2048 ---- 默認為1024 bits,Android 建議使用2048 bits或更高其他的詳細信息可以使用keytool -help查看幫助 證書生成後使用如下命令可以查看證書的信息:> keytool -list -alias CERT -keystore CERT.keystore
2)使用jdk的jarsigner工具對apk文件簽名> jarsigner -verbose -keystore CERT.keystore to_sign.apk CERT 簽名過程需要輸入證書的密碼,一些重要的參數值說明如下(根據自己的需要要進行相應的修改): CERT.keystore ---- 證書保存的文件名 CERT ---- 證書的別名 待簽名的apk文件根根目錄下如果有文件夾「META-INFO」,請先刪除(重新簽名就需要這樣做)。如果不想創建過程輸出太多信息,可以刪除「-verbose」 。上述簽名會直接覆蓋原來的文件,如果不想被覆蓋而簽名為另外的新文件 signed.akp,只需將 to_sign.apk 改為 -signedjar to_sign.apk signed.akp 即可。簽名後可以使用如下命令驗證是否簽名成功: > jarsigner -verify to_sign.apk 如果需要查看更詳細的驗證信息,可修改為:> jarsigner -certs -verbose -verify to_sign.apk
3)使用android sdk的zipalign工具優化已簽名的apk文件> zipalign -v 4 unaligned.apk aligned.apk 注意要在簽名後再zipalign。這個工具不是jdk自帶的,而是在%ANDROID_HOME%\tools\zipalign.exe。--ITJOB
㈦ android如何生成簽名apk文件
兩種方式,一種開發工具eclipse,還有就是用apktool工具。
I、只要Run As Android Application 過,到工作目錄的bin文件夾下就能找到與項目同名的apk文件。
II、
A.選中項目,右鍵=》Andoid Tools=》Export Unsigned Application Package,直接保存,未簽名的。
B.選中項目,右鍵=》Andoid Tools=》Export Signed Application Package,後面一步步的去做,簽過名的。
APK簽名主要有兩種:
1. 使用特殊的key簽名可以獲取到一些不同的許可權。
2. APK如果使用一個key簽名,發布時另一個key簽名的文件將無法安裝或覆蓋老的版本,這樣可以防止你已安裝的應用被惡意的第三方覆蓋或替換掉。
㈧ Android Studio 生成正式簽名apk(app-release.apk)的兩種方式
方式一:使用Android Studio生成
1.點擊Build->Generate,首次點擊可能會提示輸入操作系統密碼
2.彈出如下對話框,因為我們還沒有生成過keystore ,所以點擊Create new,新建keystore
3.填寫相關內容
Key store path 是 keystore的存放路徑
Alias 是別名,填寫APP名稱即可,別的名稱你記得住的也行
validity 是有效期限。
兩種密碼結合上一幅圖看
填寫完成後點擊ok
(記得備份,因為以後這個apk的新版本都是用這個keystore了)
4.彈出此窗口,自動填充好了這密碼和別名,Next
如果點擊了Remember passwords 可能需要輸入操作系統密碼。
5.填寫路徑,選擇簽名版本,點擊Finish
V2是Android 7.0出現的更安全更快速的簽名方式。
點擊ShowInExplore,或者自己打開路徑,就可以看到app-release.apk了
方式二:使用Gradle 生成
1.編輯 根目錄文件 gradle.properties
添加如下內容:
KEY_PATH=D:/Android/test1.jks
KEY_PASS=12345678
ALIAS_NAME=test
ALIAS_PASS=12345678
2.編輯 app/build.gradle 讀取指定的路徑密碼
在android 閉包中添加signingConfigs閉包:
android {
compileSdkVersion 25
buildToolsVersion "25.0.3"
defaultConfig {
applicationId "com.example.test"
minSdkVersion 16
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
signingConfigs {
config {
storeFile file(KEY_PATH)
storePassword KEY_PASS
keyAlias ALIAS_NAME
keyPassword ALIAS_PASS
}
}
在buildTypes release 閉包中添加 signingConfig signingConfigs.config 應用前面的簽名配置(ps:signingConfigs閉包必須在buildTypes閉包前)
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.config
}
}
3.點擊右側工具欄的Gradle->項目名->:app->Tasks->build
assemble 用於生成測試版和正式版的apk
assembleDebug 用於生成測試版apk
㈨ android怎樣獲取應用簽名信息
工具/原料
Android手機系統
Android如何查看應用簽名信息
1
1、查看自己的應用簽名可以通過兩種方式查看(1) debug的apk通過Eclipse查看,如下圖:
2
(2) 某個keystore簽名的應用,通過
Java
1
keytool -list -keystore E:\Trinea\keystore\appsearch.keystore
查看,會要求輸入簽名密碼,默認為android,如下圖:
3
2、查看三方應用或是系統應用簽名用winrar打開待查看的apk,將其中META-INF文件夾解壓出來,得到其中的CERT.RSA文件,通過
Java
1
keytool -printcert -file META-INF/CERT.RSA
命令列印證書信息,如微信證書信息如下圖:
4
可以查看簽名的MD5、SHA1、SHA256值及簽名演算法
㈩ android studio怎麼查看apk 簽名
1、查看自己的應用簽名
可以通過兩種方式查看
(1) debug的apk通過Eclipse查看,
eclipse-view-signatures
(2) 某個keystore簽名的應用,通過
Java
keytool -list -keystore E:\Trinea\keystore\appsearch.keystore
1
keytool -list -keystore E:\Trinea\keystore\appsearch.keystore
查看,會要求輸入簽名密碼,默認為android,
keytool-list-view-signatures
2、查看三方應用或是系統應用簽名
用winrar打開待查看的apk,將其中META-INF文件夾解壓出來,得到其中的CERT.RSA文件,通過
Java
keytool -printcert -file META-INF/CERT.RSA
keytool -printcert -file META-INF/CERT.RSA
命令列印證書信息,如微信證書信息
keytool-printcert-view-signatures
可以查看簽名的MD5、SHA1、SHA256值及簽名演算法
PS:網路地圖API需要簽名做為安全碼一部分實在有點不能理解,太麻煩了。