Android总结
开发总结
wei.zheng
这个作者很懒,什么都没留下…
展开
-
通过Xposed框架Hook打印Java函数调用栈
XposedXposed的使用有2点限制条件1 需要Root2 适用于Android4-Android9, 在Android10会有无法访问网络的问题无法Root问题:适用VitualXposed建立一个Android工程app/build.gradle文件中添加xposed依赖compileOnly 'de.robv.android.xposed:api:82'新建一个Java类,实现IXposedHookLoadPackage接口,用来Hook方法package com.ex原创 2020-09-05 10:15:29 · 2549 阅读 · 0 评论 -
APK打包流程
1.apk结构解析META-INF(CERT.RSA / CERA.SF / MANIFEST.MF)resAndroidManifest.xmlclasses.dexresources.arscMANIFEST.MF 版本号、每个文件的哈希值(Name/SHA1-Digest)CERT.SF 对MANIFEST.MF中每个文件的前3行再进行一次哈希(Name/SHA1-Digest)CERT.RSA 保存签名和公钥证书2.apk打包流程1. 使用aapt(android a原创 2020-07-11 23:58:34 · 247 阅读 · 0 评论 -
LeakCanary原理分析
LeakCanary 资源信息https://github.com/square/leakcanarydebugImplementation ‘com.squareup.leakcanary:leakcanary-android:2.3’1. 核心原理1.1 强引用-无法回收申请一个强引用对象,主动调用GC,查看此对象是否被回收。 private static void test1() throws InterruptedException { ReferenceQue.原创 2020-06-22 21:16:13 · 404 阅读 · 0 评论 -
Glide(3):缓存分析
Engine#loadFromMemory() private EngineResource<?> loadFromMemory( EngineKey key, boolean isMemoryCacheable, long startTime) { ... // 1.activeResources EngineResource<?> active = loadFromActiveResources(key); if (active !原创 2020-05-10 14:15:19 · 173 阅读 · 0 评论 -
Glide(2):生命周期绑定
1. Glide.with(…)有若干多态方法,以下面方法举例。Glide.with(activity) public static RequestManager with(@NonNull Activity activity) { return getRetriever(activity).get(activity); }RequestManagerRetriever#get(activity) public RequestManager get(@NonNull Activi原创 2020-05-10 14:53:24 · 289 阅读 · 0 评论 -
Glide(1):代码流程
1. 使用方式RequestOptions options = new RequestOptions();options.placeholder(R.drawable.task_score_book).fitCenter().circleCrop();Glide.with(this).load(mTaskItem.getIcon()).apply(options).into(mImgContent);2. 加载流程原创 2020-05-10 14:14:59 · 131 阅读 · 0 评论 -
JNI开发流程
1. 生成.h文件假如在JNI.java中定义了native方法,需要根据此.java文件生成对应的.h头文件。进入JNI.java文件目录,执行如下指令。(早期JDK版本有javah指令,后面JDK版本都是集成在javac指令集中)javac -h . JNI.java2. 查看.class文件方法签名C代码调用Java代码,需要用到反射,反射调用方法需要知道方法签名。用javap...原创 2020-05-02 22:44:39 · 426 阅读 · 1 评论 -
Hook方式,绕过系统应用WebView安全性检查
1.问题项目中是Launcher应用,需要用到WebView来做Hybrid开发,会出现如下问题。如果是系统应用(uid == android.os.Process.SYSTEM_UID)使用WebView,则会抛出异常UnsupportedOperationException。以下是android 8.0的源码WebViewFactory#getProvider()static Web...原创 2020-04-23 01:50:32 · 1987 阅读 · 1 评论 -
Android类加载机制
ClassLoader#loadClass public Class<?> loadClass(String name) throws ClassNotFoundException { return loadClass(name, false); } protected Class<?> loadClass(String nam...原创 2020-04-17 19:25:52 · 318 阅读 · 0 评论 -
OkHttp3源码分析(下):请求实现 Interceptor
1.请求的具体实现调用入口RealCall#getResponseWithInterceptorChain()收集所有的Interceptor从第0个Interceptor开始,逐个调用chain.proceed最后将结果Response返回给调用者 Response getResponseWithInterceptorChain() throws IOException { ...原创 2020-04-11 00:59:42 · 171 阅读 · 0 评论 -
OkHttp3源码分析(中):请求管理 Dispatcher
1.请求队列分类请求队列都是双端队列Deque, 可以从执行策略与请求类型两个维度来划分:按执行策略分类进行队列:runningAsyncCalls + runningSyncCalls等待队列:readyAsyncCalls // 等待队列中请求数量 public synchronized int queuedCallsCount() { return readyAs...原创 2020-04-10 08:49:38 · 181 阅读 · 0 评论 -
OkHttp3源码分析(上):请求流程
1.OkHttp3使用步骤OkHttp是android源码中提供的网络请求框架,是Square公司的经典作品之一。使用步骤可分为4步:创建OkHttpClientBuilder模式创建OkHttpClient,可以添加自定义拦截器,以及配置各种参数(鉴权、超时等)。创建Request请求对象,配置请求url以及method,自定义请求头Header也是在这里添加。创建Ca...原创 2020-04-10 00:20:27 · 160 阅读 · 0 评论 -
Service的启动过程
android9.0Service启动过程1 ContextImpl#startService public ComponentName startService(Intent service) { warnIfCallingFromSystemProcess(); return startServiceCommon(service, false, mUs...原创 2020-04-03 17:30:31 · 165 阅读 · 0 评论 -
Activity启动流程
基于Android9.0(android-28)源码分析Activity启动流程。先看整体流程,再了解局部实现细节。1. ContextImpl#startActivity/** * Common implementation of Context API, which provides the base * context object for Activity and other a...原创 2020-04-03 11:25:30 · 355 阅读 · 0 评论 -
ActivityThread的启动流程
在android9.0的基础上,分析应用的启动流程。1.ActivityThread的启动流程ActivityThread是应用的主线程/UI线程,其main()方法是app的入口方法。ActivityThread继承于ClientTransactionHandler。1.1 ActivityThread.main()public final class ActivityThread e...原创 2020-04-02 20:53:35 · 649 阅读 · 0 评论 -
2.Native与Web通信(下):使用JsBridge
JsBridge是lzyzsd写的一款开源项目,开源地址:https://github.com/lzyzsd/JsBridge下面对JsBridge的接入以及基本使用做一些简单介绍。1.接入工程build.gradle文件中配置allprojects { repositories { // ... maven { url 'https://jitpa...原创 2019-12-21 11:29:48 · 398 阅读 · 0 评论 -
1.Native与Web通信(上):使用addJavascriptInterface
Android与web通信主要有两种方式:1.使用addJavascriptInterface2.使用JsBridge1.web调用Native在Web页面调用Native的方法,分别用get/set两个方法来模拟数据交换。Activity页面开启Javascript使能、传递交互接口对象、加载web页面。WebSettings settings = mWebView.getSe...原创 2019-12-20 22:45:14 · 733 阅读 · 0 评论