可可西

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 13.0 33   2022.8.15     平台亮点
Android 12L 32   2022.3.7      
Android 12.0 31   2021.10.4     平台亮点
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

注:OpenGL ES 3.1开始支持compute shader

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

注3:Compute Shader在Android上运行要求是GLSL Version 1.50的设备(OpenGL ES 3.1及以上设备大部分满足此条件,少数3.1的设备不满足)。

 

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,Vulkan版本占比

 

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

https://www.oracle.com/cis/java/technologies/downloads/ 

 

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   

              https://github.com/android/ndk/wiki/Unsupported-Downloads

 

2018年,NDK r18版本发布,去除了GCC,仅使用Clang来编译C/C++。

注:NDK r17版本还带着GCC,其后的NDK版本,就没有GCC了

进入NDK的toolchains\llvm\prebuilt\windows-x86_64\bin目录,执行clang.exe --version命令,即可查看详细的Clang版本信息:

NDK版本 Clang版本 GCC相关工具
r17c

Android (4691093 based on r316199) clang version 6.0.2

(https://android.googlesource.com/toolchain/clang 183abd29fc496f55536e7d904e0abae47888fc7f)

(https://android.googlesource.com/toolchain/llvm 34361f192e41ed6e4e8f9aca80a4ea7e9856f327) (based on LLVM 6.0.2svn)

包含完整gcc编译器、ld链接器和其他工具

r18b

Android (4751641 based on r328903) clang version 7.0.2

(https://android.googlesource.com/toolchain/clang 003100370607242ddd5815e4a043907ea9004281)

(https://android.googlesource.com/toolchain/llvm 1d739ffb0366421d383e04ff80ec2ee591315116) (based on LLVM 7.0.2svn)

包含ld链接器和其他工具

r19c

Android (5058415 based on r339409) clang version 8.0.2

(https://android.googlesource.com/toolchain/clang 40173bab62ec746213857d083c0e8b0abb568790)

(https://android.googlesource.com/toolchain/llvm 7a6618d69e7e8111e1d49dc9e7813767c5ca756a) (based on LLVM 8.0.2svn)

包含ld链接器和其他工具

r20b

Android (5220042 based on r346389c) clang version 8.0.7

(https://android.googlesource.com/toolchain/clang b55f2d4ebfd35bf643d27dbca1bb228957008617)

(https://android.googlesource.com/toolchain/llvm 3c393fe7a7e13b0fba4ac75a01aa683d7a5b11cd) (based on LLVM 8.0.7svn)

包含ld链接器和其他工具

r21b

Android (6317467 based on r365631c1) clang version 9.0.8

(https://android.googlesource.com/toolchain/llvm-project e0caee08e5f09b374a27a676d04978c81fcb1928) (based on LLVM 9.0.8svn)

包含ld链接器和其他工具

r21e

Android (7019983 based on r365631c3) clang version 9.0.9

(https://android.googlesource.com/toolchain/llvm-project a2a1e703c0edb03ba29944e529ccbf457742737b) (based on LLVM 9.0.9svn)

包含ld链接器和其他工具

r22b

Android (7155654, based on r399163b1) clang version 11.0.5

(https://android.googlesource.com/toolchain/llvm-project 87f1315dfbea7c137aa2e6d362dbb457e388158d)

包含ld链接器和其他工具

r23c

Android (8481493, based on r416183c2) clang version 12.0.9

(https://android.googlesource.com/toolchain/llvm-project c935d99d7cf2016289302412d708641d52d2f7ee)

不包含任何工具

r24

Android (8075178, based on r437112b) clang version 14.0.1

(https://android.googlesource.com/toolchain/llvm-project 8671348b81b95fc603505dfc881b45103bee1731)

不包含任何工具
r25b

Android (8490178, based on r450784d) clang version 14.0.6

(https://android.googlesource.com/toolchain/llvm-project 4c603efb0cca074e9238af8b4106c30add4418f6)

不包含任何工具

 

一些功能对NDK版本的要求说明:

OpenGL ES 3.1需要NDK-21

 

4. apache-Maven

 

5. apache-ant

 

6. gradle

 

注:apache-Maven、apache-ant、gradle都是Android包构建工具。

 

7. IDE

Android Studio

Eclipse + ADT插件

 

删除DNS缓存

How to Clear DNS Cache on Android Devices

Flushing your DNS cache on iPhone or Android 

 

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

posted on 2020-04-30 23:58  可可西  阅读(3618)  评论(0编辑  收藏  举报

导航