
Android自学
文章平均质量分 67
小小bug creator
这个作者很懒,什么都没留下…
展开
-
Android app启动流程
app启动,四大组件启动原创 2022-09-27 16:47:07 · 1240 阅读 · 0 评论 -
Android RunTime执行指令
android Runtime 执行原创 2022-07-12 15:55:08 · 1318 阅读 · 0 评论 -
Android 支持的系统的share uid
系统支持的sharedUersid原创 2022-07-06 12:10:03 · 1258 阅读 · 0 评论 -
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 · 3790 阅读 · 0 评论 -
Android 广播发送
广播接收逻辑结论先说结论:动态注册,如果不是有序广播,循环发送完,不等待上一个广播的结果。静态注册,每次都会重新生成一个receiver的实例,而且会被当成有序广播处理,必须等到上一个处理完成,才会继续下一个。因为静态注册,会涉及到进程创建。上代码广播接收的处理逻辑是在发送的部分。入口是在AMS的broadcastIntentLocked这个最终开始的地方。添加接收者首先是粘性广播,需要留存。这部分先不看。如果不是只发送动态注册if ((intent.getFlags()&Inte原创 2021-07-29 14:18:24 · 699 阅读 · 0 评论 -
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 · 7709 阅读 · 0 评论 -
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 · 1662 阅读 · 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 · 1082 阅读 · 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 · 2518 阅读 · 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 · 768 阅读 · 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 · 888 阅读 · 0 评论 -
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 · 1755 阅读 · 0 评论 -
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 · 329 阅读 · 0 评论 -
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 · 3148 阅读 · 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 · 5736 阅读 · 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 · 2119 阅读 · 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 · 3498 阅读 · 2 评论 -
Ams创建activity的部分节点本文关注的节点:2创建进程
Ams创建activity的部分节点本文关注的节点本文关注的节点,主要包括两个部分:1.怎么选择目标的activity;2是否需要创建进程。大体走的流程大家可以参考其他文章,本文只截取需要的几个关键节点。本文列举的代码都是:***API-28***的代码。创建进程的时机startActivity会走到 ActivityStarter#startActivityUnchecked这个里面//前面还有一堆代码就是各种task和flag的处理mTargetStack.startActivityLoc原创 2020-10-13 13:38:44 · 174 阅读 · 0 评论 -
AMS创建activity流程中的部分节点:1选择目标的activity
Ams创建activity的部分节点本文关注的节点,主要包括两个部分:1.怎么选择目标的activity;2是否需要创建进程。大体走的流程大家可以参考其他文章,本文只截取需要的几个关键节点。本文列举的代码都是:***API-28***的代码。选择目标activity启动activity的代码大家都很熟悉,这里看下怎么选择的?选取的代码在startActivityMayWait里面进入。启动模式分类:1.显式启动activity的显式启动,是指定了目标activity的,不管是setclass原创 2020-10-12 11:55:59 · 553 阅读 · 0 评论 -
属性动画的执行过程
属性动画的执行过程本文以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 · 468 阅读 · 0 评论 -
touch事件是怎么到activity的
Touch 事件到底是怎么到activity的?引言我们分析touch事件都是说从activity-》view,那么事件是怎么到activity的?ViewRootImpl在View绘制中经常提到ViewRootImpl,从测量布局到绘制都是从它开始的,而事件也是从它真正的开始,具体这部分的代码涉及比较多,我没有完全确定,目前最清晰的线开始点是这个,如果打架对这部分有疑问,或者别的,或者更好的理解,欢迎大家拍砖。事件开始:public void dispatchInputEvent(InputE原创 2020-08-26 16:38:03 · 187 阅读 · 0 评论 -
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 · 420 阅读 · 0 评论 -
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 · 1829 阅读 · 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 · 589 阅读 · 0 评论 -
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 · 282 阅读 · 2 评论