Android(安卓)是一個基於Linux內核的開放源代碼移動操作系統,由谷歌(Google)成立的開放手持設備聯盟持續領導與開發,主要設計用於觸摸屏移動設備如智能手機和平板電腦與其他便攜式設備。
可從Android開源項目獲取源代碼,Android系統及相關工具、sdk的源代碼都托管在Google的git服務器android Git repositories上。程序員可以從Android開發者上獲取工具和幫助文檔,在github上也有一個android repositories,上面放了一些Sample項目
平台版本 | 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 | 平台亮點 | ||
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 |
17 | JELLY_BEAN_MR1 | 2012.11.13 | 平台亮點 | |||
16 | JELLY_BEAN | 2012.7.9 | 平台亮點 | |||
15 | ICE_CREAM_SANDWICH_MR1 | 2011.10.9 | Ice Cream Sandwich(冰淇淋三明治) | 平台亮點 | ||
14 | ICE_CREAM_SANDWICH | |||||
Android 3.2 | 13 | HONEYCOMB_MR2 | Honeycomb(蜂巢) | |||
Android 3.1.x | 12 | HONEYCOMB_MR1 | 平台亮點 | |||
Android 3.0.x | 11 | HONEYCOMB | 平台亮點 | |||
10 | GINGERBREAD_MR1 | 2011.2.9 | Gingerbread(姜餅) | Dalvik(JIT) 1.4.0 | 平台亮點 | |
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,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的主要硬件平台為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中的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
windows版本:platform-tools-latest-windows.zip
mac版本:platform-tools-latest-darwin.zip
linux版本:platform-tools-latest-linux.zip
https://dl-ssl.google.com/android/repository/build-tools_r27.0.3-windows.zip
③ tools
⑤ 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