Skip to content

Commit ed0abcf

Browse files
committed
优化MetaData
1 parent 9cc18fc commit ed0abcf

File tree

4 files changed

+56
-53
lines changed

4 files changed

+56
-53
lines changed

PluginCore/src/com/plugin/content/PluginDescriptor.java

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,11 @@
88
import java.util.Map;
99

1010
import com.plugin.util.LogUtil;
11+
import com.plugin.util.ResourceUtil;
1112

1213
import android.app.Application;
1314
import android.content.Intent;
15+
import android.os.Bundle;
1416

1517

1618
/**
@@ -51,7 +53,7 @@ public class PluginDescriptor implements Serializable {
5153
/**
5254
* 定义在插件Manifest中的meta-data标签
5355
*/
54-
private HashMap<String, String> metaData;
56+
private Bundle metaData;
5557

5658
private HashMap<String, PluginProviderInfo> providerInfos = new HashMap<String, PluginProviderInfo>();
5759

@@ -147,14 +149,18 @@ public void setApplicationTheme(int theme) {
147149
this.applicationTheme = theme;
148150
}
149151

150-
public HashMap<String, String> getMetaData() {
152+
public Bundle getMetaData() {
153+
if (metaData == null) {
154+
if (installedPath != null) {
155+
metaData = ResourceUtil.getApplicationMetaData(installedPath);
156+
if (metaData == null) {
157+
metaData = new Bundle();
158+
}
159+
}
160+
}
151161
return metaData;
152162
}
153163

154-
public void setMetaData(HashMap<String, String> metaData) {
155-
this.metaData = metaData;
156-
}
157-
158164
public HashMap<String, String> getFragments() {
159165
return fragments;
160166
}

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

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -74,22 +74,23 @@ public static PluginDescriptor parseManifest(String pluginPath) {
7474

7575
if (name != null) {
7676

77-
HashMap<String, String> metaData = desciptor.getMetaData();
78-
if (metaData == null) {
79-
metaData = new HashMap<String, String>();
80-
desciptor.setMetaData(metaData);
81-
}
82-
if (value != null && value.startsWith("@") && value.length() == 9) {
83-
String idHex = value.replace("@", "");
84-
try {
85-
int id = Integer.parseInt(idHex, 16);
86-
value = Integer.toString(id);
87-
} catch (Exception e) {
88-
e.printStackTrace();
89-
}
90-
}
91-
metaData.put(name, value);
92-
LogUtil.d(name, value);
77+
// HashMap<String, String> metaData = desciptor.getMetaData();
78+
// if (metaData == null) {
79+
// metaData = new HashMap<String, String>();
80+
// desciptor.setMetaData(metaData);
81+
// }
82+
// if (value != null && value.startsWith("@") && value.length() == 9) {
83+
// String idHex = value.replace("@", "");
84+
// try {
85+
// int id = Integer.parseInt(idHex, 16);
86+
// value = Integer.toString(id);
87+
// } catch (Exception e) {
88+
// e.printStackTrace();
89+
// }
90+
// }
91+
// metaData.put(name, value);
92+
93+
LogUtil.d("meta-data", name, value);
9394

9495
}
9596

PluginCore/src/com/plugin/core/systemservice/AndroidAppIPackageManager.java

Lines changed: 4 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@
99
import android.content.pm.ProviderInfo;
1010
import android.content.pm.ResolveInfo;
1111
import android.content.pm.ServiceInfo;
12-
import android.os.Bundle;
13-
import android.text.TextUtils;
1412

1513
import com.plugin.content.PluginActivityInfo;
1614
import com.plugin.content.PluginDescriptor;
@@ -28,10 +26,7 @@
2826
import java.lang.reflect.Method;
2927
import java.util.ArrayList;
3028
import java.util.Collection;
31-
import java.util.HashMap;
32-
import java.util.Iterator;
3329
import java.util.List;
34-
import java.util.Map;
3530

3631
/**
3732
* Created by cailiming on 16/1/15.
@@ -189,7 +184,7 @@ public Object beforeInvoke(Object target, Method method, Object[] args) {
189184
providerInfo.name = info.getName();
190185
providerInfo.packageName = getPackageName(pluginDescriptor);
191186
providerInfo.icon = pluginDescriptor.getApplicationIcon();
192-
providerInfo.metaData = getMeta(pluginDescriptor.getMetaData());
187+
providerInfo.metaData = pluginDescriptor.getMetaData();
193188
providerInfo.enabled = true;
194189
providerInfo.exported = info.isExported();
195190
providerInfo.applicationInfo = getApplicationInfo(pluginDescriptor);
@@ -302,28 +297,10 @@ public Object beforeInvoke(Object target, Method method, Object[] args) {
302297
}
303298
}
304299

305-
private static Bundle getMeta(HashMap<String, String> map) {
306-
//TODO 可以缓存起来
307-
Bundle meta = new Bundle();
308-
if (map != null) {
309-
Iterator<Map.Entry<String, String>> entryIterator = map.entrySet().iterator();
310-
while (entryIterator.hasNext()) {
311-
Map.Entry<String, String> item = entryIterator.next();
312-
//TODO 这里的类型还有很多其他情况
313-
if (!TextUtils.isEmpty(item.getValue()) && TextUtils.isDigitsOnly(item.getValue())) {
314-
meta.putInt(item.getKey(), Integer.valueOf(item.getValue()));
315-
} else {
316-
meta.putString(item.getKey(), item.getValue());
317-
}
318-
}
319-
}
320-
return meta;
321-
}
322-
323300
private static ApplicationInfo getApplicationInfo(PluginDescriptor pluginDescriptor) {
324301
ApplicationInfo info = new ApplicationInfo();
325302
info.packageName = getPackageName(pluginDescriptor);
326-
info.metaData = getMeta(pluginDescriptor.getMetaData());
303+
info.metaData = pluginDescriptor.getMetaData();
327304
info.name = pluginDescriptor.getApplicationName();
328305
info.className = pluginDescriptor.getApplicationName();
329306
info.enabled = true;
@@ -345,7 +322,7 @@ private static ActivityInfo getActivityInfo(PluginDescriptor pluginDescriptor, S
345322
activityInfo.name = className;
346323
activityInfo.packageName = getPackageName(pluginDescriptor);
347324
activityInfo.icon = pluginDescriptor.getApplicationIcon();
348-
activityInfo.metaData = getMeta(pluginDescriptor.getMetaData());
325+
activityInfo.metaData = pluginDescriptor.getMetaData();
349326
activityInfo.enabled = true;
350327
activityInfo.exported = false;
351328
activityInfo.applicationInfo = getApplicationInfo(pluginDescriptor);
@@ -368,7 +345,7 @@ private static ServiceInfo getServiceInfo(PluginDescriptor pluginDescriptor, Str
368345
serviceInfo.name = className;
369346
serviceInfo.packageName = getPackageName(pluginDescriptor);
370347
serviceInfo.icon = pluginDescriptor.getApplicationIcon();
371-
serviceInfo.metaData = getMeta(pluginDescriptor.getMetaData());
348+
serviceInfo.metaData = pluginDescriptor.getMetaData();
372349
serviceInfo.enabled = true;
373350
serviceInfo.exported = false;
374351
serviceInfo.applicationInfo = getApplicationInfo(pluginDescriptor);

PluginCore/src/com/plugin/util/ResourceUtil.java

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@
55
import android.content.pm.ApplicationInfo;
66
import android.content.pm.PackageInfo;
77
import android.content.pm.PackageManager;
8+
import android.content.res.Resources;
89
import android.graphics.drawable.Drawable;
910
import android.os.Build;
11+
import android.os.Bundle;
1012

1113
import com.plugin.content.PluginDescriptor;
1214
import com.plugin.core.PluginLoader;
@@ -97,25 +99,42 @@ public static String getLabel(PluginDescriptor pd) {
9799
ApplicationInfo appInfo = info.applicationInfo;
98100
appInfo.sourceDir = pd.getInstalledPath();
99101
appInfo.publicSourceDir = pd.getInstalledPath();
100-
String label = pm.getApplicationLabel(appInfo).toString();
101-
if (label != null && label.equals(pd.getPackageName())) {
102+
String label = null;
103+
try {
104+
if (!isMainResId(appInfo.labelRes)){
105+
label = pm.getApplicationLabel(appInfo).toString();
106+
}
107+
} catch (Resources.NotFoundException e) {
108+
}
109+
if (label == null || label.equals(pd.getPackageName())) {
102110
//可能设置的lable是来自宿主的资源
103111
if (pd.getDescription() != null) {
104112
int id = ResourceUtil.getResourceId(pd.getDescription());
105113
if (id != 0) {
106114
//再宿主中查一次
107115
try {
108116
label = PluginLoader.getApplication().getResources().getString(id);
109-
} catch (Exception e) {
117+
} catch (Resources.NotFoundException e) {
110118
}
111119
}
112120
}
113121
}
114-
return label;
122+
if (label != null) {
123+
return label;
124+
}
115125
}
116126
return pd.getDescription();
117127
}
118128

129+
public static Bundle getApplicationMetaData(String apkPath) {
130+
//暂时只查询Applicatoin节点下的meta信息,其他组件节点下的meta先不管
131+
PackageInfo info = PluginLoader.getApplication().getPackageManager().getPackageArchiveInfo(apkPath, PackageManager.GET_META_DATA);
132+
if (info.applicationInfo != null) {
133+
return info.applicationInfo.metaData;
134+
}
135+
return null;
136+
}
137+
119138
@TargetApi(Build.VERSION_CODES.GINGERBREAD)
120139
public static Drawable getLogo(PluginDescriptor pd) {
121140
PackageManager pm = PluginLoader.getApplication().getPackageManager();

0 commit comments

Comments
 (0)