Colourful Day

我需要,最狂的风,和最静的海。

——顾城《第八个早晨》


  • 首页

  • 分类

  • 归档

  • 标签

  • 留言

  • 关于

Activity生命周期调用流程

发表于 2019-04-09 | 更新于 2019-04-12 | 分类于 Android Blog | 评论数:
注:源码分析基于 Android SDK API 28 在前一篇中,我们分析了 startActivity 的整个流程,并且也讲到了何时调用了 onCreate() 。 那么就会有一个疑问,其他的生命周期方法是在哪里被调用的呢?今天就来揭开这个谜底。 我们知道,Activity A 启动 Activity B ,其生命周期方法调用如下: Activity A onPause() Activity B onCreate() Activity B onStart() Activity B onResume() Activity A onStop() 那首先我们来看看 Activity A 的 ...
阅读全文 »

startActivity启动流程

发表于 2019-04-03 | 分类于 Android Blog | 评论数:
注:源码分析基于 Android SDK API 28 对于 Activity 大家都已经很熟悉很亲切了吧,在这就不过多介绍了。 直接进入正题,走起! 一般我们启动 Activity 的入口都是 startActivity ,所以这也成为了我们分析整个流程的切入口。 ActivitystartActivity(Intent intent)12345678910111213141516171819@Overridepublic void startActivity(Intent intent) { this.startActivity(intent, null);}@O ...
阅读全文 »

Tinker源码分析(七):dex合成流程

发表于 2019-03-20 | 更新于 2019-03-23 | 分类于 Android Blog | 评论数:
本系列 Tinker 源码解析基于 Tinker v1.9.12 前面讲到了 Tinker 安装补丁的流程,现在就详细地来看下 dex 合成的代码。代码入口就在 DexDiffPatchInternal.tryRecoverDexFiles 中。 UpgradePatch12345//we use destPatchFile instead of patchFile, because patchFile may be deleted during the patch processif (!DexDiffPatchInternal.tryRecoverDexFiles(manager, sig ...
阅读全文 »

Apk安全之校验签名

发表于 2019-03-18 | 分类于 Android Blog | 评论数:
校验签名一般绝大多数的 app 在上线前都会做一层安全防护,比如代码混淆、加固等。 今天就来讲讲其中的一项:校验签名。 校验签名可以有效的防止二次打包,避免你的 app 被植入广告甚至破解等。而今天就从两个角度来讲签名的具体校验: Java 层 C/C++ 层 那么就先开始讲 java 层好了。 Java 层123456789101112131415private static boolean validateAppSignature(Context context, String apkSignature) { try { PackageManag ...
阅读全文 »

Tinker源码分析(六):补丁合成流程

发表于 2019-03-14 | 分类于 Android Blog | 评论数:
本系列 Tinker 源码解析基于 Tinker v1.9.12 补丁合成流程下发的补丁包其实并不能直接加载,因为补丁包只是差异包,需要和本地的 dex 、资源等进行合成后,得到全量的 dex 才能被完整地使用。这样也就避免了热修复中 dex 的 pre-verify 问题,也减少了补丁包的体积,方便用户下载。 补丁合成的入口在 TinkerInstaller.onReceiveUpgradePatch 方法 TinkerInstaller.onReceiveUpgradePatch123public static void onReceiveUpgradePatch(Context cont ...
阅读全文 »

Tinker源码分析(五):加载so补丁流程

发表于 2019-03-10 | 更新于 2019-03-11 | 分类于 Android Blog | 评论数:
本系列 Tinker 源码解析基于 Tinker v1.9.12 校验so补丁流程与加载资源补丁类似,加载so补丁也要先从校验开始看起。 其实总体来说,Tinker 中加载 so 补丁文件的关键代码就一句: System.load(String filePath) tryLoadPatchFilesInternal1234567891011final boolean isEnabledForNativeLib = ShareTinkerInternals.isTinkerEnabledForNativeLib(tinkerFlag);if (isEnabledForNativeLib)  ...
阅读全文 »

Tinker源码分析(四):加载资源补丁流程

发表于 2019-03-05 | 更新于 2019-03-10 | 分类于 Android Blog | 评论数:
本系列 Tinker 源码解析基于 Tinker v1.9.12 加载资源补丁流程将到资源补丁的加载,首先还要回过头来先看资源补丁的校验和检查。 我们回到 TinkerLoader.tryLoadPatchFilesInternal 方法中来看。 tryLoadPatchFilesInternal1234567891011//check resourcefinal boolean isEnabledForResource = ShareTinkerInternals.isTinkerEnabledForResource(tinkerFlag);Log.w(TAG, "tryLoadPatchF ...
阅读全文 »

Tinker源码分析(三):加载dex补丁流程

发表于 2019-02-28 | 更新于 2019-03-10 | 分类于 Android Blog | 评论数:
本系列 Tinker 源码解析基于 Tinker v1.9.12 加载dex补丁流程TinkerDexLoader.loadTinkerJars判断一下 dexList 和 classLoader 12345678910111213if (loadDexList.isEmpty() && classNDexInfo.isEmpty()) { Log.w(TAG, "there is no dex to load"); return true;}PathClassLoader classLoader = (PathClassLoader) Tink ...
阅读全文 »

Tinker源码分析(二):加载补丁流程

发表于 2019-02-27 | 更新于 2019-03-14 | 分类于 Android Blog | 评论数:
本系列 Tinker 源码解析基于 Tinker v1.9.12 前一篇讲到了利用反射执行的是 TinkerLoader.tryLoad 方法 tryLoad12345678910@Overridepublic Intent tryLoad(TinkerApplication app) { Intent resultIntent = new Intent(); long begin = SystemClock.elapsedRealtime(); tryLoadPatchFilesInternal(app, resultIntent); long cost = ...
阅读全文 »

Tinker源码分析(一):TinkerApplication

发表于 2019-02-24 | 更新于 2019-03-10 | 分类于 Android Blog | 评论数:
本系列 Tinker 源码解析基于 Tinker v1.9.12 自动生成TinkerApplication接入 Tinker 第一步就是改造 Application 。官方推荐是利用 @DefaultLifeCycle 动态生成 Application 12345@DefaultLifeCycle(application = "tinker.sample.android.app.SampleApplication", flags = ShareConstants.TINKER_ENABLE_ALL, loadVerifyFl ...
阅读全文 »
123…12
俞其荣

俞其荣

向前跑 迎着冷眼和嘲笑

120 日志
11 分类
51 标签
RSS
GitHub Twitter 微博 Email
Creative Commons
© 2015 — 2021 俞其荣
由 Hexo 强力驱动
|
主题 — NexT.Muse
Hosted by Coding Pages