android配置簽名
1. Android開發對apk文件進行簽名
對apk簽名的步驟(適用於找回apk,對空包進行簽名)
1.復制java的jdk,bin目錄的絕對路徑(如果是默認安裝應該和我的路徑差不多)C:\Program Files\Java\jdk1.8.0_111\bin
2.進入cmd窗口,進入bin目錄(如果是新手,輸入cd C:\Program Files\Java\jdk1.8.0_111\bin)
輸入命令 jarsigner -verbose -keystore d:\project\360Wallpaper.keystore -signedjar d:\qihusign.apk d:\Qihuunsign.apk QIHU360
將簽名修改成自己簽名的路徑 ,生成的apk文件的名字路徑修改一下,再輸入需要簽名的apk文件路徑,最後輸入自己簽名的別名就可以
(新手,歡迎指正)
2. Android Apk簽名工具
目前發布APK之前大家都會採用第三方加固方案來實現應用安全,鋒冊態
在Windows下 360有簽名工具可以直接簽名,騰訊樂固目前取消了簽名工具採用雲端加固,但是之後需要自己重簽名(因為加固之前會先去掉簽名)。
在Mac下沒有簽名工具,這就比較難受了。
一般來說,我們可以通過命令行來簽名Apk,打開命令行或者終端 輸入如下命令
但是這樣容易比較麻煩,還容易出錯,其實我們還可以使用腳本來完成自動簽名。
這里來簡單說明一下吧,我是採用python來實現的, Mac與Windows均可使用
本文python環境:python 3.8.2
sign.json 與signTool.py文件需要在同一文件夾下
其中sign.json 是簽名文件配置項(在工具中可以快捷選擇,銀源也可以不配置)
如下:
這樣就配置好了
signTool.py 是簽名工具,通過命姿侍令行或者終端運行該文件就行了
signTool.py文件如下:
運行如下:
配置好相關文件之後,點擊簽名就行了
好了,完成了一個簡單而又實用的工具
3. 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了。
4. Android apk 系統簽名
因工作需要對系統的wifi和乙太網進行配置,需要獲取到系統許可權以後才能進行操作,因此研究了下對apk 進行系統簽名以獲取系統許可權,其實本來打算如果root可以的話直接通過root的方式(設備已經root),後來找了半天發現沒有api進行修改,無奈只能進行系統簽名了,有童鞋知道root方式修改不妨告訴我一下。
這些文件可以問系統廠商獲取,如果是原生系統可以到系統源碼目錄下獲取。
如果報以下的錯誤 ,這時候就用到准備的libconscrypt_openjdk_jni.so 文件
為了檢測我們的應用是否已經簽名成功 可以獲取系統許可權,看看能否獲取到。
結果:
在上一種方式中,我們成功對我們的apk進行了系統簽名,並且能使用系統許可權,但是必須每次打包出apk再進行簽名 對調試很不方便,下面我們可以生成帶有系統簽名的簽名文件,在項目中使用,就不需要每次手動進行簽名。
bubble可以替換為自己喜歡的名稱,這一步要輸入密碼,我嘗試輸入其他不行,只能輸入android。
bubble 可替換為自己喜歡的password和alias
到這里 兩種對app進行系統簽名的方式完成,如有不足,歡迎指出.
5. 怎麼給Android應用程序簽名
1、准備工作
apk的簽名工作可以通過兩種方式來完成:
1)通過ADT提供的圖形化界面完成apk簽名;
2)完全通過DOS命令來完成apk簽名
我比較喜歡第2)種方式,所以下面將講解如何通過命令的方式完成apk簽名。
給apk簽名一共要用到3個工具,或者說3個命令,分別是:keytool、jarsigner和zipalign,下面是對這3個工具的簡單介紹:
1)keytool:生成數字證書,即密鑰,也就是上面說到的擴展名為.keystore的那類文件;
2)jarsigner:使用數字證書給apk文件簽名;
3)zipalign:對簽名後的apk進行優化,提高與Android系統交互的效率(Android SDK1.6版本開始包含此工具)
從這3個工具的作用也可以看出,這3個工具的使用順序。通常我們自己所開發的所有應用程序,都是使用同樣的簽名,即使用同一個數字證書,這就意味著:如果你是第一次做Android應用程序簽名,上面的3個工具都將用到;但如果你已經有數字證書了,以後再給其它apk簽名時,只需要用到jarsigner和zipalign就可以完成。
為了方便使用上面3個命令,首先需要將上面3個工具所在路徑添加到環境變數path中(我說的是為了方便使用,沒有說必須要這么做)。怎麼配置環境變數就不在此講解了,這里需要說一下這3個工具默認所在的路徑:
1)keytool:該工具位於jdk安裝路徑的bin目錄下;
2)jarsigner:該工具位於jdk安裝路徑的bin目錄下;
3)zipalign:該工具位於android-sdk-windows/tools/目錄下
不知道大家是否注意到keytool和jarsigner兩個工具是jdk自帶的,也就意味著生成數字證書和文件簽名不是Android的專利;另外從字面上理解jarsigner也能猜得出該工具主要是用來給jar文件簽名的。
2、生成未經簽名的apk文件
既然我們要自己對apk進行簽名,就不再需要ADT默認幫我們簽名了。如何得到一個未經簽名的apk文件呢?打開Eclipse,在Android工程名稱上點擊右鍵,依次選擇「Android Tools」 - 「Export Unsigned Application Package ...」,然後選擇一個存儲位置保存即可。這樣就得到了一個未經簽名的apk文件。
3、使用keytool工具生成數字證書
keytool -genkey -v -keystore liufeng.keystore -alias liufeng.keystore -keyalg RSA -validity 20000
說明:
1)keytool是工具名稱,-genkey意味著執行的是生成數字證書操作,-v表示將生成證書的詳細信息列印出來,顯示在dos窗口中;
2)-keystore liufeng.keystore 表示生成的數字證書的文件名為「liufeng.keystore」;
3)-alias liufeng.keystore 表示證書的別名為「liufeng.keystore」,當然可以不和上面的文件名一樣;
4)-keyalg RSA 表示生成密鑰文件所採用的演算法為RSA;
5)-validity 20000 表示該數字證書的有效期為20000天,意味著20000天之後該證書將失效
6. 如何發布android 應用程序,app增加簽名證書
Android系統要求,所有的程序經過數字簽名後才能安裝。Android系統使用這個證書來識別應用程序的作者,並且建立程序間的信任關系。證書不是用於用戶控制哪些程序可以安裝。證書不需要授權中心來簽名:Android應用程序上使用自己簽名的證書是完全允許且普遍的。
理解Android應用程序簽名有以下幾個重要點:
·所有的應用程序都必須簽名。系統不會安裝任何一個不簽名的程序。
·你可以使用自己的證書來簽名。不需要任何授權中心。
·當你要為最終用戶發布你的應用程序的時候,你必須簽入一個合適的密鑰。你不可以發布程序的時候還使用SDK工具簽入的DebugKey。
·系統只在安裝應用程序的時候檢測證書的有效期。如果應用程序在安裝之後證書失效了,那麼,應用程序還是可以正常工作。
·你可以使用標准工具——Keytool和Jarsigner——生成Key並簽名apk文件。
·一旦你為應用程序簽名了,一定要使用zipalign工具來優化最終的APK包。
Android系統不會安裝和運行沒有正確簽名的應用程序。這條規則適用於任何運行Android系統的地方,不管是真機還是模擬器。正是由於這個原因,你必須在模擬器或真機上運行/調試程序之前對程序進行簽名。
當你調試應用程序時,AndroidSDK工具替你對應用程序進行了簽名。Eclipse的ADT插件和Ant編譯工具都提供了兩種簽名模式——Debug模式和Release模式。
·當開發和測試時,你可以使用Debug模式。在Debug模式下,編譯工具使用內嵌在JDK中的Keytool工具來創建一個keystore和一個key(包含公認的名字和密碼)。在每次編譯的時候,使用這個DebugKey來為apk文件簽名。由於密碼是公認的,在每次編譯的時候,也不需要提示你輸入keystore和key密碼。
·當你的程序准備發布時,你必須在Release模式下,使用密鑰來為apk文件簽名。有以下兩種方式可以做到:
1.命令行中使用Keytool和Jarsigner。在這個方法中,首先需要編譯出一個未簽名的apk。然後使用Jarsigner(或相似的工具),用你的密鑰為apk手動簽名。如果你沒有合適的密鑰,你可以運行Keytool來手動生成自己的keystore/key。
2.使用ADT導出向導。如果你使用Eclipse/ADT插件進行開發,你可以使用導出向導來編譯程序,生成密鑰(如果需要),並為apk簽名,所有這些操作都在導出向導中。一旦你的程序簽名了,別忘了運行zipalign來為apk進行額外的優化。
簽名策略
應用程序簽名的某些方面可能會影響應用程序的開發,特別是你打算一起發布多個應用程序的時候。一般來說,推薦的策略是在整個應用程序壽命內,所有的程序簽上相同的證書。
以下有幾個應該這么做的原因:
·應用程序升級——當你對應用程序進行升級時,如果你想用戶平穩的升級,那麼,你就需要簽上相同的證書。當系統安裝一個升級應用程序時,如果新版本的證書與老版本的證書有匹配的話,那麼,系統才會允許進行升級。如果你沒有為版本簽上合適的證書,當你安裝時,你需要給應用程序指定一個新的包名——在這種情況下,用戶安裝的新版本,被當作是一個全新的應用程序。
·應用程序模塊化——如果應用程序請求的話,Android系統允許簽有相同證書的應用程序運行在相同的進程里,這樣,系統就會把它們看作是一個單一的應用程序。用這種方法配置應用程序,用戶可以選擇更新每個獨立的模塊。
·代碼/數據許可權共享——Android系統提供了基於簽名的許可權檢查,因此,如果應用程序間簽有特定的證書,那麼,它們之間可以共享功能。通過多個程序簽有相同的證書並且使用基於簽名的許可權檢查,你的程序可以以一種安全的方式共享代碼和數據。還有一個決定簽名策略的重要因素是:如何設定key的有效期。
·如果你計劃支持單個應用程序的升級,你需要確保你的key擁有一個超過期望的應用程序生命周期的有效期。推薦使用25年或更多的有效期。當你的key過期了,用戶也就不能平穩的更新到新版本了。
·如果你想給多個無關的應用程序簽上相同的key,那麼,你必須確保key的有效期超過所有應用程序所有版本的生命周期,包括將來有可能添加到這一陣營的程序。
·如果你想在AndroidMarket上發布你的程序,key的有效期必須在2033.10.22以後。Market伺服器強制這一要求,目前是保證用戶可以平穩的更新他們的程序。
當你設計應用程序時,一定要把這些點記在腦子里,並且使用一個合適的證書來為應用程序簽名。
簽名的基本設定
在你開始之前,你必須保證Keytool對SDK編譯工具來說是可利用的。多數情況下,你可以通過設置JAVA_HOME環境變數來告訴SDK編譯工具如何找到Keytool。另外,你還可以添加JDK中Keytool的路徑到PATH的變數里。
如果你在Linux上開發,並且使用GNU編譯器來編譯Java,那麼,請確保系統是使用JDK中的Keytool,而不是gcj。如果Keytool已經在你的PATH中,它有可能是對/usr/bin/keytool的符號鏈接。在這種情況下,檢查符號鏈接的目標,確保它是指向JDK中的Keytool。如果你打算對公眾釋放你的應用程序,你還需要Jarsigner工具。Jarsigner和Keytool都包含在JDK中。
Debug模式下簽名
Android編譯工具提供了Debug簽名模式,使得開發和調試應用程序更加容易,而且還滿足Android系統的簽名要求。當使用Debug模式編譯你的app時,SDK工具會調用Keytool工具自動創建一個Debug的keystore和key。然後,這個Debugkey會自動用於apk的簽名,這樣,你不需要使用你自己的key來為應用程序包簽名。
SDK工具使用預先定義好的名字/密碼來創建Debugkeystore/key:
·Keystore名字:「debug.keysotre」
·Keystore密碼:「android」
·Key別名:「androiddebugkey」
·Key密碼:「android」
·CN:「CN=AndroidDebug,O=Android,C=US」
如果需要的話,你可以改變Debugkeystore/key的位置和名字,或者提供一個自定義的Debugkeysotre/key。然而,任何自定義的Debugkeystore/key必須使用和默認Debugkey(上面描述的)相同的名字和密碼。(在Eclipse/ADT中,操作Windows>Preferences>Android>Build實現。)
注意:你不能將簽有Debug證書的應用程序發布給公眾。
Eclipse用戶
如果你在Eclipse/ADT下開發(並且已經按照上面描述的「簽名的基本設定」配置了Keytool),Debug模式下簽名默認是開啟的。當你運行或是調試應用程序時,ADT會使用Debug證書進行簽名,並運行zipalign,然後安裝到選擇的模擬器或是連接上的設備。整個過程不需要你參與,前提是ADT能訪問Keytool。
Ant用戶
如果你使用Ant來編譯你的apk文件,需要在ant命令中添加debug選項來開啟Debug簽名模式(假設你正在使用由android工具生成build.xml文件)。當你運行antdebug來編譯你的程序時,編譯腳本會生成一個keystore/key,並為apk進行簽名。然後腳本會使用zipalign工具對apk進行對齊處理。整個過程不需要你參與。閱讀「其它IDE下開發:Debug模式編譯」來了解更多的信息。
Debug證書過期
Debug模式下簽名用的證書(默認是Eclipse/ADT和Ant編譯)自從它創建之日起,1年後就會失效。
當證書失效時,你會得到一個編譯錯誤,在Ant編譯上,
錯誤如下:
debug:
[echo]Packagingbin/samples-debug.apk,andsigningitwithadebugkey...
[exec]DebugCertificateexpiredon8/4/083:43PM
在Eclipse/ADT中,Android控制台上你將會看到一個相似的錯誤。
為了解決這個問題,只需要刪掉debug.keystore文件即可。AVD默認存儲的位置在:~/.android/avd(OSX和Linux),C:DocumentsandSettings\.android(WindowsXP),C:Users\.android(WindowsVista)。
當下一次編譯的時候,編譯工具會重新生成一個新的keystore和Debugkey。
Release模式下簽名
當你的程序准備好釋放給其它用戶時,你必須:
1.獲取一個合適的密鑰
2.在Release模式下編譯程序
3.使用密鑰簽名程序
4.對齊APK包
如果你是使用Eclipse/ADT插件開發,你可以使用導出向導來完成編譯、簽名和對齊等操作。在整個過程中,導出向導甚至還可以生成一個新的keystore和密鑰。因此,如果你使用Eclipse,你可以直接跳到「使用EclipseADT編譯和簽名」。
獲取一個合適的密鑰為了進行程序的簽名,首先,你必須有一個合適的密鑰。密鑰指:
·個人持有。
·代表個人、公司或組織實體的身份。
·擁有一個有效期。有效期推薦超過25年。
如果你在AndroidMarket上發布你的程序,需要注意一點的是:程序的有效期需要在2033.10.22之後。你不能上傳一個應用程序,而它的key的有效期是在這個日期之前。
·不是由AndroidSDK工具生成的Debugkey。
如果你沒有一個合適的key,你一定要使用Keytool來生成一個。如「基本設定」中描述的,確保Keytool可用。
為了用Keytool生成一個key,使用keytool命令並傳入一些可選參數,如下表所示。
警告:確保密鑰的安全。一定要閱讀「安全儲存你的密鑰」中討論如何確保你的密鑰的安全以及這對你和用戶為何如此重要。尤其是,當你生成你的密鑰時,一定要為keystore和key使用強密碼。
7. 如何對Android的APP進行簽名
1.簽名的步驟
a.創建key
b.使用步驟a中產生的key對apk簽名
2.具體操作
方法一: 命令行下對apk簽名(原理)
創建key,需要用到keytool.exe (位於jdk1.6.0_24jrein目錄下),使用產生的key對apk簽名用到的是jarsigner.exe (位於jdk1.6.0_24in目錄下),把上兩個軟體所在的目錄添加到環境變數path後,打開cmd輸入
D:>keytool -genkey -alias demo.keystore -keyalg RSA -validity 40000 -keystore demo.keystore
/*說明:-genkey 產生密鑰
-alias demo.keystore 別名 demo.keystore
-keyalg RSA 使用RSA演算法對簽名加密
-validity 40000 有效期限4000天
-keystore demo.keystore */
D:>jarsigner -verbose -keystore demo.keystore -signedjar demo_signed.apk demo.apk demo.keystore
/*說明:-verbose 輸出簽名的詳細信息
-keystore demo.keystore 密鑰庫位置
-signedjar demor_signed.apk demo.apk demo.keystore 正式簽名,三個參數中依次為簽名後產生的文件demo_signed,要簽名的文件demo.apk和密鑰庫demo.keystore.*/
注意事項:android工程的bin目錄下的demo.apk默認是已經使用debug用戶簽名的,所以不能使用上述步驟對此文件再次簽名。正確步驟應該是:在工程點擊右鍵->Anroid Tools-Export Unsigned Application Package導出的apk採用上述步驟簽名。
方法二:使用Eclipse導出帶簽名的apk
Eclipse直接能導出帶簽名的最終apk,非常方便,推薦使用,步驟如下:
第一步:導出。
第二步:創建密鑰庫keystore,輸入密鑰庫導出位置和密碼,記住密碼,下次Use existing keystore會用到。
第三步:填寫密鑰庫信息,填寫一些apk文件的密碼,使用期限和組織單位的信息。
第四步:生成帶簽名的apk文件,到此就結束了。
第五步:如果下次發布版本的時候,使用前面生成的keystore再簽名。
第六步:Next,Next,結束!
方法三:使用IntelliJ IDEA導出帶簽名的apk
方法步驟基本和Eclipse相同,大概操作路徑是:菜單Tools->Andrdoid->Export signed apk。