package com.secondworld.universalsdk;
|
|
import android.util.Log;
|
|
import com.secondworld.universalsdk.command.ICommand;
|
|
import org.json.JSONObject;
|
|
import java.io.IOException;
|
import java.util.ArrayList;
|
import java.util.Enumeration;
|
import java.util.HashMap;
|
import java.util.List;
|
|
import dalvik.system.DexFile;
|
|
|
public class H2EngineSDK {
|
|
private static HashMap<Integer, ICommand> allCommand = new HashMap<Integer, ICommand>();
|
|
/**
|
* 初始化所有命令
|
*/
|
public static void initCommandMap() {
|
allCommand.clear();
|
List<String> classesName = getClassName("com.secondworld.universalsdk.command");
|
try {
|
for (String name : classesName) {
|
Class<?> aClass = Class.forName(name);
|
if (!aClass.isInterface())
|
addCommand((ICommand) aClass.newInstance());
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
|
public static void addCommand(ICommand command) {
|
allCommand.put(command.getCode(), command);
|
}
|
|
/**
|
* unity 发来的消息
|
*
|
* @param json
|
*/
|
public static void HandleUnityMessage(String json) {
|
try {
|
LogUtil.debug("HandleUnityMessage", json);
|
JSONObject _json = new JSONObject(json);
|
int code = _json.getInt("code");
|
ICommand command = allCommand.get(code);
|
if (command == null) {
|
|
return;
|
}
|
command.process(json);
|
} catch (Exception ignored) {
|
}
|
}
|
|
/**
|
* 通过反射读取指定包名下的所有类名
|
*
|
* @param packageName
|
* @return
|
*/
|
public static List<String> getClassName(String packageName) {
|
List<String> classNameList = new ArrayList<String>();
|
try {
|
DexFile df = new DexFile(BaseApplication.APP.getPackageCodePath());//通过DexFile查找当前的APK中可执行文件
|
Enumeration<String> enumeration = df.entries();//获取df中的元素 这里包含了所有可执行的类名 该类名包含了包名+类名的方式
|
while (enumeration.hasMoreElements()) {//遍历
|
String className = (String) enumeration.nextElement();
|
if (className.contains(packageName)) {//在当前所有可执行的类里面查找包含有该包名的所有类
|
classNameList.add(className);
|
}
|
}
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
return classNameList;
|
}
|
|
}
|