遍历apk中的包

private  void  initEntries(String packageName){
		try {
			DexFile df = new DexFile(context.getPackageCodePath());//通过DexFile查找当前的APK中可执行文件
			Enumeration enumeration = df.entries();//获取df中的元素  这里包含了所有可执行的类名 该类名包含了包名+类名的方式
			while (enumeration.hasMoreElements()) {//遍历
				String className = (String) enumeration.nextElement();
				if (className.contains(packageName)) {//在当前所有可执行的类里面查找包含有该包名的所有类
					Class cls = Class.forName(className);
					IPlugin  plugin = null;
					if (cls.isAnnotationPresent(CMPlugin.class))
					{
						plugin = (IPlugin)cls.newInstance();
						plugin.init(context,webView);
						String  clsName = className.substring((className.lastIndexOf("."))+1);
						entries.put(clsName,plugin);
					}
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}

注意要把Install Run给关了

你可能感兴趣的:(遍历apk中的包)