Android 系统
2019-03-10 本文已影响0人
就爱烫卷发
Android 系统
系统目录
- /system
- /system/app/ 放的是系统的APP(其实也就是权限高一点)
- /system/bin/ Linux自带的组件
- /system/build.prop/ 系统的属性文件。 可以当文件一样读取属性。
- /system/framework/ 框架层。基本上都是些。jar 文件,比如android.jar
- /system/lib/ 共享库 .so文件
- /system/usr/ 用户配置的数据
- /data/
- /data/data/ APP数据 用DDMS 可以查看SP等文件
- /data/system/ 手机的各种系统信息
- /data/misc/ VPN Wifi等信息
APP启动
-
热启动
已经启动过一次的APP直接走MainActivity(测量,布局,绘制)。
-
冷启动
没有启动的APP点击图标进行启动。安卓系统会从Zygote进程中fork创建出一个新的进程分配给该应用,之后会依次创建和初始化Application类、创建MainActivity类、加载主题样式Theme中的windowBackground。实际流程 Application的构造器方法——>attachBaseContext()——>onCreate()——>Activity的构造方法——>onCreate()——>配置主题中背景等属性——>onStart()——>onResume()——>测量布局绘制显示在界面上。
-
APP启动带来的问题
主要带来的问题就是白屏, 解决方法 一般就是添加启动页,或者让页面全透明,表面上是点击了没有反应,其实已经启动了,但是显示的还是桌面的问题。拿小米手机测试,系统APP就会这样显示还是桌面然后一下子跳到APP里面,支付宝就直接进入APP显示白屏,根本不抖。
-
启动优化
- APP启动的时候先走的是Application,所以在Application中不要做耗时的操作(I/O),不做业务,不在Application中用静态的方式保存数据。
- View 绘制优化因为绘制之前要测量假如有嵌套就要测量外部,再测量内部。也就是线性嵌套的缺点所以用相对的比较多,还有就是现在的默认布局ConstraintLayout。都是为了减少布局的嵌套来提高View的绘制。我们在代码中需要注意这个,还可以用include来引用布局,当然刚开始不要显示的布局我们用ViewStub来延迟加载。显示出来的方法就是找到这个布局,然后调用VISIBLE或者inflate(只能调用一次),GONE跟ViewStub区别就是GONE不管什么时候都会加载,只是不显示出来,而ViewStub是不用的时候不会加载。但是用过一次就被加载出来了,所以多次调用inflate 就会报错。树的结构不能超过10。
Android系统信息
- Android的系统信息,通常在android.os.Build跟SystemProperty 例如调用方式
System.getProperty("os.key");
。 - 获取应用信息--pm(PackageManager),
APP在启动的时候都会把App的Manifest.xml解析个遍,把里面的各种配置的信息都进行存储,这也就是为什么我们APP的组件需要注册的原因,这里在启动的时候就要进行整理,方便后面调用。而pm就可以获取到APP的基本信息,比如Icon,包名,名称,是否是系统应用等。 - AM(ActivityManager)一般运用于运行时候的应用信息,比如内存信息--MemoryInfo 可用,总内存大小,进程跟Service的查看。
Android安全
- Android 安全来讲第一就是我们的release包,签名认证。还有比较多的就是混肴加固,现在很多三方都会附带自己的混肴方法,旨在让我们的APP更加安全可靠。
- 反编译,基本上三个工具可以搞定,可以获取不少代码,但获得自己想要的核心,还是需要点时间与方法的。
常用工具
- adb 算是比较常用的Android 命令,这个就有很多了简单的来查看日志,安装APK,查看应用。附使用指南:
http://www.wanandroid.com/blog/show/2310 - aapt 查看APP信息 例,打开/sdk/build-tools/23.0.2(各个版本)/之后 进入cmd页面 然后输入 :aapt dump badging (此处拖入APK),然后得到一大串数据,复制出来然后分析。