简洁与优雅的语法 空安全特性 函数式编程,支持高阶函数、lambda Kotlin 内联函数 与 Java 的互操作性 强大的类型推断 协程支持 lazy 委托 object 单例模式 区间表达式 现代的开发工具支持 本文首发地址 https://h89.cn/archives/301.html 最新更新地址 https://gitee.com/chenjim/chenjimblog 在当今的编程领域,Kotlin 正逐渐崭露头角,成为众多开发者青睐的语言。那么,Kotlin 究竟有哪些令人瞩目的优势呢? 简洁与优雅的语法 Kotlin 摒弃了一些在 Java 中较为繁琐的语法结构,大大提高了代码的可读性和可维护性。例如,它简化了变量声明,使用 val 表示不可变变量,var 表示可变变量,让开发者能够更清晰地表达变量的性质。同时,Kotlin 还引入

- 阅读剩余部分 -

日志抓取 结合日志与源码分析 systemServer zygote创建时序图 一般应用 zygote 创建时序图 向 zygote socket 发送数据时序图 本文首发地址 https://h89.cn/archives/298.html 最新更新地址 https://gitee.com/chenjim/chenjimblog 本文主要结合日志和代码看安卓 14 中 Zygote 启动相关流程 日志抓取 先抓一份开机日志 adb reboot && adb wait-for-device shell logcat -b all > all.log 过滤出 zygote 相关日志 cat all.log | grep -i Zygote > all.Zygote.log 以上完整日志文件 https://gitee.c

- 阅读剩余部分 -

1、app请求Vsync部分 2、Vsync时间到了后触发timeCallback 3、app的vsync继续请求和sf的vsync申请 4、app vsync结束部分 原文 App-Sf的Vsync部分源码流程结合perfetto-systrace分析 本节将使用perfetto的trace来巩固Vsync的源码分析的部分的流程。 具体抓取trace方法及相关操作建议: a.抓取trace期间需要主要不能让画面一直刷新,因为这样一直刷新不方便看vsync的结束和开始 b.建议选着桌面,滑动桌面一下后停止1左右,再继续滑动,尽量让抓取的trace可以有如下图的间隔效果 c.需要在surfaceflinger中额外补充自己加的一些ATRACE代码方便追踪流程 1、app请求Vsync部分 这里我们回忆一下app的Vsync的申

- 阅读剩余部分 -

如何区分源码中 main system events 日志 查看 Activity 生命周期日志 分析 events 日志在源码中位置 应用进程ID助分析具体应用 ProtoLog 动态开关日志 如何快速定位相关流程的代码位置 本文首发地址 https://h89.cn/archives/285.html 最新更新地址 https://gitee.com/chenjim/chenjimblog 从 adb常用命令详解--提升开发效率利器 中,我们已经知晓了 adb logcat 分析过滤关键日志的方法。本文进一步介绍日常日志分析的一些小技巧。 如何区分源码中 main system events 日志 他们有如下对应关系 类别 源码中打印日志的方式 main android.util.Log.i(...) system an

- 阅读剩余部分 -

文件管理 截屏与录屏 logcat 使用 dumpsys 相关 ps 相关 am 相关 pm 相关 wm 相关 setprop 设置属性 input 相关 adb connect 远程无线调试 其它 本文首发地址 https://h89.cn/archives/281.html 最新更新地址 https://gitee.com/chenjim/chenjimblog 博主 Linux 使用较多,平时开发使用各种命令也比较多,之前写过一篇博文 安卓软件开发常用命令集合,其中 adb 相关命令最多,这里把 adb 相关抽离、补充完善。adb shell ls /system/bin/ 列出的命令均可以通过 adb shell 执行,本文主要介绍博主经常用到的命令使用及功能 文件管理 导出文件到电脑 adb pull /system/priv-app/ p-ap

- 阅读剩余部分 -

下载安卓源码,因为墙存在,只有特殊工具才能从 Google 下载 当然也可以从 tsinghua-AOSP 下载整个仓库 很多时候,我们并不需下载所有的源码,我们只需要下载部分,或者某个版本 本文列出安卓源码的百度网盘下载链接,理论可以提高下载效率 android14-r1 链接: https://pan.baidu.com/s/10AjtdOprSSLCpJKy4DkQJA?pwd=1234 提取码: 1234 链接: https://pan.baidu.com/s/1iqRIJpMstQXolDA6EDBQVw?pwd=nqec 提取码: nqec 解压命令 cat android14-r11.tar.bz2.a* |tar jxv Android14 编译记录 android 13 r44 链接: https://pan.baidu.com/s/1KFnzJeEUCKVD

- 阅读剩余部分 -

字符串加密 图片加密 如何避免应用被重新签名分发 APK 加壳的方案简析 DEX加密原理及实现 本文首发地址:https://h89.cn/archives/212.html 最新更新地址:https://gitee.com/chenjim/chenjimblog 通过 前文 介绍,我们知晓了如何使用代码混淆和资源混淆加固我们的APK,以及如何分析混淆后Crash日志问题。本文将进一步介绍APP加固的相关方法,比如字符串加密、资源加密、签名效验、DEX加密等。 字符串加密 反编译 ProguardDemo.apk 可以看到字符串chenjim,如下图,可能会泄露我们的重要信息 StringFog 提供了一个很好的方案: 编译时对所有字符串进行加密,运行时进行解密,可以自定义加解密算法。 图片加密 通过反编译后,我们能看到所有使用图片的资源文件,

- 阅读剩余部分 -

为什么要开启混淆 如何开启代码混淆 如何开启资源压缩 代码混淆配置 代码混淆后,Crash 问题定位 结尾 本文首发地址:https://h89.cn/archives/211.html 最新更新地址:https://gitee.com/chenjim/chenjimblog 为什么要开启混淆 先上一个 简单示例 MainActivity.kt class MainActivity : AppCompatActivity() { private val p = Person("chenjim", 18) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentVi

- 阅读剩余部分 -