面向开发者
一.运行时
1.更快的解释器
2.JIT
- 更快的安装时间
- 更少的磁盘空间
3.AndroidOS的部分在线更新
4.只编译hot代码
在N之前,M以下的版本恢复和更新系统,都会有一个比较长时间的应用升级过程(Android应用优化)。这过程中系统需要对应用进行完全编译,编译完成以后,有可能占用10、20M的包会变成30、40M。那么,在N中我们提供了一种机制,哪怕你的包体积有100M以上,也有一个非常快的安装过程。这一切得于在N中提供了一个解释器,最一开始运行的时候,不再是经过编译,而是由最新的解释器来负责,解释器运行完之后,会把运行过的代码放在一个成为profile的文件夹,之后当你的手机处于空闲或者充电的状态下,再进行一部分的编译。只有系统认为完全有必要的情况下,才会对整个的apk进行编译。这样的话,我们就避免了装一个100M、200M的包装3分钟的情况。
二.新的运行时类库
- ICU4J
- Unicode编码以及全球化支持
- 新的包名android.icu(避免与com.ibm.icu的冲突)
*新的功能接口
- java.util.function
java.util.stream
在N中我们把国际化的语言支持类库加入到系统里面,可以进一步的缩小包体积。另外,我们也引入了java 8,java 8 中有一些新的函数。如果想在N中使用java 8,必须详细的指定它,(编者注:此处缺少指定代码)。
还有些新的函数方法,像Lambdas(通过匿名类实现,向后兼容到Ginerbread)Vertex[] v = new Vertex[100]; //... Arrays.sort(v,(Vertex v1, Vertex v2) -> { return v1.length() - v2.length();}); Arrays.sort(v,(v1, v2) -> { return v1.length() - v2.length();}); Arrays.sort(v,VertexFactory.compareVertices);
另外,我们使用java中的接口,我们可以放入一些静态的默认实现,但需注意的是,它并不向后兼容。
public interface Renderable{ void draw(Canvas c); default bool isHardwareAccelerated(){ return false; } static int getMaxTextureSize(){ return 2048; } }
三.Renderscript
Single source
** 一个文件包括多个kernel** 通过kernel启动kernel
Renduction kernels
- 增强fp16的支持
在android手机里面比较高频的应用就是照相。而Renderscript就是帮助大家去做图片处理和视频处理的。在N中,我们增加了很多新的功能,比如在脚本中,用一个kernel去调用另外一个kernel,以避免,kernel脚本和java之间来回的频繁调用。
四.OpenGL ES 3.2
GLES 3.1 + Android extension pack
- Except EXT_texture_sRGB_decode
高级的blending equations
- Tessellation shaders
- Geometry shaders
- ASTC(LDR)
- Image atomics
- Floating point framebuffers
五.Vulkan
- 更底层,低开销,跨平台3DAPI
- 异步/多线程 命令产生
- Intermediate shader binary format(SPIR-V)
- 离线shaders编译
- 基于对象的API,无全局状态
- 内容管理和同步
- 无错误检查
六.adb shell
- 返回 remote process 退出状态
- 通过stdin输入参数($ cat README | adb shell wc -l)
- 增强的命令行工具(ls,etc.)
- 性能改进(pull,push)
七.NDK
- Clang 3.8
- GCC4.9
- 切换到Clang,GCC准备退休了!
- ARM工具缺省是arm7 arch
八.VR
在最新版本的android 7.1的系统上是有VR的API的,但需要硬件支持,所以大家在使用的时候,一定要记得检测硬件配置,并不是所有手机的硬件配置都支持这个API的。
Activity.setVrModeEnabled(boolean, ComponentName);
//ActivityManager.setVrThread(int tid);