前言:这篇文章是一篇转载文章用,用来为后面的一些文章做铺垫。
转载链接为 今日头条 ANR 优化实践系列 - 监控工具与分析思路,如有侵权,请在 GitHub 提 Issue 联系我。
安卓 RemoteCallbackList 的使用 (系统服务篇)
本文字数: 2.3k 阅读时长 ≈ 8 分钟
安卓 RemoteCallbackList 的使用 (应用篇)
本文字数: 3k 阅读时长 ≈ 11 分钟
通过aidl,我们可以实现client(后称客户端)和server(服务端)的双向通信,有时候server和client处于不同的进程当中,如果client意外退出,server再向client发送消息的话,就有可能导致server端也退出。
安卓提供了 RemoteCallbackList 来为我们隐式解决了这种问题。
下面来看一个示范。
使用 workflow 来中转 http 请求
本文字数: 652 阅读时长 ≈ 2 分钟
Sogou 的 workflow 是一个 C++ 编写的简单易用的 web 框架,这里我对官方的 http_proxy 做一点简单修改,来实现抓包。
通常的抓包是设置代理服务器来实现的,我这里不通过代理,而是 http_proxy 作为一个中继一样的存在。
把官方的 http_proxy 修改成下面的样子
C/C++ 中,modulus,privateExponent, pulbicExponent 如何转换成 RSA密钥
本文字数: 498 阅读时长 ≈ 2 分钟
p.s: 以下内容均以 openssl 实现。
RSA 密钥的存储方式有很多,某些情况下,我们直接保存密钥的 modulus(n),publicExponent(e),privateExponent(d),使用的时候再将它们转换成 RSA 密钥。下面来讲讲在 C/C++ 环境中,如何把这几个大整数转换成 RSA 密钥来用。
根据 openssl 的文档,openssl提供了这样一个函数
为 Android 编译 openssl 的注意事项
本文字数: 532 阅读时长 ≈ 2 分钟
以下载链接 https://www.openssl.org/source/openssl-1.1.1o.tar.gz 为例
下载解压之后,查看根目录的 NOTES.ANDROID,其中有
1 | export ANDROID_NDK_HOME=/home/whoever/Android/android-sdk/ndk/20.0.5594570 |
这里就是最直接的编译方式了。但是这样编译之后,会有一个坑
使用 openssl 进行 AES128/ECB/PKCS5Padding 加解密
本文字数: 424 阅读时长 ≈ 2 分钟
在 java 上进行 AES128/ECB/PKCS5Padding 加密解密是很简单的
Android Native Service 示例 第二篇
本文字数: 2.6k 阅读时长 ≈ 9 分钟
在安卓里面实现一个 native 的系统服务,不仅可以通过定义 Interface ,还可以通过直接继承 BBinder 来实现。本篇文章即讲述如何通过继承 Bbinder 来实现一个系统服务,并且讲述如何在 native 上使用 binder 的 linktoDeath 机制
Android Native Service 示例
本文字数: 3k 阅读时长 ≈ 11 分钟
安卓系统上添加系统服务,可以通过 android.os.ServiceManager 来添加使用 java 实现的系统服务,放在 SytemServer 进程(内置在源码编译)或者放在 app 进程(需要是系统签名的系统应用)。
由于运行在 SystemServer 进程或者运行在app进程,某些特殊操作就面临权限不足的问题,比如操作kernel的节点,这个时候就需要使用使用 root 权限运行的进程了。(当然严格来说,通过java实现的服务,同样可以以 root 权限运行,比如将相应的代码编译成 jar,开机之后通过 appprocess 运行)。
C++ ini 实现
本文字数: 2.1k 阅读时长 ≈ 8 分钟
首先是从 https://github.com/benhoyt/inih 取用的 ini 读取类头文件