Skip to content

Commit f65c74d

Browse files
committed
优化
1 parent 326f29f commit f65c74d

12 files changed

+118
-84
lines changed

PluginCore/src/com/plugin/core/PluginBaseContextWrapper.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import android.os.Handler;
3030
import android.os.UserHandle;
3131

32+
import com.plugin.core.manager.PluginManagerHelper;
3233
import com.plugin.util.LogUtil;
3334

3435
import java.util.ArrayList;
@@ -184,7 +185,7 @@ public boolean bindService(Intent service, ServiceConnection conn, int flags) {
184185

185186
@Override
186187
public Context createPackageContext(String packageName, int flags) throws PackageManager.NameNotFoundException {
187-
if (PluginLoader.getPluginDescriptorByPluginId(packageName) != null) {
188+
if (PluginManagerHelper.getPluginDescriptorByPluginId(packageName) != null) {
188189
return PluginLoader.getNewPluginApplicationContext(packageName);
189190
}
190191
return super.createPackageContext(packageName, flags);

PluginCore/src/com/plugin/core/PluginCreator.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import java.util.List;
55

66
import com.plugin.content.PluginDescriptor;
7+
import com.plugin.core.manager.PluginManagerHelper;
78
import com.plugin.util.LogUtil;
89
import com.plugin.util.RefInvoker;
910

@@ -116,7 +117,7 @@ private static String[] buildAssetPath(boolean isStandalone, String app, String
116117
//这里只处理1级依赖,若被依赖的插件又依赖其他插件,这里不做支持
117118
//插件依赖插件,如果被依赖的插件中包含资源文件,则需要在所有的插件中提供public.xml文件来分组资源id
118119
for(int i = 0; i < dependencies.length; i++) {
119-
PluginDescriptor pd = PluginLoader.getPluginDescriptorByPluginId(dependencies[i]);
120+
PluginDescriptor pd = PluginManagerHelper.getPluginDescriptorByPluginId(dependencies[i]);
120121
if (pd != null) {
121122
assetPaths[1+ i] = pd.getInstalledPath();
122123
} else {

PluginCore/src/com/plugin/core/PluginInjector.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import com.plugin.core.annotation.AnnotationProcessor;
2525
import com.plugin.core.annotation.FragmentContainer;
2626
import com.plugin.core.app.ActivityThread;
27+
import com.plugin.core.manager.PluginManagerHelper;
2728
import com.plugin.util.LogUtil;
2829
import com.plugin.util.ProcessUtil;
2930
import com.plugin.util.RefInvoker;
@@ -124,7 +125,7 @@ static void injectActivityContext(Activity activity) {
124125

125126
if (!TextUtils.isEmpty(fragmentContainer.pluginId())) {
126127

127-
pd = PluginLoader.getPluginDescriptorByPluginId(fragmentContainer.pluginId());
128+
pd = PluginManagerHelper.getPluginDescriptorByPluginId(fragmentContainer.pluginId());
128129

129130
LoadedPlugin plugin = PluginLauncher.instance().getRunningPlugin(fragmentContainer.pluginId());
130131

@@ -143,7 +144,7 @@ static void injectActivityContext(Activity activity) {
143144
@SuppressWarnings("rawtypes")
144145
Class clazz = PluginLoader.loadPluginFragmentClassById(classId);
145146

146-
pd = PluginLoader.getPluginDescriptorByClassName(clazz.getName());
147+
pd = PluginManagerHelper.getPluginDescriptorByClassName(clazz.getName());
147148

148149
LoadedPlugin plugin = PluginLauncher.instance().getRunningPlugin(pd.getPackageName());
149150

@@ -159,7 +160,7 @@ static void injectActivityContext(Activity activity) {
159160

160161
} else {
161162
//是打开插件中的activity
162-
pd = PluginLoader.getPluginDescriptorByClassName(activity.getClass().getName());
163+
pd = PluginManagerHelper.getPluginDescriptorByClassName(activity.getClass().getName());
163164

164165
LoadedPlugin plugin = PluginLauncher.instance().getRunningPlugin(pd.getPackageName());
165166

@@ -302,7 +303,7 @@ static void resetWindowConfig(final Context pluginContext, final PluginDescripto
302303
Service service = itr.next();
303304
if (service != null && service.getClass().getName().equals(serviceName) ) {
304305

305-
PluginDescriptor pd = PluginLoader.getPluginDescriptorByClassName(serviceName);
306+
PluginDescriptor pd = PluginManagerHelper.getPluginDescriptorByClassName(serviceName);
306307

307308
LoadedPlugin plugin = PluginLauncher.instance().getRunningPlugin(pd.getPackageName());
308309

PluginCore/src/com/plugin/core/PluginInstrumentionWrapper.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import com.plugin.core.annotation.AnnotationProcessor;
1818
import com.plugin.core.annotation.ComponentContainer;
1919
import com.plugin.core.manager.PluginActivityMonitor;
20+
import com.plugin.core.manager.PluginManagerHelper;
2021
import com.plugin.core.systemservice.AndroidWebkitWebViewFactoryProvider;
2122
import com.plugin.core.viewfactory.PluginViewFactory;
2223
import com.plugin.util.LogUtil;
@@ -58,7 +59,7 @@ public Application newApplication(ClassLoader cl, String className, Context cont
5859
throws InstantiationException, IllegalAccessException,
5960
ClassNotFoundException {
6061
if (ProcessUtil.isPluginProcess()) {
61-
PluginDescriptor pluginDescriptor = PluginLoader.getPluginDescriptorByClassName(className);
62+
PluginDescriptor pluginDescriptor = PluginManagerHelper.getPluginDescriptorByClassName(className);
6263
if (pluginDescriptor != null) {
6364
return PluginLauncher.instance().getRunningPlugin(pluginDescriptor.getPackageName()).pluginApplication;
6465
}

PluginCore/src/com/plugin/core/PluginIntentResolver.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import com.plugin.content.PluginActivityInfo;
99
import com.plugin.content.PluginDescriptor;
1010
import com.plugin.content.PluginReceiverIntent;
11+
import com.plugin.core.manager.PluginManagerHelper;
1112
import com.plugin.util.LogUtil;
1213
import com.plugin.util.RefInvoker;
1314

@@ -106,7 +107,7 @@ public static void resolveActivity(Intent intent) {
106107
if (classNameList != null && classNameList.size() > 0) {
107108

108109
String className = classNameList.get(0);
109-
PluginDescriptor pd = PluginLoader.getPluginDescriptorByClassName(className);
110+
PluginDescriptor pd = PluginManagerHelper.getPluginDescriptorByClassName(className);
110111

111112
PluginActivityInfo pluginActivityInfo = pd.getActivityInfos().get(className);
112113

PluginCore/src/com/plugin/core/PluginLauncher.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import com.plugin.core.app.ActivityThread;
1919
import com.plugin.core.localservice.LocalServiceManager;
2020
import com.plugin.core.manager.PluginActivityMonitor;
21+
import com.plugin.core.manager.PluginManagerHelper;
2122
import com.plugin.core.systemservice.AndroidWebkitWebViewFactoryProvider;
2223
import com.plugin.util.LogUtil;
2324
import com.plugin.util.ProcessUtil;
@@ -71,7 +72,7 @@ public LoadedPlugin startPlugin(String packageName) {
7172
if (plugin == null) {
7273
LogUtil.e("正在初始化插件 " + packageName + ": Resources, DexClassLoader, Context, Application");
7374

74-
PluginDescriptor pluginDescriptor = PluginLoader.getPluginDescriptorByPluginId(packageName);
75+
PluginDescriptor pluginDescriptor = PluginManagerHelper.getPluginDescriptorByPluginId(packageName);
7576

7677
Resources pluginRes = PluginCreator.createPluginResource(
7778
PluginLoader.getApplicatoin().getApplicationInfo().sourceDir,

PluginCore/src/com/plugin/core/PluginLoader.java

Lines changed: 14 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.plugin.core;
22

33
import java.util.ArrayList;
4-
import java.util.Collection;
54
import java.util.Iterator;
65
import java.util.List;
76

@@ -18,7 +17,7 @@
1817
import com.plugin.content.LoadedPlugin;
1918
import com.plugin.content.PluginDescriptor;
2019
import com.plugin.core.localservice.LocalServiceManager;
21-
import com.plugin.core.manager.PluginManagerProvider;
20+
import com.plugin.core.manager.PluginManagerHelper;
2221
import com.plugin.core.systemservice.AndroidAppIActivityManager;
2322
import com.plugin.core.systemservice.AndroidAppINotificationManager;
2423
import com.plugin.core.systemservice.AndroidAppIPackageManager;
@@ -38,6 +37,10 @@ public class PluginLoader {
3837
private PluginLoader() {
3938
}
4039

40+
public static Application getApplicatoin() {
41+
return sApplication;
42+
}
43+
4144
/**
4245
* 初始化loader, 只可调用一次
4346
*
@@ -71,7 +74,7 @@ public void run() {
7174
PluginInjector.injectBaseContext(sApplication);
7275

7376
if (ProcessUtil.isPluginProcess()) {
74-
Iterator<PluginDescriptor> itr = getPlugins().iterator();
77+
Iterator<PluginDescriptor> itr = PluginManagerHelper.getPlugins().iterator();
7578
while (itr.hasNext()) {
7679
PluginDescriptor plugin = itr.next();
7780
LocalServiceManager.registerService(plugin);
@@ -121,24 +124,17 @@ public static Context fixBaseContextForReceiver(Context superApplicationContext)
121124
}
122125
}
123126

124-
public static int installPlugin(String srcFile) {
125-
Bundle bundle = sApplication.getContentResolver().call(PluginManagerProvider.CONTENT_URI,
126-
PluginManagerProvider.ACTION_INSTALL, srcFile, null);
127-
return bundle.getInt(PluginManagerProvider.INSTALL_RESULT);
128-
}
129127

130128
/**
131129
* 根据插件中的classId加载一个插件中的class
132130
*
133131
* @param clazzId
134132
* @return
135133
*/
134+
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
136135
@SuppressWarnings("rawtypes")
137136
public static Class loadPluginFragmentClassById(String clazzId) {
138-
139-
Bundle bundle = sApplication.getContentResolver().call(PluginManagerProvider.CONTENT_URI, PluginManagerProvider.ACTION_QUERY_BY_FRAGMENT_ID, clazzId, null);
140-
PluginDescriptor pluginDescriptor = (PluginDescriptor)bundle.getSerializable(PluginManagerProvider.QUERY_BY_FRAGMENT_ID_RESULT);
141-
137+
PluginDescriptor pluginDescriptor = PluginManagerHelper.getPluginDescriptorByFragmentId(clazzId);
142138
if (pluginDescriptor != null) {
143139
//插件可能尚未初始化,确保使用前已经初始化
144140
LoadedPlugin plugin = PluginLauncher.instance().startPlugin(pluginDescriptor.getPackageName());
@@ -166,7 +162,7 @@ public static Class loadPluginFragmentClassById(String clazzId) {
166162
@SuppressWarnings("rawtypes")
167163
public static Class loadPluginClassByName(String clazzName) {
168164

169-
PluginDescriptor pluginDescriptor = getPluginDescriptorByClassName(clazzName);
165+
PluginDescriptor pluginDescriptor = PluginManagerHelper.getPluginDescriptorByClassName(clazzName);
170166

171167
if (pluginDescriptor != null) {
172168
//插件可能尚未初始化,确保使用前已经初始化
@@ -206,7 +202,7 @@ public static Class loadPluginClassByName(String clazzName) {
206202
public static Context getDefaultPluginContext(@SuppressWarnings("rawtypes") Class clazz) {
207203

208204
Context pluginContext = null;
209-
PluginDescriptor pluginDescriptor = getPluginDescriptorByClassName(clazz.getName());
205+
PluginDescriptor pluginDescriptor = PluginManagerHelper.getPluginDescriptorByClassName(clazz.getName());
210206

211207
if (pluginDescriptor != null) {
212208
pluginContext = PluginLauncher.instance().getRunningPlugin(pluginDescriptor.getPackageName()).pluginContext;;
@@ -243,7 +239,7 @@ public static Context getDefaultPluginContext(@SuppressWarnings("rawtypes") Clas
243239
}
244240

245241
public static Context getNewPluginApplicationContext(String pluginId) {
246-
PluginDescriptor pluginDescriptor = getPluginDescriptorByPluginId(pluginId);
242+
PluginDescriptor pluginDescriptor = PluginManagerHelper.getPluginDescriptorByPluginId(pluginId);
247243

248244
//插件可能尚未初始化,确保使用前已经初始化
249245
LoadedPlugin plugin = PluginLauncher.instance().startPlugin(pluginId);
@@ -265,53 +261,14 @@ public static Context getNewPluginApplicationContext(String pluginId) {
265261
}
266262

267263
public static boolean isInstalled(String pluginId, String pluginVersion) {
268-
PluginDescriptor pluginDescriptor = getPluginDescriptorByPluginId(pluginId);
264+
PluginDescriptor pluginDescriptor = PluginManagerHelper.getPluginDescriptorByPluginId(pluginId);
269265
if (pluginDescriptor != null) {
270266
LogUtil.d(pluginId, pluginDescriptor.getVersion(), pluginVersion);
271267
return pluginDescriptor.getVersion().equals(pluginVersion);
272268
}
273269
return false;
274270
}
275271

276-
public static Application getApplicatoin() {
277-
return sApplication;
278-
}
279-
280-
/**
281-
* 清除列表并不能清除已经加载到内存当中的class,因为class一旦加载后后无法卸载
282-
*/
283-
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
284-
public static synchronized void removeAll() {
285-
sApplication.getContentResolver().call(PluginManagerProvider.CONTENT_URI,
286-
PluginManagerProvider.ACTION_REMOVE_ALL, null, null);
287-
}
288-
289-
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
290-
public static synchronized void remove(String pluginId) {
291-
sApplication.getContentResolver().call(PluginManagerProvider.CONTENT_URI,
292-
PluginManagerProvider.ACTION_REMOVE, pluginId, null);
293-
}
294-
295-
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
296-
@SuppressWarnings("unchecked")
297-
public static Collection<PluginDescriptor> getPlugins() {
298-
Bundle bundle = sApplication.getContentResolver().call(PluginManagerProvider.CONTENT_URI,
299-
PluginManagerProvider.ACTION_QUERY_ALL, null, null);
300-
return (Collection<PluginDescriptor>)bundle.getSerializable(PluginManagerProvider.QUERY_ALL_RESULT);
301-
}
302-
303-
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
304-
public static PluginDescriptor getPluginDescriptorByPluginId(String pluginId) {
305-
Bundle bundle = sApplication.getContentResolver().call(PluginManagerProvider.CONTENT_URI, PluginManagerProvider.ACTION_QUERY_BY_ID, pluginId, null);
306-
return (PluginDescriptor)bundle.getSerializable(PluginManagerProvider.QUERY_BY_ID_RESULT);
307-
}
308-
309-
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
310-
public static PluginDescriptor getPluginDescriptorByClassName(String clazzName) {
311-
Bundle bundle = sApplication.getContentResolver().call(PluginManagerProvider.CONTENT_URI, PluginManagerProvider.ACTION_QUERY_BY_CLASS_NAME, clazzName, null);
312-
return (PluginDescriptor)bundle.getSerializable(PluginManagerProvider.QUERY_BY_CLASS_NAME_RESULT);
313-
}
314-
315272
/**
316273
*/
317274
public static ArrayList<String> matchPlugin(Intent intent, int type) {
@@ -322,7 +279,7 @@ public static ArrayList<String> matchPlugin(Intent intent, int type) {
322279
packageName = intent.getComponent().getPackageName();
323280
}
324281
if (packageName != null && !packageName.equals(PluginLoader.getApplicatoin().getPackageName())) {
325-
PluginDescriptor dp = getPluginDescriptorByPluginId(packageName);
282+
PluginDescriptor dp = PluginManagerHelper.getPluginDescriptorByPluginId(packageName);
326283
if (dp != null) {
327284
List<String> list = dp.matchPlugin(intent, type);
328285
if (list != null && list.size() > 0) {
@@ -333,7 +290,7 @@ public static ArrayList<String> matchPlugin(Intent intent, int type) {
333290
}
334291
}
335292
} else {
336-
Iterator<PluginDescriptor> itr = getPlugins().iterator();
293+
Iterator<PluginDescriptor> itr = PluginManagerHelper.getPlugins().iterator();
337294
while (itr.hasNext()) {
338295
List<String> list = itr.next().matchPlugin(intent, type);
339296
if (list != null && list.size() > 0) {

PluginCore/src/com/plugin/core/PluginThemeHelper.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import com.plugin.content.LoadedPlugin;
88
import com.plugin.content.PluginDescriptor;
9+
import com.plugin.core.manager.PluginManagerHelper;
910
import com.plugin.util.LogUtil;
1011

1112
import java.lang.reflect.Field;
@@ -14,7 +15,7 @@
1415
public class PluginThemeHelper {
1516

1617
public static int getPluginThemeIdByName(String pluginId, String themeName) {
17-
PluginDescriptor pd = PluginLoader.getPluginDescriptorByPluginId(pluginId);
18+
PluginDescriptor pd = PluginManagerHelper.getPluginDescriptorByPluginId(pluginId);
1819
if (pd != null) {
1920
//插件可能尚未初始化,确保使用前已经初始化
2021
LoadedPlugin plugin = PluginLauncher.instance().startPlugin(pluginId);
@@ -28,7 +29,7 @@ public static int getPluginThemeIdByName(String pluginId, String themeName) {
2829

2930
public static HashMap<String, Integer> getAllPluginThemes(String pluginId) {
3031
HashMap<String, Integer> themes = new HashMap<String, Integer>();
31-
PluginDescriptor pd = PluginLoader.getPluginDescriptorByPluginId(pluginId);
32+
PluginDescriptor pd = PluginManagerHelper.getPluginDescriptorByPluginId(pluginId);
3233
if (pd != null) {
3334
//插件可能尚未初始化,确保使用前已经初始化
3435
LoadedPlugin pluing = PluginLauncher.instance().startPlugin(pluginId);
@@ -67,7 +68,7 @@ public static void applyPluginTheme(Activity activity, String pluginId, int them
6768
LayoutInflater layoutInflater = LayoutInflater.from(activity);
6869
if (layoutInflater.getFactory() == null) {
6970
if (!(activity.getBaseContext() instanceof PluginContextTheme)) {
70-
PluginDescriptor pd = PluginLoader.getPluginDescriptorByPluginId(pluginId);
71+
PluginDescriptor pd = PluginManagerHelper.getPluginDescriptorByPluginId(pluginId);
7172
if (pd != null) {
7273

7374
//插件可能尚未初始化,确保使用前已经初始化

PluginCore/src/com/plugin/core/PluginViewCreator.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
import com.plugin.content.LoadedPlugin;
1111
import com.plugin.content.PluginDescriptor;
12+
import com.plugin.core.manager.PluginManagerHelper;
1213
import com.plugin.util.LogUtil;
1314

1415
import java.lang.reflect.Constructor;
@@ -59,7 +60,7 @@ private View createViewFromTag(Context context, String name, AttributeSet attrs)
5960
private View createView(Context Context, String pluginId, String name, AttributeSet atts)
6061
throws ClassNotFoundException, InflateException {
6162
try {
62-
PluginDescriptor pd = PluginLoader.getPluginDescriptorByPluginId(pluginId);
63+
PluginDescriptor pd = PluginManagerHelper.getPluginDescriptorByPluginId(pluginId);
6364

6465
if (pd != null) {
6566

0 commit comments

Comments
 (0)