如何区分源码中 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 android

- 阅读剩余部分 -

文件管理 截屏与录屏 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-app 推送文

- 阅读剩余部分 -

下载安卓源码,因为墙存在,只有特殊工具才能从 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/1KFnzJeEUCKVD0WDci

- 阅读剩余部分 -

字符串加密 图片加密 如何避免应用被重新签名分发 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) setContentView(R.

- 阅读剩余部分 -

本文首发地址 https://h89.cn/archives/201.html 本文最新更新地址 https://gitee.com/chenjim/chenjimblog 慢动作英文称呼SlowMotion,也就是高帧率录像,如果以正常30帧播放,就能看到慢动作效果,可以用来拍摄快速移动物体的瞬间,比如鱼儿的游动、终点冲刺结果等。本文主要介绍慢动作在安卓相机应用中如何实现。 获取高速录像支持的尺寸和帧率 可以通过如下获取支持的 Size 和 FPS cameraManager.cameraIdList.forEach { id -> val characteristics = cameraManager.getCameraCharacteristics(id) val capabilities = characteristics.get(CameraCharac

- 阅读剩余部分 -

本地首发地址 https://h89.cn/archives/189.html 最新更新地址 https://gitee.com/chenjim/chenjimblog 原文地址 https://www.romainguy.dev/posts/2024/speeding-up-isblank/ 最近在优化 Jetpack Compose 运行时的部分时,偶然发现了一个看似无害的 API isBlank() 。如果调用的字符串为空或仅由空格字符组成,则此 API 将返回 true 。 但它真的无害吗?让我们看一下 JVM 实现,以更好地了解它的作用: public actual fun CharSequence.isBlank(): Boolean = length == 0 || indices.all { this[it].isWhit

- 阅读剩余部分 -

前文回顾 音频处理 留个小思考 总结 本文首发地址 https://h89.cn/archives/146.html 最新更新地址 https://gitee.com/chenjim/chenjimblog 源码地址: Gitee: OpenGLRecorder 通过 前文 我们知道了如何采集 Camera 视频,叠加水印、贴纸保存为MP4,但是录制视频并没有音频,本文进一步介绍添加音频录制实现。 前文回顾 前文介绍的视频处理流程及主要类如下 CameraGlView 用来显示Camera预览的View CameraGlView extends GLSurfaceView 创建 SurfaceTexture 来显示 Camera 预览,参见 CameraRenderer.java mSurfaceTexture = new Surface

- 阅读剩余部分 -