溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Android的基礎(chǔ)知識(shí)有哪些

發(fā)布時(shí)間:2022-01-12 14:29:15 來源:億速云 閱讀:141 作者:iii 欄目:大數(shù)據(jù)

本篇內(nèi)容介紹了“Android的基礎(chǔ)知識(shí)有哪些”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

常見加密算法
編碼
  • Base64

  1. 所有的數(shù)據(jù)都能被編碼為只用65個(gè)字符就能表示的文本。
    標(biāo)準(zhǔn)的Base64每行為76個(gè)字符,每行末尾添加一個(gè)回車換行符(\r\n)。不論每行是否滿76個(gè)字符,都要添加一個(gè)回車換行符。

  2. 65字符:A~Z a~z 0~9 + / =
    URL Base64算法中,為了安全,會(huì)把 + 替換成 - ,把 / 替換成 _
    = 有時(shí)候用 ~ 或 . 代替

  3. Base64的應(yīng)用
    密鑰,密文,圖片,數(shù)據(jù)簡(jiǎn)單加密或者預(yù)處理

  4. Base64編碼解碼與btoa、atob

  • Hex

  1. 二進(jìn)制數(shù)據(jù)最常用的一種表示方式。

  2. 用0-9 a-f 16個(gè)字符表示。每個(gè)十六進(jìn)制字符代表4bit。也就是2個(gè)十六進(jìn)制字符代表一個(gè)字節(jié)。

  3. 在實(shí)際應(yīng)用中,尤其在密鑰初始化的時(shí)候,一定要分清楚自己傳進(jìn)去的密鑰是哪種方式編碼的,采用對(duì)應(yīng)方式解析,才能得到正確的結(jié)果 

單向散列函數(shù)(消息摘要算法)
  • 不管明文多長(zhǎng),散列后的密文定長(zhǎng)

  • 明文不一樣,散列后結(jié)果一定不一樣

  • 散列后的密文不可逆

  • 一般用于校驗(yàn)數(shù)據(jù)完整性、簽名 sign

  • 由于密文不可逆,所以后臺(tái)無法還原,也就是說他要驗(yàn)證,會(huì)在后臺(tái)以跟前臺(tái)一樣的方式去重新簽名一遍。也就是說他會(huì)把源數(shù)據(jù)和簽名后的值一起提交到后臺(tái)。所以我們要保證在簽名時(shí)候的數(shù)據(jù)和提交上去的源數(shù)據(jù)一致,這種算法特喜歡在內(nèi)部加入時(shí)間戳

  • 常見算法

    • MD5

    • SHA1

    • SHA256

    • SHA512

    • HmacMD5

    • HmacSHA1

    • HmacSHA256

加密算法

加密和解密的過程是可逆的

  • 對(duì)稱加密算法

    • 根據(jù)密鑰長(zhǎng)度不同又分為AES-128 AES-192 AES-256

    • 其中AES-192 AES-256在Java中使用需獲取無政策限制權(quán)限文件

    • 加密/解密使用相同的密鑰

    • DES 數(shù)據(jù)加密標(biāo)準(zhǔn)

    • 3DES    TripleDES   DESede

    • AES 高級(jí)加密標(biāo)準(zhǔn)

    • CryptoJS提供ECB,CBC,CFB,OFB,CTR五種模式填充提供NoPadding ZeroPadding Pkcs7(Pkcs5) Iso10126 Iso97971 AnsiX923

  • 非對(duì)稱加密算法

    • 使用公鑰加密,使用私鑰解密

    • 公鑰是公開的,私鑰保密

    • 加密處理安全,但是性能極差,單次加密長(zhǎng)度有限制

    • RSA既可用于數(shù)據(jù)交換,也可用于數(shù)據(jù)校驗(yàn)

    • 數(shù)據(jù)校驗(yàn)通常結(jié)合消息摘要算法 MD5withRSA 等

    • 兩種加密算法常見結(jié)合套路

    • 隨機(jī)生成密鑰

    • 密鑰用于AES/DES/3DES加密數(shù)據(jù)

    • RSA對(duì)密鑰加密

    • 提交加密后的密鑰和加密后的數(shù)據(jù)給服務(wù)器

    • pkcs1padding 明文最大字節(jié)數(shù)為密鑰字節(jié)數(shù)-11密文與密鑰等長(zhǎng)

    • NoPadding    明文最大字節(jié)數(shù)為密鑰字節(jié)數(shù)     密文與密鑰等長(zhǎng)

    • RSA

 
APK基本結(jié)構(gòu)
  • lib:各種平臺(tái)下使用的對(duì)應(yīng)的so文件

  • META-INF文件夾:存放工程一些屬性文件

    • CERT.RSA:公鑰和加密算法描述

    • CERT.SF:加密文件,他是使用私鑰對(duì)摘要明文加密后得到的密文信息,只有使用私鑰配對(duì)的公鑰才能解密該文件

    • MANIFEST.MF:程序清單文件,他包含包中所有文件的摘要明文

  • resource.arsc:資源加密(語言包)對(duì)res目錄下的資源的一個(gè)索引文件,保存了原工程中strings.xml等文件內(nèi)容

    • drawable:圖片

    • layout:布局

    • menu:菜單

  • AndriodMainfest.xml:清單文件(圖標(biāo)、界面、權(quán)限、入口),安卓工程的基礎(chǔ)配置屬性文件。

  • classes.dex:java代碼編譯得到的Dalvik VM能直接執(zhí)行的文件

  • assets:資源文件(圖片、音頻、數(shù)據(jù)庫、網(wǎng)頁、配置文件等)

  • res:資源文件,需要編譯

 
res目錄與assets目錄區(qū)別在哪?
  • res目錄下的資源文件在編譯時(shí)會(huì)自動(dòng)生成索引文件(R.java),在java代碼中用R.xxx.yyy來引用

  • asset目錄下的資源文件不需要生成索引,在java代碼中需要用AssetManager中訪問。

  • 一般來說,除了音頻和視頻資源(需要放在raw或asset下),用java開發(fā)的安卓工程使用到的資源文件都會(huì)放到res下;使用c++游戲引擎的資源文件均需要放在asset下。

 
JVM、DVM與ART
  • JVM:Java虛擬機(jī),運(yùn)行的是.java文件編譯后的.class文件

  • DVM:Android4.4及以前使用的都是Dalvik虛擬機(jī),我們知道Apk在打包的過程中會(huì)先將java等源碼通過javac編譯成.class文件,但是我們的Dalvik虛擬機(jī)只會(huì)執(zhí)行.dex文件,這個(gè)時(shí)候dx會(huì)將.class文件轉(zhuǎn)換成Dalvik虛擬機(jī)執(zhí)行的.dex文件。Dalvik虛擬機(jī)在啟動(dòng)的時(shí)候會(huì)先將.dex文件轉(zhuǎn)換成快速運(yùn)行的機(jī)器碼,又因?yàn)?5535這個(gè)問題,導(dǎo)致我們?cè)趹?yīng)用冷啟動(dòng)的時(shí)候有一個(gè)合包的過程,最后導(dǎo)致的一個(gè)結(jié)果就是我們的app啟動(dòng)慢,這就是Dalvik虛擬機(jī)的JIT特性。

  • Dalvik是google專門為安卓操作系統(tǒng)設(shè)計(jì)的一個(gè)虛擬機(jī),經(jīng)過深度的優(yōu)化,雖然安卓上的程序是使用java來開發(fā)的,但是Dalvik和標(biāo)準(zhǔn)的java虛擬機(jī)JVM還是兩回事,Dalvik VM是基于寄存器的,而JVM是基于棧的;Dalvik有專屬的文件執(zhí)行格式dex,JVM則執(zhí)行的是java字節(jié)碼。

  • 通過Dalvik的字節(jié)碼我們不能直接看到原來的邏輯代碼,這是需要借助如Apktool或dex2jar+jd-gui工具來幫助查看,但是注意的是最終我們修改APK需要操作的是.smali文件,而不是導(dǎo)出來的java文件重新編譯。

  • ART:ART虛擬機(jī)是在Android5.0才開始使用的Android虛擬機(jī),ART虛擬機(jī)必須要兼容Dalvik虛擬機(jī)的特性,但是ART有一個(gè)很好的特性AOT(ahead of time),這個(gè)特性就是我們?cè)诎惭bAPK的時(shí)候就將dex直接處理成可直接供ART虛擬機(jī)使用的機(jī)器碼,ART虛擬機(jī)將.dex文件轉(zhuǎn)換成可直接運(yùn)行的.oat文件,ART虛擬機(jī)天生支持多dex,所以也不會(huì)有一個(gè)合包的過程,所以ART虛擬機(jī)會(huì)很大的提升APP冷啟動(dòng)速度。
    Xposed hook的是Java代碼,所以Xposed不支持5.0以及以上系統(tǒng)。

 
安卓分區(qū)

Android通常有以下分區(qū)(用df 來查看分區(qū)情況)

  • System分區(qū): 就是我們刷ROM的分區(qū)

  • Data分區(qū):  分區(qū)就是我們裝APK的分區(qū)

  • Catch分區(qū):  是緩存分區(qū)

  • SDCard分區(qū): 就是掛載的SD卡。

data分區(qū)常見目錄:app、system、data、local、misc

  1. data/data目錄
    存放的是所有APK程序數(shù)據(jù)的目錄,每個(gè)APK對(duì)就一個(gè)自己的Data目錄,就是在data/data/目錄下,會(huì)產(chǎn)生一個(gè)跟 Package一樣的目錄。比如有一個(gè)APK,它的包名叫com.test.hello,則在data/data/目錄下會(huì)有一個(gè) com.test.hello的目錄,這個(gè)APK只能操作此目錄,不能操作其它APK的目錄

  2. data/app目錄
    用戶安裝的APK放在這里。我們?nèi)绻袮PK放入這個(gè)文件夾下面的話,就算安裝好了。這就叫靜默安裝。不用管APK文件里面的lib目錄下的庫文件,系統(tǒng)會(huì)自動(dòng)幫我們放入調(diào)用庫

  3. data/misc目錄
    保存WIFI帳號(hào),VPN設(shè)置信息等。比如保存了一個(gè)WIFI連接帳號(hào),則此目錄下的WIFI目錄下面wpa_supplicant.conf可以查看到

system分區(qū)常用目錄:app、lib、xbin、bin、media、framework

  1. system/app目錄
    存放系統(tǒng)自帶的APK。將APK放入到System/app目錄下,也是靜默安裝

  2. system/lib目錄
    存放APK程序用到的庫文件

  3. system/bin目錄和system/xbin目錄
    存放的是shell命令

  4. system/framework目錄
    啟用Android系統(tǒng)所用到框架,如一些jar文件

sd卡目錄:/sdcard    /mnt/sdcard

“Android的基礎(chǔ)知識(shí)有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI