记录一些学习到的 Android 相关知识。
1.application 中的 android:name 属性用来指定 app 启动时关联的 application,默认关联的为 android.app.Application。也可以将其设置为一个我们自己编辑的 class,该 class 将被 application 下的所有 activity 共享。
2.android.intent.action.MAIN 用于决定程序最先启动的 Activity,android.intent.category.LAUNCHER 用于决定程序是否显示在程序列表(桌面)里。没有 android.intent.action.MAIN,能够安装程序,但桌面不会显示启动器,程序也无法运行。
没有 android.intent.category.LAUNCHER,程序可以正常运行,但是桌面不会显示启动器。一个 apk 中有多个 activity 中存在 android.intent.action.MAIN 和 android.intent.category.LAUNCHER,桌面上会显示复数个应用图标,但是对应的为同一应用文件。
3. 在 Android 中使用 android.os.build 来获取设备相关信息,而 android.os.build 通过 SystemProperties.getString 来获取静态字段值,Systemproperties 是 android.os 中标记为 hide 的类,无法直接访问,但是可以通过反射的方式获取。该类使用 native 方法 native_get 来后去系统属性值,该方法的源代码在 android_os_SystemProperties.cpp 文件中。
4. 将 android.intent.category.LAUNCHER 更改为 -.INFO 或 -.FRAMEWORK_INSTRUMENTATION_TEST, 能够实现在桌面上隐藏程序同时不影响程序正常运行。并且因为没有了 android.inntent.category.LAUNCHER 作为特征,一些 apk 分析工具就无法定位 MainActivity。
5. 可以将 Androidmanifest 中的一些非必要标签的资源 ID 改为 0,从而屏蔽实现该标签的作用。