After knowing the pre-knowledge points of class loading in Android, look at the detailed implementation of Dexclassloader in Android
The detailed loading process is as follows:
The host program will load the APK "1" into the file system, such as SD card, and then run the activity in the APK with an activity called proxy.
About dynamically loading APS. Theoretically usable to Dexclassload, Pathclassloader, URLClassLoader;
Dexclassloader: Ability to load jar, Dex, apk on file system
Pathclassloader: The ability to load the APK under the/data/app folder, which also means it can only load the installed APK
URLClassLoader: The ability to load jars in Java, but because Dalvik in Android does not recognize jars directly, all of this is not available on Android. Although there is this class
Get Assetsmanager
The method of loading is through reflection, by invoking the Addassetpath method in Assetmanager. We were able to load a resource from an APK into the resources because Addassetpath is a hidden API that we can't call directly, so just by reflection, the following is its declaration, and by staring at what we can see, the path passed can be a zip file or a resource folder. And the APK is a zip. So just pass the APK path to it, the resource is loaded into Assetmanager, and then create a new resources object by Assetmanager, which is the resource in the apk we can use.
Encapsulating data:
1: ClassLoader, Assetmanager, resource as a member of the plugin. Encapsulation into beans
2: Multi-plug-in through the map maintenance, the key is the APK PackageName
Plug-in loading into the memory flow:
Loading plug-in activity:
? PluginsActivityitself (life cycle, resources, etc.) is provided by the hostproxyactivityto load. ? when we sendIntentto start the plugin whenActivityWhen the substance started isproxyactivity? Encapsulated in order to encapsulate the detailsdxintent? all plugins are implementedIdxpluginInterfacePrxoyactivity took over all the plugin activity
Dxpluginbean encapsulated Bean
?encapsulates each of thePluginalsoapkof Data? Maintenance inDxpluginmangerClass ofMapin
Dxpluginmanager plug-in Management core class ? load Plug-in,Start plug-ins,plug-in maintenance
Idxplugin:
?put each plugin'sActivityabstract into a "plugin"? Idxpluginrealized theActivitythe Main method? Onattachmethod is a plugin-specific callback method that when the plug- inActivitywasProxyLoad Time. putProxyis assigned a reference value to the that
dxintent:? Pluginpackgename:Jump toPluginthe package name, i.e.Manifestin thePackageName
pluginclassname: Jump plugin specified in the Activityname, can be passed NULL, the default is to jump main Activity
dxpluginbaseactivity, dxpluginbasefragmentactivity:
all plug-ins activity inherits these two activity
The activity implements the Idxplugin interface
Get proxyactivity references in the Onattach method
? AllActivityThe inheritance method needs to infer whether the plug-in itself starts or is started in the host----"From_internal and from_external
dxproxyactivity,dxproxyfragmentactivity:. ? HostActivity? in theHostcalling plug-ins inActivityThe jump, the essence is these twoActivityThe jump between? provides the plug-in with a trueContext? to reduce repetitive code, place the initialization of the plug-inDxplugininitializerin class
Dxplugininitializer ?FixThemeThe crash problem that brought ? Launch PluginActivity
1 get plug-ins with reflection Activity the default constructor
2 by Reflection New out a plugin and turn it into a strong Idxplugin
3 Callback Onattach method Incoming Prxoy the reference
4 called onCreate method to adjust the plug-in
Can directly participate in the demo:
http://download.csdn.net/detail/yaya_soft/8858645
Android APK Dynamic Loading technology Research (2) Android plugin and implementation