CoreLibrary是VirtualApk(以下简称VA)的核心库

12人阅读 评论(0) 收藏 举报
分类:
CoreLibrary是VirtualApk(以下简称VA)的核心库,因为其中hook了一些被@hide注解的framework类,这些类无法被调用,所以这些无法被调用的类都放在了使用provided(Gradle3.0之后改为了compileOnly)依赖的库工程AndroidStub中,且路径与源码路径一致。
AndroidStub : 无法被直接调用的系统类,仅在编译时获得引用。
app :宿主程序
PluginDemo : 示例插件程序
VirtralApk-gradle-plugin : 自定义的Gradle插件
整个工程结构还是很清晰的,其中CoreLibrary是我们重点关注的对象


初始化 : PluginManager.getInstance(base).init()


VA的使用很简洁,首先在Application中初始化,在需要的地方load下插件APK,之后就可以像同一个工程一样去调用插件中的四大组件。看起来非常简洁,但是简洁不意味着简单。首先看下Application中的初始化。


CoreLibrary是VirtualApk(以下简称VA)的核心库,因为其中hook了一些被@hide注解的framework类,这些类无法被调用,所以这些无法被调用的类都放在了使用provided(Gradle3.0之后改为了compileOnly)依赖的库工程AndroidStub中,且路径与源码路径一致。
AndroidStub : 无法被直接调用的系统类,仅在编译时获得引用。
app :宿主程序
PluginDemo : 示例插件程序
VirtralApk-gradle-plugin : 自定义的Gradle插件
整个工程结构还是很清晰的,其中CoreLibrary是我们重点关注的对象


初始化 : PluginManager.getInstance(base).init()


VA的使用很简洁,首先在Application中初始化,在需要的地方load下插件APK,之后就可以像同一个工程一样去调用插件中的四大组件。看起来非常简洁,但是简洁不意味着简单。首先看下Application中的初始化。




1.通过反射获取到ActivityThread中的sCurrentActivityThread对象,其实就是获取ActivityThread实例


2.通过反射ActivityThread#getInstrumentation方法获取系统的getInstrumentation对象


3.实例化继承自Instrumentation并且实现了Handler.Callback接口的VAInstrumentation对象


5.通过反射ActivityThread#getHandler方法获取ActivityThread中的mH对象,mH对象是H的一个实例,H继承自Handler。系统对四大组件包括生命周期等的调用,本质上都是通过这个叫做mH的Handler对象完成的。


6.因为VAInstrumentation实现了Handler.Callback接口,所以可以通过反射将VAInstrumentation对象设置给mH对象。


以上“六脉神剑”操作完成之后,系统再调用ActivityThread中的mInstrumentation或者mH,首先会进入到VAInstrumentation对应的方法中,这样就完成了对Instrumentation及mH的hook。


VAInstrumentation相当于其中的mCallback对象,VAInstrumentation#handleMessage方法return false之后,不影响系统继续处理。目前实际来看,VAInstrumentation#handleMessage只是处理了插件包中Activity的theme信息。


对于插件化加载Activity的处理上面已经足够了,进一步的操作会在Activity章节分析。


通过反射获取ActivityManagerNative的gDefault属性(8.0之后是IActivityManagerSingleton属性,以下gDefault等同IActivityManagerSingleton),gDefault.get()返回的是AMS对象。这个过程可以参考Android Launcher启动应用程序流程源码解析中的“AMS中Binder机制简析”小节,直接搜索即可。


ActivityManagerProxy#newInstance使用动态代理的方式返回了代理AMS的ActivityManagerProxy对象,为了处理Service的声明周期问题(比如启动一个已经alive的service,不再次执行onCreate方法,只再次执行onStartCommend方法),在代理对象中拦截了startService、stopService、bindService、unbindService等操作,不在指定范围内的操作继续执行AMS原有操作。


通过反射设置gDefault对象的mInstance属性为代理AMS的ActivityManagerProxy对象




http://expo.cnworld.net/New_show.asp?ArtID=20859
http://expo.cnworld.net/New_show.asp?ArtID=20858
http://expo.cnworld.net/New_show.asp?ArtID=20857
http://expo.cnworld.net/New_show.asp?ArtID=20856
http://expo.cnworld.net/New_show.asp?ArtID=20855
http://expo.cnworld.net/New_show.asp?ArtID=20854
http://expo.cnworld.net/New_show.asp?ArtID=20853
http://expo.cnworld.net/New_show.asp?ArtID=20852
http://expo.cnworld.net/New_show.asp?ArtID=20851
http://expo.cnworld.net/New_show.asp?ArtID=20850
http://expo.cnworld.net/New_show.asp?ArtID=20849
http://expo.cnworld.net/New_show.asp?ArtID=20848
http://expo.cnworld.net/New_show.asp?ArtID=20847
http://expo.cnworld.net/New_show.asp?ArtID=20846
http://expo.cnworld.net/New_show.asp?ArtID=20845
http://expo.cnworld.net/New_show.asp?ArtID=20844
http://expo.cnworld.net/New_show.asp?ArtID=20843
http://expo.cnworld.net/New_show.asp?ArtID=20842
http://expo.cnworld.net/New_show.asp?ArtID=20841
http://expo.cnworld.net/New_show.asp?ArtID=20707
http://expo.cnworld.net/New_show.asp?ArtID=20706
http://expo.cnworld.net/New_show.asp?ArtID=20705
http://expo.cnworld.net/New_show.asp?ArtID=20704
http://expo.cnworld.net/New_show.asp?ArtID=20703
http://expo.cnworld.net/New_show.asp?ArtID=20702
http://expo.cnworld.net/New_show.asp?ArtID=20701
http://expo.cnworld.net/New_show.asp?ArtID=20700
http://expo.cnworld.net/New_show.asp?ArtID=20699
http://expo.cnworld.net/New_show.asp?ArtID=20698
http://expo.cnworld.net/New_show.asp?ArtID=20697
http://expo.cnworld.net/New_show.asp?ArtID=20696
http://expo.cnworld.net/New_show.asp?ArtID=20695
http://expo.cnworld.net/New_show.asp?ArtID=20694
http://expo.cnworld.net/New_show.asp?ArtID=20693
http://expo.cnworld.net/New_show.asp?ArtID=20692
http://expo.cnworld.net/New_show.asp?ArtID=20691
http://expo.cnworld.net/New_show.asp?ArtID=20690
http://expo.cnworld.net/New_show.asp?ArtID=20689
http://expo.cnworld.net/New_show.asp?ArtID=20669
http://expo.cnworld.net/New_show.asp?ArtID=20668
http://expo.cnworld.net/New_show.asp?ArtID=20667
http://expo.cnworld.net/New_show.asp?ArtID=20666
http://expo.cnworld.net/New_show.asp?ArtID=20665
http://expo.cnworld.net/New_show.asp?ArtID=20664
http://expo.cnworld.net/New_show.asp?ArtID=20663
http://expo.cnworld.net/New_show.asp?ArtID=20662
http://expo.cnworld.net/New_show.asp?ArtID=20661
http://expo.cnworld.net/New_show.asp?ArtID=20660
http://expo.cnworld.net/New_show.asp?ArtID=20659
http://expo.cnworld.net/New_show.asp?ArtID=20658
http://expo.cnworld.net/New_show.asp?ArtID=20688
http://expo.cnworld.net/New_show.asp?ArtID=20687
http://expo.cnworld.net/New_show.asp?ArtID=20686
http://expo.cnworld.net/New_show.asp?ArtID=20685
http://expo.cnworld.net/New_show.asp?ArtID=20684
http://expo.cnworld.net/New_show.asp?ArtID=20683
http://expo.cnworld.net/New_show.asp?ArtID=20682
http://expo.cnworld.net/New_show.asp?ArtID=20681
http://expo.cnworld.net/New_show.asp?ArtID=20680
http://expo.cnworld.net/New_show.asp?ArtID=20679
http://expo.cnworld.net/New_show.asp?ArtID=20678
http://expo.cnworld.net/New_show.asp?ArtID=20677
http://expo.cnworld.net/New_show.asp?ArtID=20676
http://expo.cnworld.net/New_show.asp?ArtID=20675
http://expo.cnworld.net/New_show.asp?ArtID=20674
http://expo.cnworld.net/New_show.asp?ArtID=20673
http://expo.cnworld.net/New_show.asp?ArtID=20672
http://expo.cnworld.net/New_show.asp?ArtID=20671
http://expo.cnworld.net/New_show.asp?ArtID=20670
http://expo.cnworld.net/New_show.asp?ArtID=20707
http://expo.cnworld.net/New_show.asp?ArtID=20706
http://expo.cnworld.net/New_show.asp?ArtID=20705
http://expo.cnworld.net/New_show.asp?ArtID=20704
http://expo.cnworld.net/New_show.asp?ArtID=20703
http://expo.cnworld.net/New_show.asp?ArtID=20702
http://expo.cnworld.net/New_show.asp?ArtID=20701
http://expo.cnworld.net/New_show.asp?ArtID=20700
http://expo.cnworld.net/New_show.asp?ArtID=20699
http://expo.cnworld.net/New_show.asp?ArtID=20698
http://expo.cnworld.net/New_show.asp?ArtID=20697
http://expo.cnworld.net/New_show.asp?ArtID=20696
http://expo.cnworld.net/New_show.asp?ArtID=20695
http://expo.cnworld.net/New_show.asp?ArtID=20694
http://expo.cnworld.net/New_show.asp?ArtID=20693
http://expo.cnworld.net/New_show.asp?ArtID=20692
http://expo.cnworld.net/New_show.asp?ArtID=20691
http://expo.cnworld.net/New_show.asp?ArtID=20690
http://expo.cnworld.net/New_show.asp?ArtID=20689
http://expo.cnworld.net/New_show.asp?ArtID=20840
http://expo.cnworld.net/New_show.asp?ArtID=20839
http://expo.cnworld.net/New_show.asp?ArtID=20838
http://expo.cnworld.net/New_show.asp?ArtID=20837
http://expo.cnworld.net/New_show.asp?ArtID=20836
http://expo.cnworld.net/New_show.asp?ArtID=20835
http://expo.cnworld.net/New_show.asp?ArtID=20834
http://expo.cnworld.net/New_show.asp?ArtID=20833
http://expo.cnworld.net/New_show.asp?ArtID=20832
http://expo.cnworld.net/New_show.asp?ArtID=20831
http://expo.cnworld.net/New_show.asp?ArtID=20830
http://expo.cnworld.net/New_show.asp?ArtID=20829
http://expo.cnworld.net/New_show.asp?ArtID=20828
http://expo.cnworld.net/New_show.asp?ArtID=20827
http://expo.cnworld.net/New_show.asp?ArtID=20826
http://expo.cnworld.net/New_show.asp?ArtID=20825
http://expo.cnworld.net/New_show.asp?ArtID=20824
http://expo.cnworld.net/New_show.asp?ArtID=20823
http://expo.cnworld.net/New_show.asp?ArtID=20822
http://expo.cnworld.net/New_show.asp?ArtID=20821
http://expo.cnworld.net/New_show.asp?ArtID=20820
http://expo.cnworld.net/New_show.asp?ArtID=20819
http://expo.cnworld.net/New_show.asp?ArtID=20818
http://expo.cnworld.net/New_show.asp?ArtID=20817
http://expo.cnworld.net/New_show.asp?ArtID=20816
http://expo.cnworld.net/New_show.asp?ArtID=20815
http://expo.cnworld.net/New_show.asp?ArtID=20814
http://expo.cnworld.net/New_show.asp?ArtID=20813
http://expo.cnworld.net/New_show.asp?ArtID=20812
http://expo.cnworld.net/New_show.asp?ArtID=20811
http://expo.cnworld.net/New_show.asp?ArtID=20810
http://expo.cnworld.net/New_show.asp?ArtID=20809
http://expo.cnworld.net/New_show.asp?ArtID=20808
http://expo.cnworld.net/New_show.asp?ArtID=20807
http://expo.cnworld.net/New_show.asp?ArtID=20806
http://expo.cnworld.net/New_show.asp?ArtID=20805
http://expo.cnworld.net/New_show.asp?ArtID=20804
http://expo.cnworld.net/New_show.asp?ArtID=20803
http://expo.cnworld.net/New_show.asp?ArtID=20821
http://expo.cnworld.net/New_show.asp?ArtID=20820
http://expo.cnworld.net/New_show.asp?ArtID=20819
http://expo.cnworld.net/New_show.asp?ArtID=20818
http://expo.cnworld.net/New_show.asp?ArtID=20817
http://expo.cnworld.net/New_show.asp?ArtID=20816
http://expo.cnworld.net/New_show.asp?ArtID=20815
http://expo.cnworld.net/New_show.asp?ArtID=20814
http://expo.cnworld.net/New_show.asp?ArtID=20813
http://expo.cnworld.net/New_show.asp?ArtID=20812
http://expo.cnworld.net/New_show.asp?ArtID=20811
http://expo.cnworld.net/New_show.asp?ArtID=20810
http://expo.cnworld.net/New_show.asp?ArtID=20809
http://expo.cnworld.net/New_show.asp?ArtID=20808
http://expo.cnworld.net/New_show.asp?ArtID=20807
http://expo.cnworld.net/New_show.asp?ArtID=20806
http://expo.cnworld.net/New_show.asp?ArtID=20805
http://expo.cnworld.net/New_show.asp?ArtID=20804
http://expo.cnworld.net/New_show.asp?ArtID=20803
http://expo.cnworld.net/New_show.asp?ArtID=20802
http://expo.cnworld.net/New_show.asp?ArtID=20801
http://expo.cnworld.net/New_show.asp?ArtID=20800
http://expo.cnworld.net/New_show.asp?ArtID=20799
http://expo.cnworld.net/New_show.asp?ArtID=20798
http://expo.cnworld.net/New_show.asp?ArtID=20797
http://expo.cnworld.net/New_show.asp?ArtID=20796
http://expo.cnworld.net/New_show.asp?ArtID=20795
http://expo.cnworld.net/New_show.asp?ArtID=20794
http://expo.cnworld.net/New_show.asp?ArtID=20793
http://expo.cnworld.net/New_show.asp?ArtID=20792
http://expo.cnworld.net/New_show.asp?ArtID=20791
http://expo.cnworld.net/New_show.asp?ArtID=20790
http://expo.cnworld.net/New_show.asp?ArtID=20789
http://expo.cnworld.net/New_show.asp?ArtID=20788
http://expo.cnworld.net/New_show.asp?ArtID=20787
http://expo.cnworld.net/New_show.asp?ArtID=20786
http://expo.cnworld.net/New_show.asp?ArtID=20785
http://expo.cnworld.net/New_show.asp?ArtID=20784
http://expo.cnworld.net/New_show.asp?ArtID=20783
http://expo.cnworld.net/New_show.asp?ArtID=20782
http://expo.cnworld.net/New_show.asp?ArtID=20781
http://expo.cnworld.net/New_show.asp?ArtID=20780
http://expo.cnworld.net/New_show.asp?ArtID=20779
http://expo.cnworld.net/New_show.asp?ArtID=20778
http://expo.cnworld.net/New_show.asp?ArtID=20777
http://expo.cnworld.net/New_show.asp?ArtID=20776
http://expo.cnworld.net/New_show.asp?ArtID=20775
http://expo.cnworld.net/New_show.asp?ArtID=20774
http://expo.cnworld.net/New_show.asp?ArtID=20773
http://expo.cnworld.net/New_show.asp?ArtID=20772
http://expo.cnworld.net/New_show.asp?ArtID=20771
http://expo.cnworld.net/New_show.asp?ArtID=20770
http://expo.cnworld.net/New_show.asp?ArtID=20769
http://expo.cnworld.net/New_show.asp?ArtID=20768
http://expo.cnworld.net/New_show.asp?ArtID=20767
http://expo.cnworld.net/New_show.asp?ArtID=20766
http://expo.cnworld.net/New_show.asp?ArtID=20765
http://expo.cnworld.net/New_show.asp?ArtID=20764
http://expo.cnworld.net/New_show.asp?ArtID=20763
http://expo.cnworld.net/New_show.asp?ArtID=20762
http://expo.cnworld.net/New_show.asp?ArtID=20761
http://expo.cnworld.net/New_show.asp?ArtID=20760
http://expo.cnworld.net/New_show.asp?ArtID=20759
http://expo.cnworld.net/New_show.asp?ArtID=20758
http://expo.cnworld.net/New_show.asp?ArtID=20757
http://expo.cnworld.net/New_show.asp?ArtID=20756
http://expo.cnworld.net/New_show.asp?ArtID=20755
http://expo.cnworld.net/New_show.asp?ArtID=20754
http://expo.cnworld.net/New_show.asp?ArtID=20753
http://expo.cnworld.net/New_show.asp?ArtID=20752
http://expo.cnworld.net/New_show.asp?ArtID=20751
http://expo.cnworld.net/New_show.asp?ArtID=20750
http://expo.cnworld.net/New_show.asp?ArtID=20749
http://expo.cnworld.net/New_show.asp?ArtID=20748
http://expo.cnworld.net/New_show.asp?ArtID=20747
http://expo.cnworld.net/New_show.asp?ArtID=20746
http://expo.cnworld.net/New_show.asp?ArtID=20745
http://expo.cnworld.net/New_show.asp?ArtID=20744
http://expo.cnworld.net/New_show.asp?ArtID=20743
http://expo.cnworld.net/New_show.asp?ArtID=20742
http://expo.cnworld.net/New_show.asp?ArtID=20741
http://expo.cnworld.net/New_show.asp?ArtID=20740
http://expo.cnworld.net/New_show.asp?ArtID=20739
http://expo.cnworld.net/New_show.asp?ArtID=20738
http://expo.cnworld.net/New_show.asp?ArtID=20737
http://expo.cnworld.net/New_show.asp?ArtID=20736
http://expo.cnworld.net/New_show.asp?ArtID=20735
http://expo.cnworld.net/New_show.asp?ArtID=20734
http://expo.cnworld.net/New_show.asp?ArtID=20733
http://expo.cnworld.net/New_show.asp?ArtID=20732
http://expo.cnworld.net/New_show.asp?ArtID=20731
http://expo.cnworld.net/New_show.asp?ArtID=20730
http://expo.cnworld.net/New_show.asp?ArtID=20729
http://expo.cnworld.net/New_show.asp?ArtID=20728
http://expo.cnworld.net/New_show.asp?ArtID=20727
http://expo.cnworld.net/New_show.asp?ArtID=20726
http://expo.cnworld.net/New_show.asp?ArtID=20725
http://expo.cnworld.net/New_show.asp?ArtID=20724
http://expo.cnworld.net/New_show.asp?ArtID=20723
http://expo.cnworld.net/New_show.asp?ArtID=20722
http://expo.cnworld.net/New_show.asp?ArtID=20721
http://expo.cnworld.net/New_show.asp?ArtID=20720
http://expo.cnworld.net/New_show.asp?ArtID=20719
http://expo.cnworld.net/New_show.asp?ArtID=20718
http://expo.cnworld.net/New_show.asp?ArtID=20717
http://expo.cnworld.net/New_show.asp?ArtID=20716
http://expo.cnworld.net/New_show.asp?ArtID=20715
http://expo.cnworld.net/New_show.asp?ArtID=20714
http://expo.cnworld.net/New_show.asp?ArtID=20713
http://expo.cnworld.net/New_show.asp?ArtID=20712
http://expo.cnworld.net/New_show.asp?ArtID=20711
http://expo.cnworld.net/New_show.asp?ArtID=20710
http://expo.cnworld.net/New_show.asp?ArtID=20709
http://expo.cnworld.net/New_show.asp?ArtID=20708
查看评论

插件化方案-比较滴滴VirtualApk和360DroidPlugin

Android组件化和插件化开发,概念解释 Android 使用动态加载框架DL进行插件化开发,时之沙2014博客插件化开发总的来说有以下几点好处(不同插件框架不一样): 宿主和插件分开编译 并发开...
  • TTKatrina
  • TTKatrina
  • 2017-08-28 17:11:06
  • 743

是时候来一波Android插件化了

是时候来一波Android插件化了 是时候来一波Android插件化了 前言 Android开发演进 模块化介绍 插件化介绍 前提技术介绍 APK构成 Manifest Application ...
  • xia215266092
  • xia215266092
  • 2017-08-25 13:13:54
  • 718

Android插件框架VirtualAPK学习和使用

滴滴的virtualAPK学习和使用
  • llayjun
  • llayjun
  • 2017-08-22 13:36:11
  • 1048

VirtualAPK详解和使用

1 介绍Android 插件化技术是比较热门领域,VirtualAPK 是滴滴2017年6月3号开源,框架功能完备,支持 Android 四大组件,良好的兼容性,且入侵性较低,作为加载耦合插件方案是较...
  • qq_33408235
  • qq_33408235
  • 2017-10-19 13:34:32
  • 1836

Android插件化快速入门与实例解析(VirtualApk)

集成一个第三方相册功能,只需集成一个插件APK到项目中,无需集成额外代码,并且支持随时更新相册功能,无需发布版本更新,无需AndroidManifest中声明四大组件,这就是插件化。   插件化可利...
  • z4909801
  • z4909801
  • 2017-07-18 15:24:25
  • 997

VirtualAPK的特性

VirtualAPK的特性VirtualAPK是滴滴出行自研的一款优秀的插件化框架,主要有如下几个特性。功能完备支持几乎所有的Android特性; 四大组件方面 四大组件均不需要在宿主manife...
  • linliang815
  • linliang815
  • 2017-07-06 15:57:16
  • 383

VirtualAPK 框架简介

前言:     VirtualAPK是滴滴出行自研的一款优秀的插件化框架,主要有如下几个特性: 1, 功能完备 支持几乎所有的Android特性; 2,四大组件 四大组件均不需要在宿主manifest...
  • u012439416
  • u012439416
  • 2017-08-02 19:50:25
  • 251

Android核心库

链接:http://blog.chinaunix.net/uid-22028680-id-3178227.html Android核心库 -什么是Android核心库 -Android核心库...
  • Hens007
  • Hens007
  • 2015-02-02 18:29:10
  • 3159

滴滴插件化框架VirtualAPK原理解析(一)之插件Activity管理

上周末,滴滴与360都开源了各自的插件化框架,Virtualapk与RePlugin,作为一个插件化方面的狂热研究者,在周末就迫不及待的下载了Virtualapk框架来进行研究,本篇博客带来的是Vir...
  • u012124438
  • u012124438
  • 2017-07-02 21:15:48
  • 6570

滴滴插件化方案 VirtualApk 源码解析

本文已在我的公众号hongyangAndroid原创首发。 转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/7500...
  • lmj623565791
  • lmj623565791
  • 2017-07-12 00:03:04
  • 24807
    个人资料
    等级:
    访问量: 3万+
    积分: 688
    排名: 7万+
    最新评论