Android系統簡介


Android安卓)是一個基於Linux內核的開放源代碼移動操作系統,由谷歌(Google)成立的開放手持設備聯盟持續領導與開發,主要設計用於觸摸屏移動設備如智能手機和平板電腦與其他便攜式設備。

可從Android開源項目獲取源代碼,Android系統及相關工具、sdk的源代碼都托管在Google的git服務器android Git repositories上。程序員可以從Android開發者上獲取工具和幫助文檔,在github上也有一個android repositories,上面放了一些Sample項目

 

Android版本 (wiki:中文  en

平台版本 API級別 VERSION_CODE 發布日期 版本代號 Runtime 備注
Android 11.0 30   2020.2.19   ART(Android Runtime) 平台亮點
Android 10.0 29 Q 2019.9.3   平台亮點
Android 9 28 P 2018.8.6

Pie(派) 

平台亮點
Android 8.1 27 O_MR1  2017.12.5 Oreo(奧利奧) 平台亮點
Android 8.0 26 O 2017.8.21 平台亮點

Android 7.1.1Android 7.1

25 N_MR1 2016.10.4 Nougat(牛軋糖) 平台亮點
Android 7.0 24 N 2016.8.22

平台亮點

7.0開始支持Vulkan

Android 6.0 23 M 2015.10.5 Marshmallow(棉花糖) 平台亮點
Android 5.1 22 LOLLIPOP_MR1 2015.3.9 Lollipop(棒棒糖)

平台亮點

5.0開始支持OpenGL ES 3.1

5.0開始支持ARM64

Android 5.0 21 LOLLIPOP 2014.11.3 ART 2.1.0
Android 4.4W 20 KITKAT_WATCH   Kitkat(奇巧巧克力)   僅限 KitKat for Wearables
Android 4.4 19 KITKAT 2013.10.31 Dalvik(JIT)及ART1.6.0 平台亮點
Android 4.3 18 JELLY_BEAN_MR2 2013.7.24 Jelly Bean(果凍豆) Dalvik(JIT)

平台亮點

開始支持OpenGL ES 3.0

Android 4.24.2.2

17 JELLY_BEAN_MR1 2012.11.13 平台亮點

Android 4.14.1.1

16 JELLY_BEAN 2012.7.9 平台亮點

Android 4.0.34.0.4

15 ICE_CREAM_SANDWICH_MR1 2011.10.9 Ice Cream Sandwich(冰淇淋三明治) 平台亮點

Android 4.04.0.14.0.2

14 ICE_CREAM_SANDWICH  
Android 3.2 13 HONEYCOMB_MR2   Honeycomb(蜂巢)  
Android 3.1.x 12 HONEYCOMB_MR1   平台亮點
Android 3.0.x 11 HONEYCOMB   平台亮點

Android 2.3.4Android 2.3.3

10 GINGERBREAD_MR1 2011.2.9 Gingerbread(姜餅) Dalvik(JIT) 1.4.0 平台亮點

Android 2.3.2Android 2.3.1

Android 2.3

9 GINGERBREAD   Dalvik(JIT)
Android 2.2.x 8 FROYO   Froyo(優格冰淇淋) Dalvik(JIT)

平台亮點

2.2開始支持OpenGL ES 2.0

Android 2.1.x 7 ECLAIR_MR1   Eclair(閃電泡芙) Dalvik虛擬機 平台亮點
Android 2.0.1 6 ECLAIR_0_1  
Android 2.0 5 ECLAIR  
Android 1.6 4 DONUT   Donut(甜甜圈) 平台亮點
Android 1.5 3 CUPCAKE   Cupcake(紙杯蛋糕) 平台亮點
Android 1.1 2 BASE_1_1      
Android 1.0 1 BASE      

注1:OpenGL ES支持說明詳見 https://developer.android.com/guide/topics/graphics/opengl?hl=zh-cn 

注2:64位支持說明詳見 https://developer.android.com/distribute/best-practices/develop/64-bit?hl=zh-cn

 

Android從誕生起,編譯器將java代碼編譯成自己的字節碼而並非java字節碼(如.dex文件,即dalvik executable),並在運行時使用基於寄存器的Dalvik虛擬機(JVM虛擬機是基於棧的)對字節碼解釋執行

Android2.2開始,Dalvik虛擬機增加了即時編譯(JIT)技術。在應用程序啟動時,JIT通過進行連續的性能分析來優化程序代碼的執行,在程序運行的過程中,Dalvik虛擬機在不斷的進行將字節碼編譯成機器碼的工作。

Android4.4,ART(Android Runtime)對外發布;Android5.0及之后的版本取代Dalvik虛擬機

ART能夠把應用程序的字節碼轉換為機器碼,是Android所使用的一種新的虛擬機。

它與Dalvik的主要不同在於:Dalvik采用的是JIT技術,而ART采用Ahead-of-time(AOT)技術。

ART引入了AOT這種預編譯技術,在應用程序安裝的過程中,ART就已經將所有的字節碼重新編譯成了機器碼。應用程序運行過程中無需進行實時的編譯工作,只需要進行直接調用。

因此,ART極大的提高了應用程序的運行效率,同時也減少了手機的電量消耗,提高了移動設備的續航能力,在垃圾回收等機制上也有了較大的提升。

為了保證向下兼容,ART使用了相同的Dalvik字節碼文件(dex),即在應用程序目錄下保留了dex文件供舊程序調用,然而.odex文件則替換成了可執行與可鏈接格式(ELF)可執行文件。

一旦一個程序被ART的dex2oat命令編譯,那么這個程序將會指通過ELF可執行文件來運行。

因此,相對於Dalvik虛擬機模式,ART模式下Android應用程序的安裝需要消耗更多的時間,同時也會占用更大的內部儲存空間,用於儲存編譯后的代碼。

 

截至2020.4.10,各版本Android系統的占比情況如下:

注:Android系統的占比情況,2021年時無法從dashboard上看到了。但可從Android Studio的Create New Project面板(菜單File -- New -- New Project...)上Help me choose中查看。

 

截至2020.4.10,各屏幕尺寸密度的設備占比:

 

截至2020.4.10,OpenGL ES的設備占比

注1:支持某個特定的 OpenGL ES 版本還意味着支持所有級別低於該版本的版本(如:支持版本 2.0 也意味着支持版本 1.1)

注2:apk支持的OpenGL ES版本配置在AndroidManifest.xml中,為16.16格式,0x00030001即為3.1

<?xml version="1.0" encoding="utf-8" standalone="no"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" android:compileSdkVersion="29" android:compileSdkVersionCodename="10" android:installLocation="internalOnly" package="com.tencent.mf.uam" platformBuildVersionCode="29" platformBuildVersionName="10">
    <uses-feature android:glEsVersion="0x00030001" android:required="true"/>

。。。 。。。

 

截至2020.8.30,Valkan版本占比

 

Android架構圖

 

硬件

Android的主要硬件平台為ARM架構中文   包括ARMv7及ARMv8-A ),在更高端版本的Android中也正式支持x86及x86-64的架構。非官方的Android-x86的項目在得到官方正式支持之前為x86架構提供支持。

ARM架構,過去稱作高級精簡指令集機器(英語:Advanced RISC Machine,更早稱作Acorn精簡指令集機器,Acorn RISC Machine),是一個精簡指令集(RISC)處理器架構家族,其廣泛地使用在許多嵌入式系統設計。

ARM處理器非常適用於移動通信領域,符合其主要設計目標為低成本、高性能、低耗電的特性。

Application Profile為Cortex-A 系列,Real-time Profile為Cortex-R 系列,Microcontroller Profile為 ARM Cortex-M 系列

Android手機使用是ARM Cortex-A系列

架構 位數 處理器家族
ARMv7-A 32 ARM Cortex-A5, ARM Cortex-A7, ARM Cortex-A8, ARM Cortex-A9, ARM Cortex-A12, ARM Cortex-A15, ARM Cortex-A17
ARMv8-A 32 ARM Cortex-A32
64/32 ARM Cortex-A35,ARM Cortex-A53, ARM Cortex-A57,ARM Cortex-A72,ARM Cortex-A73
64 ARM Cortex-A34
ARMv8.2-A 64/32 ARM Cortex-A55,ARM Cortex-A75,ARM Cortex-A76,ARM Cortex-A77
64 ARM Cortex-A65, ARM Cortex-A65AE

32位 vs 64位

32位架構 64/32位架構

字節序:可配置大小端序(默認小端序)

指令編碼長度:32位

通用寄存器:15個32位整數寄存器;R15是程序計數器(在較老的架構設計中為26位定址) ,R14作為鏈接寄存器(link register)

浮點寄存器:最多32個64位寄存器

字節序:可配置大小端序(默認小端序)

指令編碼長度:AArch64/A64(64位)、AArch32/A32(32位);兼容ARMv7用戶空間

通用寄存器:31個64位整數寄存器

浮點寄存器:32個128位寄存器

 

armeabiv-v7a:第7代及以上的 ARM 處理器。2011年15月以后的生產的大部分Android設備都使用它。

arm64-v8a:第8代、64位ARM處理器,最新的手機基本都是該架構。

armeabi:第5代、第6代的ARM處理器,早期的手機用的比較多。

x86:平板、模擬器用得比較多。

x86_64:64位的平板或模擬器。 

 

Android 4.4的建議是至少需要512MB的RAM,Android 7.1最低要求為1GB的RAM,最好是2GB及以上;而對於“低RAM”設備,340MB是必需的最低容量

Android 4.4需要32位的ARMv7, MIPS或x86的架構處理器(后兩者是非官方的),以及與OpenGL ES 2.0兼容的圖形處理器(GPU)一同使用

Android支持OpenGL ES 1.1、2.0、3.0、3.1、3.2,從Android 7.0開始支持Vulkan (API)

 

劉海屏、全面屏

https://www.jianshu.com/p/f04f066a626d 

Android 劉海屏適配方案 

Android劉海屏、水滴屏全面屏適配方案

Android 劉海屏和全面屏適配

Android劉海屏適配方案總結

 

Android中的sdk version

minSdkVersion <= targetSdkVersion <= compileSdkVersion

min sdk version:最低可運行的SDK版本。低於這個版本的Android系統,app會安裝失敗。

target sdk version:app的目標SDK版本。若未設置,其默認值與為minSdkVersion指定的值相等。
Android SDK是向后兼容的,在高於targetSdkVersion的Android系統運行時,會根據targetSdkVersion走兼容邏輯,盡量保證app正確運行。但若系統收緊了權限,也會導致調用失敗(如:Android 10.0【API Level:29】徹底禁止第三方應用獲取設備的IMEI碼)。
在低於targetSdkVersion的Android系統運行時,若使用了targetSdkVersion才有的功能,會出現函數找不到導致app崩潰或異常。為了保證穩定性,app開發者需要在業務邏輯上做保護。

注:minSdkVersion、targetSdkVersion的設置保存在apk包的apktool.yml文件中

compile sdk version:編譯app所用的SDK版本。 建議使用target sdk version保持一致

注:compileSdkVersion的設置保存在apk包的AndroidManifest.xml文件中

 

Google Play商店

① 自 2021年8月起,新應用將需要使用 Android App Bundle 才能在 Google Play 中發布。大小超過 150MB 的新應用可以使用 Play Asset Delivery 或 Play Feature Delivery   詳見:New Android App Bundle and target API level requirements in 2021

     UE4中使用GooglePAD模塊來支持Android App Bundle功能(需要Android 5.0及以上),因此應用上Google Play才會用到

② 每次上傳apk版本versionCode需要遞增  上限為:2100000000

③ targetSdkVersion(目標 API 級別)限制

注:更多關於Google Play的限制詳見 https://support.google.com/googleplay/android-developer/answer/9859152?visit_id=637495963402959650-3407822884&rd=1#targetsdk

 

Android開發

https://www.cnblogs.com/nebie/p/9145627.html

https://www.androiddevtools.cn/#

 

1. JDK

 

2. Android SDK

platform-tools

windows版本:platform-tools-latest-windows.zip

mac版本:platform-tools-latest-darwin.zip

linux版本:platform-tools-latest-linux.zip

②  build-tools

https://dl-ssl.google.com/android/repository/build-tools_r27.0.3-windows.zip

 

③  tools

 

platforms

 

⑤ emulator(模擬器)

 

⑥ gradle-plugin(gradle插件)

gradle插件與Gradle版本的對應關系如下: 

 

可以在 Android Studio 的 File > Project Structure > Project 菜單中指定 Gradle 版本。
也可以通過在 gradle/wrapper/gradle-wrapper.properties 文件中修改 Gradle 分發引用來指定。
以下示例在 gradle-wrapper.properties 文件中將 Gradle 的版本設置為 6.1.1

...
distributionUrl = https\://services.gradle.org/distributions/gradle-6.1.1-all.zip
...

 

3. NDK

最新版本:https://developer.android.com/ndk/downloads

老版本:https://developer.android.com/ndk/downloads/older_releases 

一些功能對NDK版本的要求說明:

OpenGL ES 3.1需要NDK-21

 

4. apache-Maven

 

5. apache-ant

 

6. gradle

 

7. IDE

Android Studio

Eclipse + ADT插件

 

SDK管理器

sdkmanager:命令行SDK管理工具

https://developer.android.com/studio/command-line/sdkmanager

Android SDK Manager

https://developer.android.com/studio/intro/update.html#sdk-manager

NVIDIA CodeWorks for Android

https://developer.nvidia.com/codeworks-android

https://docs.nvidia.com/gameworks/content/developertools/mobile/codeworks_android/codeworks_install.htm

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM