導航:首頁 > 操作系統 > androidstudiov1v2

androidstudiov1v2

發布時間:2022-09-06 06:49:14

『壹』 android V1及V2簽名原理簡析

Android為了保證系統及應用的安全性,在安裝APK的時候需要校驗包的完整性,同時,對於覆蓋安裝的場景還要校驗新舊是否匹配,這兩者都是通過Android簽名機制來進行保證的,本文就簡單看下Android的簽名與校驗原理,分一下幾個部分分析下:

簽名是摘要與非對稱密鑰加密相相結合的產物,摘要就像內容的一個指紋信息,一旦內容被篡改,摘要就會改變,簽名是摘要的加密結果,摘要改變,簽名也會失效。Android APK簽名也是這個道理,如果APK簽名跟內容對應不起來,Android系統就認為APK內容被篡改了,從而拒絕安裝,以保證系統的安全性。目前Android有三種簽名V1、V2(N)、V3(P),本文只看前兩種V1跟V2,對於V3的輪密先不考慮。先看下只有V1簽名後APK的樣式:

再看下只有V2簽名的APK包樣式:

同時具有V1 V2簽名:

可以看到,如果只有V2簽名,那麼APK包內容幾乎是沒有改動的,META_INF中不會有新增文件,按Google官方文檔:在使用v2簽名方案進行簽名時,會在APK文件中插入一個APK簽名分塊,該分塊位於zip中央目錄部分之前並緊鄰該部分。在APK簽名分塊內, 簽名和簽名者身份信息會存儲在APK簽名方案v2分塊中,保證整個APK文件不可修改 ,如下圖:

而V1簽名是通過META-INF中的三個文件保證簽名及信息的完整性:

V1簽名是如何保證信息的完整性呢?V1簽名主要包含三部分內容,如果狹義上說簽名跟公鑰的話,僅僅在.rsa文件中,V1簽名的三個文件其實是一套機制,不能單單拿一個來說事,

如果對APK中的資源文件進行了替換,那麼該資源的摘要必定發生改變,如果沒有修改MANIFEST.MF中的信息,那麼在安裝時候V1校驗就會失敗,無法安裝,不過如果篡改文件的同時,也修改其MANIFEST.MF中的摘要值,那麼MANIFEST.MF校驗就可以繞過。

CERT.SF個人覺得有點像冗餘,更像對文件完整性的二次保證,同繞過MANIFEST.MF一樣,.SF校驗也很容易被繞過。

CERT.RSA與CERT.SF是相互對應的,兩者名字前綴必須一致,不知道算不算一個無聊的標准。看下CERT.RSA文件內容:

CERT.RSA文件裡面存儲了證書公鑰、過期日期、發行人、加密演算法等信息,根據公鑰及加密演算法,Android系統就能計算出CERT.SF的摘要信息,其嚴格的格式如下:

從CERT.RSA中,我們能獲的證書的指紋信息,在微信分享、第三方SDK申請的時候經常用到,其實就是公鑰+開發者信息的一個簽名:

除了CERT.RSA文件,其餘兩個簽名文件其實跟keystore沒什麼關系,主要是文件自身的摘要及二次摘要,用不同的keystore進行簽名,生成的MANIFEST.MF與CERT.SF都是一樣的,不同的只有CERT.RSA簽名文件。也就是說前兩者主要保證各個文件的完整性,CERT.RSA從整體上保證APK的來源及完整性,不過META_INF中的文件不在校驗范圍中,這也是V1的一個缺點。V2簽名又是如何保證信息的完整性呢?

前面說過V1簽名中文件的完整性很容易被繞過,可以理解 單個文件完整性校驗的意義並不是很大 ,安裝的時候反而耗時,不如採用更加簡單的便捷的校驗方式。V2簽名就不針對單個文件校驗了,而是 針對APK進行校驗 ,將APK分成1M的塊,對每個塊計算值摘要,之後針對所有摘要進行摘要,再利用摘要進行簽名。

也就是說,V2摘要簽名分兩級,第一級是對APK文件的1、3 、4 部分進行摘要,第二級是對第一級的摘要集合進行摘要,然後利用秘鑰進行簽名。安裝的時候,塊摘要可以並行處理,這樣可以提高校驗速度。

APK是先摘要,再簽名,先看下摘要的定義:Message Digest:摘要是對消息數據執行一個單向Hash,從而生成一個固定長度的Hash值,這個值就是消息摘要,至於常聽到的MD5、SHA1都是摘要演算法的一種。理論上說,摘要一定會有碰撞,但只要保證有限長度內碰撞率很低就可以,這樣就能利用摘要來保證消息的完整性,只要消息被篡改,摘要一定會發生改變。但是,如果消息跟摘要同時被修改,那就無從得知了。

而數字簽名是什麼呢(公鑰數字簽名),利用非對稱加密技術,通過私鑰對摘要進行加密,產生一個字元串,這個字元串+公鑰證書就可以看做消息的數字簽名,如RSA就是常用的非對稱加密演算法。在沒有私鑰的前提下,非對稱加密演算法能確保別人無法偽造簽名,因此數字簽名也是對發送者信息真實性的一個有效證明。不過由於Android的keystore證書是自簽名的,沒有第三方權威機構認證,用戶可以自行生成keystore,Android簽名方案無法保證APK不被二次簽名。

知道了摘要跟簽名的概念後,再來看看Android的簽名文件怎麼來的?如何影響原來APK包?通過sdk中的apksign來對一個APK進行簽名的命令如下:

其主要實現在 android/platform/tools/apksig 文件夾中,主體是ApkSigner.java的sign函數,函數比較長,分幾步分析

先來看這一步,ApkUtils.findZipSections,這個函數主要是解析APK文件,獲得ZIP格式的一些簡單信息,並返回一個ZipSections,

ZipSections包含了ZIP文件格式的一些信息,比如中央目錄信息、中央目錄結尾信息等,對比到zip文件格式如下:

獲取到 ZipSections之後,就可以進一步解析APK這個ZIP包,繼續走後面的簽名流程,

可以看到先進行了一個V2簽名的檢驗,這里是用來簽名,為什麼先檢驗了一次?第一次簽名的時候會直接走這個異常邏輯分支,重復簽名的時候才能獲到取之前的V2簽名,懷疑這里獲取V2簽名的目的應該是為了排除V2簽名,並獲取V2簽名以外的數據塊,因為簽名本身不能被算入到簽名中,之後會解析中央目錄區,構建一個DefaultApkSignerEngine用於簽名

先解析中央目錄區,獲取AndroidManifest文件,獲取minSdkVersion(影響簽名演算法),並構建DefaultApkSignerEngine,默認情況下V1 V2簽名都是打開的。

第五步與第六步的主要工作是:apk的預處理,包括目錄的一些排序之類的工作,應該是為了更高效處理簽名,預處理結束後,就開始簽名流程,首先做的是V1簽名(默認存在,除非主動關閉):

步驟7、8、9都可以看做是V1簽名的處理邏輯,主要在V1SchemeSigner中處理,其中包括創建META-INFO文件夾下的一些簽名文件,更新中央目錄、更新中央目錄結尾等,流程不復雜,不在贅述,簡單流程就是:

這里特殊提一下重復簽名的問題: 對一個已經V1簽名的APK再次V1簽名不會有任何問題 ,原理就是:再次簽名的時候,會排除之前的簽名文件。

可以看到目錄、META-INF文件夾下的文件、sf、rsa等結尾的文件都不會被V1簽名進行處理,所以這里不用擔心多次簽名的問題。接下來就是處理V2簽名。

V2SchemeSigner處理V2簽名,邏輯比較清晰,直接對V1簽名過的APK進行分塊摘要,再集合簽名,V2簽名不會改變之前V1簽名後的任何信息,簽名後,在中央目錄前添加V2簽名塊,並更新中央目錄結尾信息,因為V2簽名後,中央目錄的偏移會再次改變:

簽名校驗的過程可以看做簽名的逆向,只不過覆蓋安裝可能還要校驗公鑰及證書信息一致,否則覆蓋安裝會失敗。簽名校驗的入口在PackageManagerService的install里,安裝官方文檔,7.0以上的手機優先檢測V2簽名,如果V2簽名不存在,再校驗V1簽名,對於7.0以下的手機,不存在V2簽名校驗機制,只會校驗V1,所以,如果你的App的miniSdkVersion<24(N),那麼你的簽名方式必須內含V1簽名:

校驗流程就是簽名的逆向,了解簽名流程即可,本文不求甚解,有興趣自己去分析,只是額外提下覆蓋安裝,覆蓋安裝除了檢驗APK自己的完整性以外,還要校驗證書是否一致只有證書一致(同一個keystore簽名),才有可能覆蓋升級。覆蓋安裝同全新安裝相比較多了幾個校驗

這里只關心證書部分:

Android V1及V2簽名簽名原理簡析

僅供參考,歡迎指正

『貳』 Android studio北極狐版本沒有v1簽名

因為Android studio不支持v1簽名,
把V1和V2兩個選項全部勾選,就可以了,

『叄』 Android studio 如何創建apk簽名

1、打開軟體

找到「Build」選項

2、打開生成apk簽名的窗口

Build---->Generate Signed APK...

3、 選擇創建新的密鑰

Creata new...

4、 選擇密鑰存儲路徑,並為密鑰命名

填寫信息

5、設置密碼,填寫或更改信息

密碼請牢記,密碼請牢記,密碼請牢記(三遍了)

證書內容貌似可以空白

6、ok,然後,下一步

如果遇到下圖的情況,不用擔心,繼續點擊ok

問題解決辦法:https://www.jianshu.com/p/67c2972182a0

7、然後,下一步

8、選擇簽名版本

v1或者v1&v2 然後點擊finish 即可,找到剛才保存的路徑,即可找到簽名文件

建議選擇v1&v2

『肆』 Android Studio的Signature Versions選擇,分別是什麼意思

Signature Versions
簽名版本

『伍』 Android Studio 運行時模擬器部分出錯:求解答

問題一,解決辦法有如下這些:
重啟Eclipse,方法File—>Restart。
嘗試重啟ADB服務。
你可以在sdk目錄如c:\Program Files\Android\android-sdk-windows\platform-tools\下建一個叫restartADB.bat的windows批處理文件,文件中寫入:
adb kill-server && adb start-server
pause
需要重啟ADB,只要雙擊運行文件即可,注意adb.exe須在platform-tools目錄下,不然腳本可能運行不了
刪除Run Configuration,在Run—>Run Configuration中,選擇刪除已經配置的Activity。
嘗試刪除你的.android文件下的一些鏡像文件。按你問題提供的信息,應該在:C:\Users\lgs\.android\avd\androidAddresslist.avd/sdcard.img
C:\Users\lgs\.android\avd\androidAddresslist.avd/sdcard.img
C:\Users\lgs\.android\avd\androidAddresslist.avd/userdata-qemu.img

問題二,解決方法有:
1.重啟Eclipse,重啟ADB。
2.如果上面方法不行,看一下有沒有類似91手機助手,騰訊手機助手等工具正在開啟,有的話就結束掉這些工具對應的進程。
3.如果你的sdk還是2.3以下的舊版本,那麼就是把tools文件夾中的adb.exe復制到platform-tools文件夾中。構組成編輯
在IDEA的基礎上,Android Studio 提供[1] :
基於Gradle的構建支持
Android 專屬的重構和快速修復
提示工具以捕獲性能、可用性、版本兼容性等問題
支持ProGuard 和應用簽名
基於模板的向導來生成常用的 Android 應用設計和組件
功能強大的布局編輯器,可以讓你拖拉 UI 控制項並進行效果預覽
主要功能編輯
2013年
2013年5月16日,在I/O大會上,谷歌推出新的Android開發環境——Android Studio,並對開發者控制台進行了改進,增加了五個新的功能[2] 。
Android Studio是谷歌推出了新的Android開發環境,開發者可以在編寫程序的同時看到自己的應用在不同尺寸屏幕中的樣子。
谷歌對開發者控制台進行了改進,增加了五個新的功能,包括優化小貼士、應用翻譯服務、推薦跟蹤、營收曲線圖、用版測試和階段性展示。
1、優化小貼士:在主體中打開你的應用,點擊小貼士,會得到這樣的建議:為你的應用開發平板電腦版本。
2、應用翻譯服務:允許開發者直接在開發主體中獲得專業的翻譯。上傳你的需求,選擇翻譯,其會顯示翻譯方和價格,並在一周內發回譯本。
3、推薦跟蹤:允許開發者找出最有效的廣告
4、營收曲線圖:向開發者展示其應用營收,以國家進行劃分
5、試用版測試和階段性展示:開發者可以對應用進行測試,然後向測試用戶推出,測試結果不會對外公布。當一個版本的測試結束,開發者可以向特定比例用戶推出[3] 。
Android Studio這款開發工具被首次公布,這也是為了方便開發者基於Android開發。
首先解決的一個問題是多解析度。Android設備擁有大量不同尺寸的屏幕和解析度,根據新的Studio,開發者可以很方便的調整在各個解析度設備上的應用。
同時Studio還解決語言問題,多語言版本(但是沒有中文版本)、支持翻譯都讓開發者更適應全球開發環境。Studio還提供收入記錄功能。
最大的改變在於Beta測試的功能。Studio提供了Beta Testing,可以讓開發者很方便試運行[1] 。
2015年
2015年5月29日,在谷歌I/O開發者大會上,谷歌發布AndroidStudio 1.3版,支持C++編輯和查錯功能。Android Studio 1.3版開發碼代碼變得更加容易,速度提升,而且支持C++編輯和查錯功能[4] 。
版本更新編輯
Android Studio v0.3.1
Platform
Package
Size
MD5 Checksum
Windows
android-studio-bundle-132.883541-windows.exe
448245492 bytes

Mac OS X
android-studio-bundle-132.883541-mac.dmg
427317993 bytes

linux
android-studio-bundle-132.883541-linux.tgz
451652493 bytes

[5]
Android Studio v0.3.2
Platform Package Size MD5 Checksum
Windows android-studio-bundle-132.893413-windows.exe 484345454 bytes
Mac OS X android-studio-bundle-132.893413-mac.dmg 463332508 bytes
Linux android-studio-bundle-132.893413-linux.tgz 487694946 bytes
9f1306
100314b03ff5b691b94f154501


[6]
Android Studio v0.4.2
Platform Package Size MD5 Checksum
Windows android-studio-bundle-133.970939-windows.exe 51701 bytes
Mac OS X android-studio-bundle-133.970939-mac.dmg 491773471 bytes
Linux android-studio-bundle-133.970939-linux.tgz 516080363 bytes
[7]
Android Studio v0.4.6
Platform Package Size MD5 Checksum
Windows android-studio-bundle-133.1028713-windows.exe 519592042 bytes
Mac OS X android-studio-bundle-133.1028713-mac.dmg 497595811 bytes
Linux android-studio-bundle-133.1028713-linux.tgz 522177460 bytes
[8]
ANDROID STUDIO V0.8.0
Platform Package Size MD5 Checksum
Windows android-studio-bundle-135.1245622-windows.exe 380000036 bytes
Mac OS X android-studio-bundle-135.1245622-mac.dmg 368451923 bytes
Linux android-studio-bundle-135.1245622-linux.tgz 417756987 bytes
[9]
啟動解決方案編輯
先來到Android Studio的bin目錄下,修改studio.bat 第72行GOTO end 在它前面加上PAUSE 用於查看錯誤消息,進入cmd 然後指向Android Studio目錄下 運行studio.bat 可以查看錯誤消息,去修改android-studio\bin目錄下的studio.exe.vmoptions 去除第5行的 -XX:+UseCodeCacheFlushing,啟動成功
用記事本打開android-studio\bin 目錄下的studio.bat
將 SET VM_OPTIONS_FILE=%IDE_BIN_DIR%\studio%BITS%.exe.vmoptions
改為 SETVM_OPTIONS_FILE=%IDE_BIN_DIR%\studio%BITS%.exe啟動成功[10]
用文本工具打開
studio.bat
line25 to line 28:
SET JRE=%JDK%
IF EXIST "%JRE%\jre" SET JRE=%JDK%\jre
SET BITS=IF EXIST "%JRE%\lib\amd64" SET BITS=64
可以看到裡面設置軟體支持系統位數是64位,如果自己所用電腦是32位的 jre/lib目錄下只有i386文件,嘗試把
IF EXIST "%JRE%\lib\amd64" SET BITS=64 改為
IF EXIST "%JRE%\lib\i386" SET BITS=32[10]
檢查jdk路徑是否配置,1.6和1.7都沒有問題,jdk環境變數配置確保正確。[10]
Android Studio 0.2 Released
Jun 6, 2013 Google released Android Studio 0.1.3.[11]

『陸』 android studio高德地圖載入離線地圖如何做

一、注冊開發者賬號,新建新Key。
二、首先根據高德地圖開發者獲取key。
androidstudio獲取SHA1方法:打開androidstudio的Termina(alt+F12),輸入命令:keytool -v -list -keystore keystore文件路徑(默認路徑 C:\Users\用戶名\.android debug.keystore),默認密碼:android,即可獲取SHA1。
PackageName為app中build。gradle中的applicationId。
三、打開AndroidStudio-->Build-->Generate Signed APK-->Create new...,創建新的key,按照圖示創建即可,要記下Alias的名字和密碼,然後選擇第V2-->finish即可。
四、新建工程,將下載的SDK的jar包復制到工程libs下,並add as library(復制→粘貼到文件夾下即可)。
五、3D地圖需要添加so庫:在main目錄下創建jniLibs,將下載的so庫文件拷貝到這個目錄下。

『柒』 如何在Android studio中使用之前eclispe中用的簽名文件

在簽名的時候選擇這錢使用的簽名文件,輸入密碼,點擊選擇以前簽名時的對應名稱(會自動檢測簽名文件信息的,所以直接能看到),之後按照提示操作就行了。如果你的android studio是2.3版本,需要選擇v1還是v2方式,選擇v1就行

『捌』 android studio寫的程序在安卓7.1提示安裝包異常,安卓8.1安裝後無法打開怎麼解決

你好,請問安裝包是否進行了簽名?或者簽名的時候,是否選擇了V1和V2。
APK包沒有簽名,在7.1以上系統會報異常。
如果是簽名的,請同時使用V1,V2方式簽名。V1簽名只能在7.0以下系統安裝,v2簽名可以在7.0以上系統安裝。

『玖』 androidstudio2.3打包apkv1和v2的區別

1、選中需要打包的mole,然後點擊菜單「Build——>Build APK」,在本地打包debug和debug-unsigned版本的APK
2、選中「Generate Signed APK」生成簽名的APK

『拾』 android studio中的drawable-v24怎麼創建

我們一般將APP的icon放在minmap文件夾下,其他圖片資源放在drawable文件夾下。下面我們看下AndroidStudio下如何創建drawable、drawable-hdpi、drawable-mdpi、drawable-xhdpi、drawable-xxhdpi。
1、切換到Project視圖下,找到對應moudle的res文件夾,右擊「res」--》 「new」--》「Android resource directory」,彈出「New Resource Directory」對話框。
2、按照上圖的一二三步驟,點擊第三步後,會出現一下內容,選擇要添加drawable的解析度,點擊「ok」按鈕即可。

與androidstudiov1v2相關的資料

熱點內容
php如何解析xml文件 瀏覽:698
如何改變appstore的語言 瀏覽:458
javahtmlxml 瀏覽:26
單片機啟動文件 瀏覽:809
橙app如何開啟聊天 瀏覽:899
訪問伺服器公網地址 瀏覽:666
pdf列印底色去掉 瀏覽:463
java快遞介面 瀏覽:397
哪個app可以教新爸爸 瀏覽:210
如何查看伺服器系統版本信息 瀏覽:524
成都市土地出讓金演算法 瀏覽:702
鋼筋加密標記 瀏覽:577
ps中擴展功能在文件夾的什麼位置 瀏覽:904
雙極壓縮機為什麼要先高壓 瀏覽:527
蘋果手機伺服器填什麼 瀏覽:832
android移動動畫效果 瀏覽:691
電子和伺服器是什麼意思 瀏覽:692
phpurl中文亂碼問題 瀏覽:894
程序員那麼可愛大結局陸漓產子 瀏覽:538
java如何從雲伺服器讀取本地文件 瀏覽:924