ǰÑÔ
ºÃ¾ÃûÓз¢²¼ÐµÄÎÄÕ£¬Õâ´Î´òËã·¢±íÒ»ÏÂÎÒÕ⼸¸öÔµÄÒ»¸öºËÐÄÑо¿³É¹û£ºAPK¶¯Ì¬¼ÓÔØ¿ò¼Ü£¨DL£©¡£Õâ¶Îʱ¼äÎÒÖÂÁ¦ÓÚgithubµÄ¿ªÔ´¹±Ï×£¬¿ªÔ´ÁË2¸ö±È½ÏÓÐÓÃÇÒÓÐÒâÒåµÄÏîÄ¿£¬Ò»¸öÊÇPinnedHeaderExpandableListView£¬ÁíÒ»¸öÊÇAPK¶¯Ì¬¼ÓÔØ¿ò¼Ü¡£¾ßÌå¿ÉÒԲμûÎÒµÄgithub£ºhttps://github.com/singwhatiwanna
±¾´ÎÒª½éÉܵÄÊÇAPK¶¯Ì¬¼ÓÔØ¿ò¼Ü£¨DL£©£¬Õâ¸öÏîÄ¿³ýÁËÎÒÒÔÍ⣬»¹ÓÐÁ½¸ö¹²Í¬¿ª·¢ÕߣºÌïÐ¥£¨Ê±Ö®É³£©,ËÎ˼Óî¡£
ΪÁ˸üºÃµØÀí½â±¾ÎÄ£¬ÄãÐèÒªÊ×ÏÈÔĶÁAndroid apk¶¯Ì¬¼ÓÔØ»úÖÆµÄÑо¿ÕâһϵÁÐÎÄÕ£¬·Ö±ðΪ£º
Android apk¶¯Ì¬¼ÓÔØ»úÖÆµÄÑо¿
Android apk¶¯Ì¬¼ÓÔØ»úÖÆµÄÑо¿£¨¶þ£©£º×ÊÔ´¼ÓÔØºÍactivityÉúÃüÖÜÆÚ¹ÜÀí
ÁíÍ⣬Õâ¸ö¿ªÔ´ÏîÄ¿ÎÒÆðÁ˸öÃû×Ö£¬½Ð×öDL¡£±¾ÎÄÖеÄDL¾ùÖ¸APK¶¯Ì¬¼ÓÔØ¿ò¼Ü¡£
ÔËÐÐЧ¹ûͼ:

ÒâÒå
ÕâÀï˵˵Õâ¸ö¿ªÔ´ÏîÄ¿µÄÒâÒå¡£Ê×ÏÈҪ˵µÄÊǶ¯Ì¬¼ÓÔØ¼¼Êõ£¨»òÕß˵²å¼þ»¯£©ÔÚ¼¼ÊõÇý¶¯Ð͵Ĺ«Ë¾ÖаçÑÝÕâÏàµ±ÖØÒªµÄ½ÇÉ«£¬µ±ÏîĿԽÀ´Ô½ÅÓ´óµÄʱºò£¬ÐèҪͨ¹ý²å¼þ»¯À´¼õÇáÓ¦ÓõÄÄÚ´æºÍcpuÕ¼Ó㬻¹¿ÉÒÔʵÏÖÈȲå°Î£¬¼´ÔÚ²»·¢²¼Ð°汾µÄÇé¿öϸüÐÂijЩģ¿é¡£
ÎÒ¼¸¸öÔÂǰ¿ªÊ¼½øÐÐÕâÏî¼¼ÊõµÄÑо¿£¬µ±Ê±²éѯÁ˺ܶà×ÊÁÏ£¬Ã»ÓÐÕÒµ½ºÜºÃµÄ¿ªÔ´¡£Ä¿Ç°ÌÔ±¦¡¢Î¢Ðŵȶ¼ÓгÉÊìµÄ¶¯Ì¬¼ÓÔØ¿ò¼Ü£¬°üÀ¨apkplug£¬µ«ÊÇËüÃǶ¼ÊDz»¿ªÔ´µÄ¡£»¹ÓÐgithubÉÏÓÐÒ»¸ö¿ªÔ´ÏîÄ¿AndroidDynamicLoader£¬Æä˼ÏëÊÇͨ¹ýFragment
ÒÔ¼° schemaµÄ·½Ê½ÊµÏ°µÄ£¬ÕâÊÇÒ»ÖÖ¿ÉÐеļ¼Êõ·½°¸£¬µ«ÊÇ»¹ÓÐÏÞÖÆÌ«¶à£¬ÕâÒâζÕâÄãµÄactivity±ØÐëͨ¹ýFragmentȥʵÏÖ£¬ÕâÔÚactivityÌø×ªºÍÁé»îÐÔÉÏÓÐÒ»¶¨µÄ²»±ã£¬ÔÚʵ¼ÊµÄʹÓÃÖлáÓÐһЩºÜÆæ¹ÖµÄbug²»ºÃ½â¾ö£¬×ÜÖ®£¬Õ⻹ÊÇÒ»ÖÖ²»ÊÇÌØ±ðÍ걸µÄ¶¯Ì¬¼ÓÔØ¼¼Êõ¡£È»ºó£¬ÎÒ·¢ÏÖ£¬Ä¿Ç°Õë¶Ô¶¯Ì¬¼ÓÔØÕâÒ»¿é³ÉÊìµÄ¿ªÔ´»ù±¾»¹Êǿհ׵쬲»¹ÜÊǹúÄÚ»¹ÊǹúÍâ¡£¶øÔÚ¹«Ë¾ÄÚ²¿£¬¶¯Ì¬¼ÓÔØ×÷ΪһÏîºËÐļ¼Êõ£¬Ò²²»¿ÉÄÜÊdzõ¼¶¿ª·¢ÈËÔ±ËùÄܹ»½Ó´¥µ½µÄ£¬ÓÚÊÇ£¬ÎÒ¾ö¶¨×öÒ»¸ö³ÉÊìµãµÄ¿ªÔ´£¬ÆÚ´ýÄÜÌî²¹ÕâÒ»¿é¿Õ°×¡£
DL¹¦ÄܽéÉÜ
DLÖ§³ÖºÜ¶àÌØÐÔ£¬¶øÕâÐ©ÌØÐÔʹµÃ²å¼þµÄ¿ª·¢¹ý³Ì±äµÃ͸Ã÷¡¢¸ßЧ¡£
1. pluginÎÞÐè°²×°¼´¿ÉÓÉËÞÖ÷µ÷Æð¡£
2. Ö§³ÖÓÃR·ÃÎÊplugin×ÊÔ´
3. pluginÖ§³ÖActivityºÍFragmentActivity£¨Î´À´»¹½«Ö§³ÖÆäËû×é¼þ£©
4. »ù±¾ÎÞ·´Éäµ÷ÓÃ
5. ²å¼þ°²×°ºóÈԿɶÀÁ¢ÔËÐдӶø±ãÓÚµ÷ÊÔ
6. Ö§³Ö3ÖÖplugin¶ÔhostµÄµ÷ÓÃģʽ£º
£¨1£©ÎÞµ÷Ó㨵«ÈÔÈ»¿ÉÒÔÓ÷´Éäµ÷Óã©¡£
£¨2£©²¿·Öµ÷Óã¬host¿É¹«¿ª²¿·Ö½Ó¿Ú¹©pluginµ÷ÓᣠÕâǰÁ½ÖÖģʽÊÊÓÃÓÚplugin¿ª·¢ÕßÎÞ·¨»ñµÃhost´úÂëµÄÇé¿ö¡£
£¨3£©ÍêÈ«µ÷Óã¬plugin¿ÉÒÔÍêÈ«µ÷ÓÃhostÄÚÈÝ¡£ÕâÖÖģʽÊÊÓÃÓÚplugin¿ª·¢ÕßÄÜ»ñµÃhost´úÂëµÄÇé¿ö¡£
7. Ö»ÐèÒýÈëDLµÄÒ»¸öjar°ü¼´¿É¸ßЧ¿ª·¢²å¼þ£¬DLµÄ¹¤×÷¹ý³Ì¶Ô¿ª·¢ÕßÍêȫ͸Ã÷
8. Ö§³Öandroid2.x°æ±¾
¼Ü¹¹½âÎö
Èç¹û´ó¼ÒÔĶÁ¹ý±¾ÎÄÍ·²¿Ìáµ½µÄÁ½ÆªÎÄÕ£¬ÄÇô¶ÔDLµÄ¼Ü¹¹Ó¦¸ÃÓдóÖµÄÁ˽⣬±¾ÎľͲ»ÔÙ´ÓÍ·¿ªÊ¼½éÉÜÁË£¬¶øÊÇ´ÓÈçϱä¸üµÄ¼¸·½Ãæ½øÐнâÎö£¬ÕâЩÓÅ»¯Ê¹µÃDLµÄ¹¦ÄܺÍ֮ǰ±ÈÆðÀ´¸ü¼ÓÇ¿´ó¸ü¼ÓÒ×ÓÃʹÓÃÒ×ÓÚÀ©Õ¹¡£
1. DL¶ÔactivityÉúÃüÖÜÆÚ¹ÜÀíµÄ¸Ä½ø
2. DL¶ÔÀà¼ÓÔØÆ÷µÄÖ§³Ö£¨DLClassLoader£©
3. DL¶ÔËÞÖ÷£¨host£©ºÍ²å¼þ£¨plugin£©Í¨ÐŵÄÖ§³Ö
4. DL¶Ô²å¼þ¶ÀÁ¢ÔËÐеÄÖ§³Ö
5. DL¶ÔactivityËæÒâÌø×ªµÄÖ§³Ö£¨DLIntent£©
6. DL¶Ô²å¼þ¹ÜÀíµÄÖ§³Ö£¨DLPluginManager£©
ÆäÖÐ5ºÍ6ÊôÓÚ¼ÓÇ¿¹¦ÄÜ£¬Ä¿Ç°ÕýÔÚdev·ÖÖ§ÉϽøÐпª·¢£¨±¾ÎÄÔݲ»½éÉÜ£©£¬ÆäËû¹¦ÄܾùÔÚÎȶ¨°æ·ÖÖ§masterÉÏ¡£
DL¶ÔactivityÉúÃüÖÜÆÚ¹ÜÀíµÄ¸Ä½ø
´ó¼ÒÖªµÀ£¬DL×ʼµÄʱºò²ÉÓ÷´ÉäÈ¥¹ÜÀíactivityµÄÉúÃüÖÜÆÚ£¬ÕâÑù´æÔÚһЩ²»±ã£¬±ÈÈç·´Éä´úÂëдÆðÀ´¸´ÔÓ£¬²¢ÇÒ¹ý¶àʹÓ÷´ÉäÓÐÒ»¶¨µÄÐÔÄÜ¿ªÏú¡£Õë¶ÔÕâ¸öÎÊÌ⣬ÎÒÃDzÉÓÃÁ˽ӿڻúÖÆ£¬½«activityµÄ´ó²¿·ÖÉúÃüÖÜÆÚ·½·¨ÌáÈ¡³öÀ´×÷Ϊһ¸ö½Ó¿Ú£¨DLPlugin£©£¬È»ºóͨ¹ý´úÀíactivity£¨DLProxyActivity£©È¥µ÷Óòå¼þactivityʵÏÖµÄÉúÃüÖÜÆÚ·½·¨£¬ÕâÑù¾ÍÍê³ÉÁ˲å¼þactivityµÄÉúÃüÖÜÆÚ¹ÜÀí£¬²¢ÇÒûÓвÉÓ÷´É䣬µ±ÎÒÃÇÏëÔö¼ÓÒ»¸öеÄÉúÃüÖÜÆÚ·½·¨µÄʱºò£¬Ö»ÐèÒªÔÚ½Ó¿ÚÖÐÉùÃ÷Ò»ÏÂͬʱÔÚ´úÀíactivityÖÐʵÏÖһϼ´¿É£¬ÏÂÃæ¿´Ò»Ï´úÂ룺
½Ó¿ÚDLPlugin
public interface DLPlugin { public void onStart(); public void onRestart(); public void onActivityResult(int requestCode, int resultCode, Intent data); public void onResume(); public void onPause(); public void onStop(); public void onDestroy(); public void onCreate(Bundle savedInstanceState); public void setProxy(Activity proxyActivity, String dexPath); public void onSaveInstanceState(Bundle outState); public void onNewIntent(Intent intent); public void onRestoreInstanceState(Bundle savedInstanceState); public boolean onTouchEvent(MotionEvent event); public boolean onKeyUp(int keyCode, KeyEvent event); public void onWindowAttributesChanged(LayoutParams params); public void onWindowFocusChanged(boolean hasFocus); public void onBackPressed(); }
|
ÔÚ´úÀíÀàDLProxyActivityÖеÄʵÏÖ
@Override protected void onStart() { mRemoteActivity.onStart(); super.onStart(); } @Override protected void onRestart() { mRemoteActivity.onRestart(); super.onRestart(); } @Override protected void onResume() { mRemoteActivity.onResume(); super.onResume(); } @Override protected void onPause() { mRemoteActivity.onPause(); super.onPause(); } @Override protected void onStop() { mRemoteActivity.onStop(); super.onStop(); } ... |
˵Ã÷£ºÍ¨¹ýÉÏÊö´úÂëÓ¦¸Ã²»ÄÑÀí½âDL¶ÔactivityÉúÃüÖÜÆÚµÄ¹ÜÀí£¬ÆäÖÐmRemoteActivity¾ÍÊÇDLPluginµÄʵÏÖ¡£
DL¶ÔÀà¼ÓÔØÆ÷µÄÖ§³Ö
ΪÁ˸üºÃµØ¶Ô¶à²å¼þ½øÐÐÖ§³Ö£¬ÎÒÃÇÌṩÁËÒ»¸öDLClassoaderÀ࣬רÃÅÈ¥¹ÜÀí¸÷¸ö²å¼þµÄDexClassoader£¬ÕâÑù£¬Í¬Ò»¸ö²å¼þ¾Í¿ÉÒÔ²ÉÓÃͬһ¸öClassLoaderÈ¥¼ÓÔØÀà´Ó¶ø±ÜÃâ¶à¸öclassloader¼ÓÔØÍ¬Ò»¸öÀàʱËùÒý·¢µÄÀàÐÍת»»´íÎó¡£
public class DLClassLoader extends DexClassLoader { private static final String TAG = "DLClassLoader"; private static final HashMap<String, DLClassLoader> mPluginClassLoaders = new HashMap<String, DLClassLoader>(); protected DLClassLoader(String dexPath, String optimizedDirectory, String libraryPath, ClassLoader parent) { super(dexPath, optimizedDirectory, libraryPath, parent); } /** * return a available classloader which belongs to different apk */ public static DLClassLoader getClassLoader(String dexPath, Context context, ClassLoader parentLoader) { DLClassLoader dLClassLoader = mPluginClassLoaders.get(dexPath); if (dLClassLoader != null) return dLClassLoader; File dexOutputDir = context.getDir("dex", Context.MODE_PRIVATE); final String dexOutputPath = dexOutputDir.getAbsolutePath(); dLClassLoader = new DLClassLoader(dexPath, dexOutputPath, null, parentLoader); mPluginClassLoaders.put(dexPath, dLClassLoader); return dLClassLoader; } } |
DL¶ÔËÞÖ÷£¨host£©ºÍ²å¼þ£¨plugin£©Í¨ÐŵÄÖ§³Ö
ÕâÒ»µãºÜÖØÒª£¬ÒòΪÍùÍùËÞÖ÷ÐèÒªºÍ²å¼þ½øÐи÷ÖÖͨÐÅ£¬Òò´ËDL¶ÔËÞÖ÷ºÍ²å¼þµÄͨÐÅ×öÁ˺ܺõÄÖ§³Ö£¬Ä¿Ç°×ܹ²ÓÐ3ÖÐģʽ£¬ÈçÏÂͼËùʾ£º

ÏÂÃæ·Ö±ð½éÉÜÉÏÊöÈýÖÖģʽ£¬Õë¶ÔÉÏÊöÈýÖÖģʽ£¬ÎÒÃÇ·Ö±ðÌṩÁË3×éÀý×Ó£¬ÆäÖУº
1. depend_on_host£º²å¼þÍêÈ«ÒÀÀµËÞÖ÷µÄģʽ£¬ÊʺÏÓÚÄܹ»Äܵ½ËÞÖ÷µÄÔ´´úÂëµÄÇé¿ö
ÆäÖÐhostÖ¸ËÞÖ÷¹¤³Ì£¬pluginÖ¸²å¼þ¹¤³Ì

2. depend_on_interface£º²å¼þ²¿·ÖÒÀÀµËÞÖ÷µÄģʽ£¬»òÕß˵²å¼þÒÀÀµËÞÖ÷ÌṩµÄ½Ó¿Ú£¬ÊʺÏÄܹ»Äõ½ËÞÖ÷µÄ½Ó¿ÚµÄÇé¿ö
ÆäÖÐhostÖ¸ËÞÖ÷¹¤³Ì£¬pluginÖ¸²å¼þ¹¤³Ì£¬commonÖ¸½Ó¿Ú¹¤³Ì
3. main£º²å¼þ²»ÒÀÀµËÞÖ÷µÄģʽ£¬ÕâÊÇDLÍÆ¼öµÄģʽ
ÆäÖÐhostÖ¸ËÞÖ÷¹¤³Ì£¬pluginÖ¸²å¼þ¹¤³Ì
ģʽ1£ºÕâÊÇDLÍÆ¼öµÄģʽ£¬¶ÔÓ¦µÄ¹¤³ÌĿ¼Ϊmain¡£ÔÚÕâÖÖģʽÏ£¬ËÞÖ÷ºÍ²å¼þ²»ÐèҪͨÐÅ£¬Á½ÕßÊǶÀÁ¢¿ª·¢µÄ£¬ËÞÖ÷ÒýÓÃDLµÄjar°ü£¨dl-lib.jar£©£¬²å¼þÒ²ÐèÒªÒýÓÃDLµÄjar°ü£¬µ«ÊDz»ÄÜ·ÅÈëµ½²å¼þ¹¤³ÌµÄlibsĿ¼ÏÂÃæ£¬»»¾ä»°Ëµ£¬¾ÍÊDzå¼þ±àÒëµÄʱºòÒÀÀµjar°üµ«ÊÇ´ò°ü³ÉapkµÄʱºò²»Òª°Ñjar°ü´ò½øÈ¥£¬ÕâÊÇÒòΪ£¬dl-lib.jarÒѾÔÚËÞÖ÷¹¤³ÌÖдæÔÚÁË£¬Èç¹û²å¼þÖÐÒ²ÓÐÕâ¸öjar°ü£¬¾Í»á·¢ÉúÀàÁ´½Ó´íÎó£¬ÔÒòºÜ¼òµ¥£¬ÄÚ´æÖÐÓÐÁ½·ÝÒ»ÑùµÄÀà£¬ÖØ¸´ÁË¡£ÖÁÓÚsupport-v4Ò²ÊÇͬÑùµÄµÀÀí¡£¶ÔÓÚeclipseºÜ¼òµ¥£¬Ö»ÐèÒªÔÚ²å¼þ¹¤³ÌÖд´½¨Ò»¸öĿ¼£¬±ÈÈçexternal-jars£¬È»ºó°Ñdl-lib.jarºÍsupport-v4.jar·Å½øÈ¥£¬Í¬Ê±ÔÚ.classpathÖÐ×·¼ÓÈçÏÂÁ½¾ä¼´¿É£º
<classpathentry kind="lib" path="external-jars/dl-lib.jar"/> <classpathentry kind="lib" path="external-jars/android-support-v4.jar"/> |
ÕâÑù£¬±àÒëµÄʱºò¾ÍÄܹ»Õý³£½øÐУ¬µ«ÊÇ´ò°üµÄʱºò£¬¾Í²»»á°ÑÉÏÃæÁ½¸öjar°ü´òÈëµ½²å¼þapkÖС£
ÖÁÓÚant»·¾³ºÍgradle£¬½â¾ö°ì·¨²»Ò»Ñù£¬¾ßÌå·½·¨ºóÃæÔÙ²¹ÉÏ£¬µ«ÊÇ˼Ïë¶¼ÊÇÒ»ÑùµÄ£¬¼´£º²å¼þapkÖв»Òª´òÈëÉÏÊö2¸öjar°ü¡£
ģʽ2£º²å¼þ²¿·ÖÒÀÀµËÞÖ÷µÄģʽ£¬»òÕß˵²å¼þÒÀÀµËÞÖ÷ÌṩµÄ½Ó¿Ú£¬ÊʺÏÄܹ»Äõ½ËÞÖ÷µÄ½Ó¿ÚµÄÇé¿ö¡£ÔÚÕâÖÖģʽÏ£¬ËÞÖ÷·Å³öһЩ½Ó¿Ú²¢ÊµÏÖһЩ½Ó¿Ú£¬È»ºó¸ø²å¼þµ÷Óã¬ÕâÑù²å¼þ¾Í¿ÉÒÔ·ÃÎÊËÞÖ÷µÄһЩ·þÎñµÈ
ģʽ3£º²å¼þÍêÈ«ÒÀÀµËÞÖ÷µÄģʽ£¬ÊʺÏÓÚÄܹ»Äܵ½ËÞÖ÷µÄÔ´´úÂëµÄÇé¿ö¡£ÕâÖÖģʽһ°ã¶àÓÃÔÚ¹«Ë¾ÄÚ²¿£¬²å¼þ¿ÉÒÔ·ÃÎÊËÞÖ÷µÄËùÓдúÂ룬µ«ÊÇ£¬ÕâÑù²å¼þºÍËÞÖ÷µÄñîºÏ±È½Ï¸ß£¬ËÞÖ÷Ò»¶¯£¬²å¼þ¾Í±ØÐ붯£¬±È½ÏÂé·³
¾ßÌå²ÉÓÃÄÄÖÖ·½Ê½£¬ÐèÒª½áºÏʵ¼ÊÇé¿öÀ´Ñ¡Ôñ£¬Ò»°ãÀ´Ëµ£¬Èç¹ûÊÇËÞÖ÷ºÍ²å¼þ²»ÊÇͬһ¸ö¹«Ë¾¿ª·¢£¬½¨ÒéÑ¡Ôñģʽ1ºÍģʽ2£»Èç¹ûËÞÖ÷ºÍ²å¼þ¶¼ÔÚͬһ¸ö¹«Ë¾¿ª·¢£¬ÄÇôѡÔñÄĸö¶¼¿ÉÒÔ¡£´ÓDLµÄʵÏÖ³ö·¢£¬ÎÒÃÇÍÆ¼ö²ÉÓÃģʽ1£¬ÕæµÄÐèҪͨÐŵϰ²ÉÓÃģʽ2£¬¾¡Á¿²»Òª²ÉÓÃģʽ3.
DL¶Ô²å¼þ¶ÀÁ¢ÔËÐеÄÖ§³Ö
ΪÁ˱ãÓÚµ÷ÊÔ£¬²ÉÓÃDLËù¿ª·¢µÄ²å¼þ¶¼¿ÉÒÔ¶ÀÁ¢ÔËÐУ¬µ±È»£¬ÕâÒª·ÖÇé¿öÀ´Ëµ£º
¶ÔÓÚģʽ1£¬Èç¹û²å¼þÏë¶ÀÁ¢ÔËÐУ¬Ö»ÐèÒª°Ñexternal-jarsϵÄjar°ü¿½±´Ò»·Ýµ½²å¼þµÄlibsĿ¼Ï¼´¿É
¶ÔÓÚģʽ2£¬Ö»ÐèÒªÌṩһ¸öËÞÖ÷½Ó¿ÚµÄĬÈÏʵÏÖ¼´¿É
¶ÔÓÚģʽ3£¬Ö»ÐèÒªapk´ò°üʱ°ÑËùÒýÓõÄËÞÖ÷´úÂë´ò°ü½øÈ¥¼´¿É£¬¾ßÌ巽ʽ¿ÉÒԲο´sample/depend_on_hostĿ¼¡£
ÔÚ¿ª·¢¹ý³ÌÖУ¬Ó¦¸ÃÏÈ¿ªÆô²å¼þµÄ¶ÀÁ¢ÔËÐй¦ÄÜÒÔ±ãÓÚµ÷ÊÔ£¬µÈ¹¦ÄÜ¿ª·¢Íê±ÏºóÔÙ½«Æä²å¼þ»¯¡£
DLIntentºÍDLPluginManager
ÕâÁ½Ïî¶¼ÊôÓÚ¼ÓÇ¿¹¦ÄÜ£¬Ä¿Ç°ÕýÔÚdev·ÖÖ§½øÐÐcode review£¬´ó¼Ò¸ÐÐËȤ¿ÉÒÔÈ¥dev·ÖÖ§Éϲ鿴£¬µÈÑé֤ͨ¹ý¼´mergeµ½Îȶ¨°æmaster·ÖÖ§¡£
DLIntent£ºÍ¨¹ýDLIntentÀ´Íê³ÉactivityµÄÎÞÔ¼Êøµ÷Æð
DLPluginManager£º¶ÔËÞÖ÷µÄËùÓвå¼þÌṩ×ۺϹÜÀí¹¦ÄÜ¡£
¿ª·¢¹æ·¶
ĿǰDLÒѾ´ïµ½Á˵ÚÒ»¸öÎȶ¨°æ£¬¾¹ý´óÁ¿»úÐ͵ÄÑéÖ¤£¬Ä¿Ç°µÃ³öµÄ½áÂÛÊÇDLÊǿɿ¿µÄ£¨¼æÈݵ½android2.x£©£¬¿ÉÒÔÓÃÔÚʵ¼ÊµÄÓ¦Óÿª·¢ÖС£µ«ÊÇ£¬ÎÒÃÇÖªµÀ£¬¶¯Ì¬¼ÓÔØÊÇÒ»¸ö¼¼Êõ±ÚÀÝ£¬ÆäºÜÄÑ´ïµ½Ò»ÖÖÍêÃÀµÄ״̬£¬±Ï¾¹£¬ÈÃÒ»¸öapk²»°²×°ÅÜÆðÀ´£¬ÕâÊǶàô²»¿É˼ÒéµÄÊÂÇé¡£Òò´Ë£¬Ï£Íû´ó¼Ò±çÖ¤µØÈ¥¿´Õâ¸öÎÊÌ⣬ÏÂÃæÁгöÎÒÃÇĿǰ»¹²»Ö§³ÖµÄ¹¦ÄÜ£¬»òÕß˵ÊÇÒ»ÖÖ¿ª·¢¹æ·¶°É£¬Ï£Íû´ó¼ÒÔÚ¿ª·¢¹ý³ÌÖÐÈ¥×ñÊØÕâ¸ö¹æ·¶£¬ÕâÑù²ÅÄÜÈòå¼þÎȶ¨µØÅÜÆðÀ´¡£
DL 1.0¿ª·¢¹æ·¶£º
1. Ŀǰ²»Ö§³Öservice
2. Ŀǰֻ֧³Ö¶¯Ì¬×¢²á¹ã²¥
3. Ŀǰ֧³ÖActivityºÍFragmentActivity£¬ÕâÒ²Êdz£ÓõÄactivity
4. Ŀǰ²»Ö§³Ö²å¼þÖеÄassets
5. µ÷ÓÃContextµÄʱºò£¬ÇëÊʵ±Ê¹ÓÃthat£¬´ó²¿·Ö³£ÓÃapiÊDz»ÐèÒªÓÃthatµÄ£¬µ«ÊÇһЩ²»³£ÓÃapi»¹ÊÇÐèÒªÓÃthatÀ´·ÃÎÊ¡£thatÊÇapkÖÐactivityµÄ»ùÀàBaseActivityϵÁÐÖеÄÒ»¸ö³ÉÔ±£¬ËüÔÚapk°²×°ÔËÐеÄʱºòÖ¸Ïòthis£¬¶øÔÚδ°²×°µÄʱºòÖ¸ÏòËÞÖ÷³ÌÐòÖеĴúÀíactivity£¬ÓÉÓÚthatµÄ¶¯Ì¬·ÖÅäÌØÐÔ£¬Í¨¹ýthatÈ¥µ÷ÓÃactivityµÄ³ÉÔ±·½·¨£¬ÔÚapk°²×°ÒÔºóÈÔÈ»¿ÉÒÔÕý³£ÔËÐС£
6. É÷ÖØÊ¹ÓÃthis£¬ÒòΪthisÖ¸ÏòµÄÊǵ±Ç°¶ÔÏ󣬼´apkÖеÄactivity£¬µ«ÊÇÓÉÓÚactivityÒѾ²»Êdz£¹æÒâÒåÉϵÄactivity£¬ËùÒÔthisÊÇûÓÐÒâÒåµÄ£¬µ«ÊÇ£¬µ±this±íʾµÄ²»ÊÇContext¶ÔÏóµÄʱºò³ýÍ⣬±ÈÈçthis±íʾһ¸öÓÉactivityʵÏֵĽӿڡ£
Ï£ÍûÄܹ»¸ø´ó¼Ò´øÀ´Ò»Ð©°ïÖú£¬Ï£Íû´ó¼Ò¶à¶àÖ§³Ö£¡
|