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