Jelajahi Sumber

仅仅允许调试湖南恺恩科技的设备

cs 10 bulan lalu
induk
melakukan
3eb4918f6c

+ 1 - 0
build_all.sh

@@ -1,4 +1,5 @@
 #!/bin/bash
+echo "如果是使用708设备,需要关闭手机的数据开关。"
 echo "will install on device:"$1
 rm app/build app/src/main/assets/scrcpy-server.jar -rf
 ./gradlew clean

+ 48 - 0
server/src/main/java/org/las2mile/scrcpy/Server.java

@@ -3,6 +3,8 @@ package org.las2mile.scrcpy;
 import java.io.IOException;
 
 import org.las2mile.okio.OkIOServer;
+import java.lang.reflect.Method;
+import org.las2mile.scrcpy.wrappers.ServiceManager;
 
 public final class Server {
 
@@ -82,6 +84,10 @@ public final class Server {
 
     public static void main(String... args) throws Exception {
 	    Ln.d("Current  build time :"+BuildConfig.BUILD_TIME);
+        if(!onlyAllowedKaiEnKeJiCom()){
+            Ln.d("本设备不支持此功能,请联系设备提供商。");
+            return;
+        }
         Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
             @Override
             public void uncaughtException(Thread t, Throwable e) {
@@ -105,5 +111,47 @@ public final class Server {
         Options options = createOptions(args);
         scrcpy(options);
     }
+
+    private static String getSystemProperty(String key, String def) {
+        try {
+            final ClassLoader cl = ClassLoader.getSystemClassLoader();
+            final Class<?> SystemProperties = cl.loadClass("android.os.SystemProperties");
+            final Class<?>[] paramTypes = new Class[] { String.class, String.class };
+            final Method get = SystemProperties.getMethod("get", paramTypes);
+            final Object[] params = new Object[] { key, def };
+            return (String) get.invoke(SystemProperties, params);
+        } catch (Exception e){
+            return def;
+        }
+    }
+
+    private static boolean onlyAllowedKaiEnKeJiCom(){
+        //forge.cubic.ap.version=SLM758CMG_EQ0_8971F53_240802_100_V01_T01
+        String apVersion = getSystemProperty("forge.cubic.ap.version","empty");
+        boolean isMg = false;
+        if(apVersion != null){
+            isMg = apVersion.startsWith("SLM758CMG");
+        }
+        //ro.product.model=k62v1_64_bsp
+        //ro.product.brand=alps
+        String pmodel = getSystemProperty("ro.product.model","empty");
+        String pbrand = getSystemProperty("ro.product.brand","empty");
+        boolean isLentek = false;
+        if(pmodel != null && pbrand != null){
+            isLentek = pmodel.startsWith("k62v1_64_bsp") && pbrand.startsWith("alps");
+        }
+
+        ServiceManager serviceManager = new ServiceManager();
+        boolean kyenMGapp = serviceManager.getPackageManager().hasKNKJapp("com.kyen.imagedetection");
+        boolean kyen708app = serviceManager.getPackageManager().hasKNKJapp("com.kyne.kyne708");
+        Ln.d("app1:"+kyen708app+" lt :"+isLentek+";  mg app:"+kyenMGapp+",mg fw:"+isMg);
+        if(isMg || isLentek){
+            if(kyenMGapp || kyen708app){
+                return true;
+            }
+        }
+        return false;
+    }
+
 }
 

+ 39 - 0
server/src/main/java/org/las2mile/scrcpy/wrappers/PackageManager.java

@@ -0,0 +1,39 @@
+package org.las2mile.scrcpy.wrappers;
+
+import android.os.IInterface;
+import android.view.InputEvent;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import android.util.Log;
+import android.content.pm.PackageInfo;
+
+public final class PackageManager {
+
+    private final IInterface manager;
+    private final Method getPackageInfoMethod;
+
+    public PackageManager(IInterface manager) {
+        this.manager = manager;
+        //Log.e("scrcpy","PackageManager==="+this.manager);
+        try {
+            getPackageInfoMethod = manager.getClass().getMethod("getPackageInfo", String.class, int.class, int.class);
+        } catch (NoSuchMethodException e) {
+            throw new AssertionError(e);
+        }
+    }
+
+    public boolean hasKNKJapp(String pkgName) {
+        //pm list packages
+        try {
+            PackageInfo packageInfo = (PackageInfo)getPackageInfoMethod.invoke(manager, pkgName, 0,0);
+            if(packageInfo != null){
+                //Log.e("scrcpy","packageInfo==="+packageInfo);
+                return true;
+            }
+        } catch (InvocationTargetException | IllegalAccessException e) {
+            throw new AssertionError(e);
+        }
+        return false;
+    }
+}

+ 8 - 0
server/src/main/java/org/las2mile/scrcpy/wrappers/ServiceManager.java

@@ -14,6 +14,7 @@ public final class ServiceManager {
     private DisplayManager displayManager;
     private InputManager inputManager;
     private PowerManager powerManager;
+    private PackageManager packageManager;
 
     public ServiceManager() {
         try {
@@ -60,4 +61,11 @@ public final class ServiceManager {
         }
         return powerManager;
     }
+
+    public PackageManager getPackageManager() {
+        if (packageManager == null) {
+            packageManager = new PackageManager(getService("package", "android.content.pm.IPackageManager"));
+        }
+        return packageManager;
+    }
 }