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

- 阅读剩余部分 -

引言 updateTexImage 简单使用 SurfaceTexture 初始化相关源码分析 Surface 绘制流程源码分析 createBufferQueue 源码分析 SurfaceTexture 之 updateTexImage 源码分析 结尾 本文首发地址 https://h89.cn/archives/140.html 最新更新地址 https://gitee.com/chenjim/chenjimblog 引言 在Android系统中,SurfaceTexture 是一个特殊的类,它将来自硬件纹理缓冲区(如相机预览流或视频解码输出)的图像数据转换为 OpenGL ES 可以直接使用的纹理。updateTexImage() 方法是 SurfaceTexture 类的核心方法之一,此方法的主要作用是从 SurfaceTex

- 阅读剩余部分 -

Markdown Not Support JCEF Version Control 中 Local Changes 不显示 自动同步不同电脑 Android Studio 配置 自动格式化代码 自动导入包 一些好用插件 本文收发地址 https://h89.cn/archives/130.html 最新更新地址 https://gitee.com/chenjim/chenjimblog Android Studio 是安卓开发的最强工具,本文主要介绍一些个人配置,以提高我们的开发效率 Markdown Not Support JCEF 问题 Your environment does not support JCEF,can not use Mardkdown Editor Preview Android Studio 默认运行时暂不支持JCEF,无法使用mar

- 阅读剩余部分 -

前言 视频采集 视频编码 视频编码写入 结语 本文首发地址 https://blog.csdn.net/CSqingchen/article/details/134896821 最新更新地址 https://gitee.com/chenjim/chenjimblog 前言 通过 文2 我们知道了 MediaRecorder 各个接口 Framework 中的实现。 通过 文3 我们 知道了 MediaRecorder 底层音频的采集、编码、写入文件等详细流程。 本文主要介绍 MediaRecorder 视频的采集、编码等相关流程。 视频采集 在 文1 我们知道了如何使用 MediaRecorder 录制音频,那么如何同时录制声音和视频呢,可以参见 Demo Camera2Video,这里不再贴代码。 通过此示例,我们知道录制视频需要如下设置

- 阅读剩余部分 -