From 88556d9898865d314936233f2d15ca862d699a71 Mon Sep 17 00:00:00 2001 From: lwb <q3213421wrwqr> Date: 星期二, 03 十一月 2020 15:44:04 +0800 Subject: [PATCH] 通过反射加载unity交互命令 --- SdkProject/library/src/main/java/com/secondworld/universalsdk/H2EngineSDK.java | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 52 insertions(+), 6 deletions(-) diff --git a/SdkProject/library/src/main/java/com/secondworld/universalsdk/H2EngineSDK.java b/SdkProject/library/src/main/java/com/secondworld/universalsdk/H2EngineSDK.java index 66e7d63..f93d69e 100644 --- a/SdkProject/library/src/main/java/com/secondworld/universalsdk/H2EngineSDK.java +++ b/SdkProject/library/src/main/java/com/secondworld/universalsdk/H2EngineSDK.java @@ -1,36 +1,82 @@ 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 { - public static HashMap<Integer, ICommand> allCommand = new HashMap<Integer, ICommand> (); + private static HashMap<Integer, ICommand> allCommand = new HashMap<Integer, ICommand>(); - public static void init() { - + /** + * 鍒濆鍖栨墍鏈夊懡浠� + */ + public static void initCommandMap() { + allCommand.clear(); + List<String> classesName = getClassName("com.secondworld.universalsdk.command"); + try { + for (String name : classesName) { + Class<?> aClass = Class.forName(name); + addCommand((ICommand) aClass.newInstance()); + } + } catch (Exception e) { + e.printStackTrace(); + } } - private static void AddCommand(ICommand command) { + public static void addCommand(ICommand command) { allCommand.put(command.getCode(), command); } - //unity 鍙戞潵鐨勬秷鎭� + /** + * unity 鍙戞潵鐨勬秷鎭� + * @param json + */ public static void HandleUnityMessage(String json) { try { JSONObject _json = new JSONObject(json); int code = _json.getInt("code"); ICommand command = allCommand.get(code); if (command == null) { + Log.e("H2EngineSDK", "鏈煡鍛戒护"); 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鏌ユ壘褰撳墠鐨凙PK涓彲鎵ц鏂囦欢 + 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; + } + } -- Gitblit v1.8.0