自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 收藏
  • 关注

原创 记录一次Android11系统证书安装失败

从设置里面安装证书,提示报错。一种是只有公钥的证书,系统提示需要私钥。一种是带私钥的证书,系统反复提示输入密码。

2024-08-23 11:33:25 578

原创 Android ECDH

ECDH

2023-06-29 17:32:37 260

原创 ServiceConnection没有回调的一次排查记录

bind service 没有回调排查

2022-12-28 10:35:47 1214 1

原创 Sqlite 断电数据丢失问题排查

sqlite SynchronousMode 模式影响

2022-12-13 11:50:14 1838

原创 Android app启动流程

app启动,四大组件启动

2022-09-27 16:47:07 1179

原创 Android 检查自己进程持有的FD

进程打开的FD

2022-09-22 17:49:04 1048

原创 Android RunTime执行指令

android Runtime 执行

2022-07-12 15:55:08 1216

原创 Android 支持的系统的share uid

系统支持的sharedUersid

2022-07-06 12:10:03 1163

原创 加密填充AES和RSA

加密填充只针对 aes 和rsa 加密。rsa签名是另外一个填充方式。其他加密算法使用不多。为什么需要填充?为什么需要知道填充?为什么需要填充?RSA和AES虽然属于两种截然不同的加密类型,但它们都属于块密码的应用范畴。1.AES的块大小是固定的16字节,RSA的块大小根据密钥长度和填充方式而定。由于AES每次只能处理固定长度的数据(即一个块大小),当数据大小不是块大小的整数倍时,就需要对原始数据进行填充,因此填充对AES来说是技术原理上的需求。因为无法保证数据一定是对齐的。2.RSA则不

2022-05-30 18:13:49 1035

原创 Android NetworkPolicyManagerService

Android 网络策略管理工作中遇到一个问题,App在后台运行获取当前网络链接状态,网络是BLOCKED状态。跟踪下这个状态的产生。问题出现在Android7,我看的源码是Android 12.获取当前网络状态 ConnectivityManager mConnectivityManager = mContext.getSystemService(ConnectivityManager.class);NetworkInfo info = mConnectivityManager.getAct

2022-01-25 15:24:50 2993

原创 Android 动态权限申请过程

Android 动态权限申请过程 --Android121.申请申请前提,manifest一定要有,没有是不会通过的。动态申请代码: public final void requestPermissions(@NonNull String[] permissions, int requestCode) 启动一个供用户选择的授权界面: final Intent intent = getPackageManager().buildRequestPermissionsIntent(permis

2022-01-21 18:14:29 3670

原创 Android流量统计分析

Android流量统计分析本文只做为个人分析留档。使用NetworkStatsManager statsManager = (NetworkStatsManager) getSystemService(Context.NETWORK_STATS_SERVICE);tatsManager.querySummary(ConnectivityManager.TYPE_MOBILE, "", startTime, endTime);statsManager.querySummaryForDevice(Co

2021-12-21 17:09:48 2888

原创 android jdk9 JAXB异常解决

jdk 升级,Android编译报错,解决方案// Add missing dependencies for JDK 9+if (JavaVersion.current().ordinal() >= JavaVersion.VERSION_1_9.ordinal()) { // If you're using @AutoValue or any libs that requires javax.annotation (like Dagger) compileOnly 'com.gi

2021-08-31 16:01:22 321

原创 Android 广播发送

广播接收逻辑结论先说结论:动态注册,如果不是有序广播,循环发送完,不等待上一个广播的结果。静态注册,每次都会重新生成一个receiver的实例,而且会被当成有序广播处理,必须等到上一个处理完成,才会继续下一个。因为静态注册,会涉及到进程创建。上代码广播接收的处理逻辑是在发送的部分。入口是在AMS的broadcastIntentLocked这个最终开始的地方。添加接收者首先是粘性广播,需要留存。这部分先不看。如果不是只发送动态注册if ((intent.getFlags()&Inte

2021-07-29 14:18:24 628

原创 对称加密和非对称加密

加密技术本文只是自我记录,不做任何技术参考。数据加密,大体分为两类:对称加密和非对称加密。对称加密根据密码,大体可以分成:分组密码和流密码。对称的分组密码主要有:DES和AES.非对称主要是RSA和椭圆。流密码暂时没看明白,后续补充非对称加密并不比对称加密安全。加密的破解只取决于密钥的长度。对称加密对称加密,就是加密和解密使用的是相同的密码。主要是置换和混淆变更。1.DESDES历史不介绍,DES是标准的Feistel 密码结构。Feistel 密码结构密码大概结构如下:加密流程:令F

2021-07-20 14:15:37 627

原创 android 11 后台启动service不能访问camera(摄像头)解决

Android 11 后台启动service不能访问camera(摄像头)解决Android 11增加了权限,在后台启动一个service,无法访问摄像头。解决方案解决方案分为两类:1.启动者有前台activity;2启动者本身是一个后台服务。启动者有前台activity在需要启动的服务里面增加前台服务的标签,注明需要使用camera。这个比较简单,直接贴代码。 <service android:name="xxxxxxx" and

2021-04-13 18:34:47 6851

原创 Android 导入WrappedKey

Android 导入WrappedKey本文给出WrappedKey导入AES密钥的方案。本文参考代码 CTS中的导入测试。WrappedKey 需要的格式: KeyDescription ::= SEQUENCE( keyFormat INTEGER, # Values from KeyFormat enum. keyParams AuthorizationList, ) SecureKeyWrap

2021-03-19 15:19:42 1369 1

原创 关于 Android WrappedKeyEntry 要求的asn.1格式简析

WrappedKeyEntry 要求的ASN.1 der格式借助 Android 9(API 级别 28)及更高版本,您能够利用 ASN.1 编码密钥格式将已加密密钥安全导入密钥库。Keymaster 随后会在密钥库中将密钥解密,因此密钥的内容永远不会以明文形式出现在设备的主机内存中。此过程提高了密钥解密的安全性。注意:只有搭载 Keymaster 4 或更高版本的设备才支持该功能。如需支持以安全方式将已加密密钥导入密钥库,请完成以下步骤:生成目的为 PURPOSE_WRAP_KEY 的密钥对。建议

2021-03-04 11:21:26 949 1

原创 Android USB插拔广播

Android USB插拔广播最近在适配新机型,发现没有USB插拔事件,大概跟踪下源码,看广播的发送。PS.没有发送插拔广播是系统问题或者是设备的问题,与新版本无关,这是个bug。新版本没有取消广播。USB的相关介绍本文不描述,包括host client之类的描述。USB 概要Android里面与USB相关的几个重要类包括:UsbService:核心类,系统服务,UsbManager:核心类,系统服务,app层API打交道主要类。This class allows you to access

2020-12-28 16:06:39 2351 2

原创 Android 资源文件匹配规则

Android 资源文件匹配规则Android 资源文件,可以加各种限定标注,类似我们常用的layout-hdpi ,layout-xhpdi,value-zh-rCN,layout-400x800等等。官方支持的请参考:应用资源概览那么Android是怎么去判断使用哪个一个呢?资源查找我们知道,不管定义多少个限制符的资源文件,ID只有一个,所以到底取哪个文件夹下面的呢?以Resource#getDrawable开启。主要流程是:Resource#getDrawable-》Resource#ge

2020-12-24 16:43:10 695 1

原创 Android设置显示语言

Android设置显示语言本文主要记录UI适配遇到的快捷方法。需要适配俄文显示,但是系统不支持选择语言,自己设置。private void setLanguage(String lang) { String languageToLoad = lang; Locale locale = new Locale(languageToLoad); Locale.setDefault(locale); Configuration config =

2020-12-21 16:32:01 781

原创 android 11 Setting panel的一次源码分析

Android 11 Setting panel的一次源码分析Android 11关于Wi-Fi的开关等设置,不允许用户直接调用,需要从panel设置。启动代码如下:val panelIntent = Intent(Settings.Panel.ACTION_WIFI)startActivityForResult(panelIntent, 10)其中的action包括:ACTION_WIFI 单Wi-Fi,包括Wi-Fi开关和连接ACTION_NFC NFCACTION_INTERNET_

2020-12-18 16:34:09 1604

原创 intent的android:mimeType 解析

Intent的data Uri 解析如下方法:intent.data=Uri.parse(“content://telephony/carriers”);方法解析是在:public @Nullable String resolveType(@NonNull Context context)这里的规则:content匹配的话就继续往下,获取getAuthority:telephony。查找manifest定义的privoder。在根据里面的getType获取对应的真实type。<provid

2020-12-14 15:11:55 297

原创 RSA/ECB/OAEPWithSHA-1AndMGF1Padding 类似工具类 代码

源码MGF1import java.security.MessageDigest;/** * 掩模生成函数 * mask generator function, as described in PKCS1v2. */public class MGF1{ private MessageDigest digest; /** * Create a version of MGF1 for the given digest. * * @param di

2020-10-29 11:40:35 3052 1

原创 RSA加解密的OAEP MGF1 填充解析

RSA加解密的OAEP 填充解析加密时的填充PKCS#1 v2.1: RSA密码学规范中关于 OAEP的模式的讲解如下:RSAES-OAEP-ENCRYPT (( n, e), M, L )可选: Hash 哈希函数(hLen代表哈希函数的输出字节数)MGF 掩码生成函数输入:(n,e) 输入的RSA公钥(k代表RSA模数n的字节长度)M 待加密的数据, 一个长度为mLen的字节串,并且mLen<=k-2hLen-2L 可选的和消息关联的标签;如果L没有提供,默认的

2020-10-28 11:01:01 5205 1

原创 Android keyStore系统存储的RSA密钥,加解密处理

Android keyStore系统存储的RSA密钥,加解密处理Android有keysrore可以存储密钥,RSA密钥对中,公钥可以取出,私钥不能取出只能使用。本文只看23就是6.0及以上。生产密钥对生成密钥的参数。spec = new KeyGenParameterSpec.Builder(mAlias, KeyProperties.PURPOSE_SIGN | KeyProperties.PURPOSE_ENCRYPT

2020-10-27 10:39:22 1956 6

原创 Android获取Mac地址 蓝牙 Wi-Fi

获取MAC 地址获取Wi-Fi MAC直接上代码: public static String getMacAddrByIp() { String strMacAddr = null; try { // 获得IpD地址 InetAddress ip = getLocalInetAddress(); byte[] b = NetworkInterface.getByInetAddress(ip)

2020-10-23 16:14:44 3024 2

原创 Ams创建activity的部分节点本文关注的节点:2创建进程

Ams创建activity的部分节点本文关注的节点本文关注的节点,主要包括两个部分:1.怎么选择目标的activity;2是否需要创建进程。大体走的流程大家可以参考其他文章,本文只截取需要的几个关键节点。本文列举的代码都是:***API-28***的代码。创建进程的时机startActivity会走到 ActivityStarter#startActivityUnchecked这个里面//前面还有一堆代码就是各种task和flag的处理mTargetStack.startActivityLoc

2020-10-13 13:38:44 136

原创 AMS创建activity流程中的部分节点:1选择目标的activity

Ams创建activity的部分节点本文关注的节点,主要包括两个部分:1.怎么选择目标的activity;2是否需要创建进程。大体走的流程大家可以参考其他文章,本文只截取需要的几个关键节点。本文列举的代码都是:***API-28***的代码。选择目标activity启动activity的代码大家都很熟悉,这里看下怎么选择的?选取的代码在startActivityMayWait里面进入。启动模式分类:1.显式启动activity的显式启动,是指定了目标activity的,不管是setclass

2020-10-12 11:55:59 489

原创 属性动画的执行过程

属性动画的执行过程本文以ObjectAnimator.ofFloat(view, “translationX”, 0,200.0f);为例使用属性动画属性动画的使用,最简单的方式如下:ObjectAnimator animatorBtnY = ObjectAnimator.ofFloat(view, "translationX", 0,200.0f);//平移200animatorBtnY.setRepeatCount(-1);//重复次数,-1无限重复animatorBtnY.setRepea

2020-09-22 10:37:41 425

原创 Tween Animation 补间动画 为什么没有改变view属性?

Tween Animation 补间动画 为什么没有改变view属性?Android的补间动画不会造车view属性的变化,为什么?本文看的是Android28.开始补间动画主要有四个:TranslateAnimation,ScaleAnimation,RotateAnimation,AlphaAnimation。就是平移,缩放,旋转和透明四种。然后加一个AnimationSet。我们从TranslateAnimation跟进,意义是一样的。使用//这个就是一秒以内从0,移动1000,x值Tra

2020-09-16 17:52:49 473

原创 AES 加密 排查

AES 加密的一次问题排查首先描述问题:因为和嵌入式设备通信,在数据在240个以内(包含)的时候,云端解密正常,但是超过240,在240以后有一段乱码。加密算法:AES/CBC/PKCS5Padding+iv问题起因嵌入式设备因为某种原因,加密使用的机器本身提供的加密程序,程序设计最大有效加密字段是:240,考虑填充16,最大256.所以开发人员直接把数据拆开,拆成240段+…+240+…+n。但是240加密没有填充。然后把加密合并提交,云端并不知道终端这样处理。造成现象:240+乱码(16)+

2020-09-11 14:32:06 248

原创 Android检测注册的broadcast receiver

Android检测注册的broadcast receiver检查系统的注册的广播接收器有两个路径静态注册检测静态注册的广播接收:getPackageManager().queryBroadcastReceivers()系统有现成的东西动态注册检测动态注册就有点麻烦,我们先看下动态注册系统到底是怎么走的?动态注册有一下几个方法,最后都是到//android.app.ContextImpl.class private Intent registerReceiverInternal(Broad

2020-09-11 11:29:27 2745

原创 touch事件是怎么到activity的

Touch 事件到底是怎么到activity的?引言我们分析touch事件都是说从activity-》view,那么事件是怎么到activity的?ViewRootImpl在View绘制中经常提到ViewRootImpl,从测量布局到绘制都是从它开始的,而事件也是从它真正的开始,具体这部分的代码涉及比较多,我没有完全确定,目前最清晰的线开始点是这个,如果打架对这部分有疑问,或者别的,或者更好的理解,欢迎大家拍砖。事件开始:public void dispatchInputEvent(InputE

2020-08-26 16:38:03 164

原创 Integer valueOf(String s)源码分析。

Integer valueOf(String s)解析string,转成整数。贴代码上: public static Integer valueOf(String s) throws NumberFormatException { return Integer.valueOf(parseInt(s, 10)); }默认调用解析,是10进制数:就是string是10进制的,这个时候如果传入是的16进制数,如果包含a到f会报错的。原型方法为:public static in

2020-08-05 11:36:42 385

原创 0x1.0p-1022 p是啥?

0x1.0p-1022 p是啥?public final class Double 里面定义的有最大和最小: public static final double MAX_VALUE = 0x1.fffffffffffffP+1023; // 1.7976931348623157e+308 public static final double MIN_VALUE = 0x0.0000000000001P-1022; // 4.9e-324P是干啥?首先科学计数法:把一个数表示成a与

2020-07-31 10:59:40 1608 1

原创 Android获取是否有输入事件,检测空闲

Android空闲自定义目的检测android是否有输入事件,包括屏幕点击和按键。想法android事件都是从 dev/input来的。所以遍历读取整个文件夹下面的文件即可。但是需要root权限。实现 /** * Os.poll 监听/dev/input/下面的设备节点,有数据可读,表示设备有操作,不是空闲 */ private void readInput() { IDLE_LOOP = true; ThreadPoolUtils

2020-07-24 11:00:50 545

原创 ViewGroup onDraw调用和不调用

ViewGroup onDraw调用和不调用view 的绘制一般都是,测量(onMeasure),布局(onLayout)和绘制(onDraw)。自定义View一般是复写上述三个方法。但是自定义View如果是继承ViewGroup,会发现onDraw不会调用。android View的绘制一般是从 draw或者dispatchDraw开始的。绘制跟踪view绘制调用,一般是parent的dispatchDraw开始.具体View的整个绘制请参考其他文章,本文只是找到为什么不调用onDraw。cl

2020-07-23 11:33:47 239 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除