Explorar o código

011 so 涂鸦修改接通了

zhangshenjie hai 3 meses
pai
achega
5c429d6f5c
Modificáronse 24 ficheiros con 252 adicións e 29 borrados
  1. 34 27
      BusinessCommon/src/main/java/com/develop/common/utils/CommonUtils.kt
  2. 44 0
      BusinessCommon/src/main/java/com/develop/common/utils/TuyaApi.java
  3. 120 0
      BusinessCommon/src/main/java/com/develop/common/utils/TuyaUtilsSo.java
  4. 6 1
      BusinessSetting/src/main/java/com/develop/setting/ui/AboutActivity.kt
  5. 3 0
      BusinessSetting/src/main/java/com/develop/setting/ui/SettingMainActivity.kt
  6. 11 0
      app/build.gradle
  7. 29 1
      app/src/main/java/com/develop/foodcooking/MainActivity.kt
  8. BIN=BIN
      app/src/main/jniLibs/arm64-v8a/libfake_pthread_cancel.so
  9. BIN=BIN
      app/src/main/jniLibs/arm64-v8a/libjnidispatch.so
  10. BIN=BIN
      app/src/main/jniLibs/arm64-v8a/libtuya_api.so
  11. BIN=BIN
      app/src/main/jniLibs/arm64-v8a/libtuyaapp_components.so
  12. BIN=BIN
      app/src/main/jniLibs/arm64-v8a/libtuyaapp_drivers.so
  13. BIN=BIN
      app/src/main/jniLibs/arm64-v8a/libtuyaos.so
  14. BIN=BIN
      app/src/main/jniLibs/arm64-v8a/libtuyaos_adapter.so
  15. BIN=BIN
      app/src/main/jniLibs/arm64-v8a/libtuyaos_demo_linux_func.so
  16. BIN=BIN
      app/src/main/jniLibs/armeabi-v7a/libfake_pthread_cancel.so
  17. BIN=BIN
      app/src/main/jniLibs/armeabi-v7a/libjnidispatch.so
  18. BIN=BIN
      app/src/main/jniLibs/armeabi-v7a/libtuya_api.so
  19. BIN=BIN
      app/src/main/jniLibs/armeabi-v7a/libtuyaapp_components.so
  20. BIN=BIN
      app/src/main/jniLibs/armeabi-v7a/libtuyaapp_drivers.so
  21. BIN=BIN
      app/src/main/jniLibs/armeabi-v7a/libtuyaos.so
  22. BIN=BIN
      app/src/main/jniLibs/armeabi-v7a/libtuyaos_adapter.so
  23. BIN=BIN
      app/src/main/jniLibs/armeabi-v7a/libtuyaos_demo_linux_func.so
  24. 5 0
      libThirdPart/build.gradle

+ 34 - 27
BusinessCommon/src/main/java/com/develop/common/utils/CommonUtils.kt

@@ -151,18 +151,23 @@ object CommonUtils {
         tuyaHttp: TuyaHttp<T>
     ) {
         appGlobalScope.launch(Dispatchers.IO) {
-            if (TuyaUtils.ioTSDKManager==null || !TuyaUtils.init){
-                ToastUtils.showShort(globalApp().getString(R.string.connect_tuya))
-                tuyaHttp.fail()
-                return@launch
-            }
-
-            Log.e("TAG TUYA","url :"+url +"   json:"+json)
-            var httpResponse = TuyaUtils.ioTSDKManager.httpRequest(url, apiVersion, json)
-            var str = ""
-            if (httpResponse.errorCode == 0) {
-                str = httpResponse.result
-            }else{
+//            if (!TuyaUtilsSo.getInstance().tuyaInitSuccess || !TuyaUtilsSo.getInstance().tuyaNetwork){
+//                ToastUtils.showShort(globalApp().getString(R.string.connect_tuya))
+//                tuyaHttp.fail()
+//                return@launch
+//            }
+
+            Log.e("tuya","url :"+url +"   json:"+json)
+//            var httpResponse = TuyaUtils.ioTSDKManager.httpRequest(url, apiVersion, json)
+//            var str = ""
+//            if (httpResponse.errorCode == 0) {
+//                str = httpResponse.result
+//            }else{
+//                tuyaHttp.fail()
+//            }
+
+            var str  =  TuyaUtilsSo.getInstance().getPointer(url, apiVersion, json)
+            if ("" == str || str ==null){
                 tuyaHttp.fail()
             }
             withContext(Dispatchers.Main){
@@ -180,16 +185,18 @@ object CommonUtils {
         tuyaHttp: TuyaBooleanHttp
     ) {
         appGlobalScope.launch(Dispatchers.IO) {
-            if (TuyaUtils.ioTSDKManager==null || !TuyaUtils.init){
+            if (!TuyaUtilsSo.getInstance().tuyaInitSuccess || !TuyaUtilsSo.getInstance().tuyaNetwork){
                 ToastUtils.showShort(globalApp().getString(R.string.connect_tuya))
                 tuyaHttp.fail()
                 return@launch
             }
-            var httpResponse = TuyaUtils.ioTSDKManager.httpRequest(url, apiVersion, json)
             var str = false
-            if (httpResponse.errorCode == 0) {
-                str = true
-            }
+
+            var json  =  TuyaUtilsSo.getInstance().getPointer(url, apiVersion, json)
+            str = !("" == json || json ==null)
+
+
+
             withContext(Dispatchers.Main){
                 tuyaHttp.bean(str)
 
@@ -208,16 +215,16 @@ object CommonUtils {
         tuyaHttpList: TuyaHttpList<T>
     ) {
         appGlobalScope.launch(Dispatchers.IO) {
-            if (TuyaUtils.ioTSDKManager==null || !TuyaUtils.init){
-                ToastUtils.showShort(globalApp().getString(R.string.connect_tuya))
-                tuyaHttpList.fail()
-                return@launch
-            }
-            var httpResponse = TuyaUtils.ioTSDKManager.httpRequest(url, apiVersion, json)
-            var str = ""
-            if (httpResponse.errorCode == 0) {
-                str = httpResponse.result
-            }else{
+//            if (!TuyaUtilsSo.getInstance().tuyaInitSuccess || !TuyaUtilsSo.getInstance().tuyaNetwork ){
+//                ToastUtils.showShort(globalApp().getString(R.string.connect_tuya))
+//                tuyaHttpList.fail()
+//                return@launch
+//            }
+
+
+            Log.e("tuya","url :"+url +"   json:"+json)
+            var str  =  TuyaUtilsSo.getInstance().getPointer(url, apiVersion, json)
+            if ("" == str || str ==null){
                 tuyaHttpList.fail()
             }
             withContext(Dispatchers.Main) {

+ 44 - 0
BusinessCommon/src/main/java/com/develop/common/utils/TuyaApi.java

@@ -0,0 +1,44 @@
+package com.develop.common.utils;
+
+import com.sun.jna.Callback;
+import com.sun.jna.Library;
+import com.sun.jna.Native;
+import com.sun.jna.Pointer;
+import com.sun.jna.ptr.PointerByReference;
+
+public interface TuyaApi extends Library {
+
+    TuyaApi INSTANCE = Native.load("tuya_api", TuyaApi.class);
+
+
+    // 方法定义
+    int iot_httpc_common_post_simple(
+            String apiName,         // IN CONST CHAR_T *api_name
+            String apiVer,          // IN CONST CHAR_T *api_ver
+            String postData,        // IN CHAR_T *post_data
+            String pHeadOther,      // IN CONST CHAR_T *p_head_other
+            PointerByReference ppResult // OUT ty_cJSON **pp_result
+    );
+
+    // 声明原生方法
+    Pointer http_common_post_simple(
+            String apiName,    // IN CONST CHAR_T *api_name
+            String apiVer,     // IN CONST CHAR_T *api_ver
+            String postData,   // IN CHAR_T *post_data
+            String pHeadOther  // IN CONST CHAR_T *p_head_other
+    );
+
+    // 声明释放内存的方法
+    void free_memory(Pointer ptr);
+
+    // 定义回调接口
+    interface LogCallback extends Callback {
+        void invoke(String tag, String message);
+    }
+
+    // 注册日志回调函数
+    void register_log_callback(LogCallback callback);
+
+    int init(int argc,String[] argv,String pid, String uuid,String authkey, String version);
+
+}

+ 120 - 0
BusinessCommon/src/main/java/com/develop/common/utils/TuyaUtilsSo.java

@@ -0,0 +1,120 @@
+package com.develop.common.utils;
+
+import android.content.Context;
+import android.util.Log;
+
+import com.sun.jna.Pointer;
+
+public class TuyaUtilsSo {
+
+    /**volatile防止指令重排*/
+    private static volatile TuyaUtilsSo singleton;
+    private TuyaApi tuyaApi;
+    public  boolean tuyaInitSuccess = false;
+    public  boolean tuyaNetwork = true;
+    public   String mPid = "dquk8axtyy72c1ap";
+    public   String mUid = "uuid50e9e0c707553116";
+    public   String mAk = "MJhcxmQ6LeZDj1tNu6F5kqK5aQJfpdOb";
+    public  Context context;
+    private TuyaUtilsSo() {
+        tuyaApi = TuyaApi.INSTANCE;
+    }
+
+
+    public static TuyaUtilsSo getInstance(){
+        if(singleton == null){
+            synchronized (TuyaUtilsSo.class){
+                if(singleton == null){
+                    singleton = new TuyaUtilsSo();
+                }
+            }
+        }
+        return singleton;
+    }
+
+    public TuyaApi getTuyaApi(){
+        if (tuyaApi==null){
+            tuyaApi = TuyaApi.INSTANCE;
+        }
+        return  tuyaApi;
+    }
+
+
+    public String getmPid() {
+        return mPid;
+    }
+
+    public String getmUid() {
+        return mUid;
+    }
+
+    public String getmAk() {
+        return mAk;
+    }
+
+    public void setmPid(String mPid) {
+        this.mPid = mPid;
+    }
+
+    public void setmUid(String mUid) {
+        this.mUid = mUid;
+    }
+
+    public void setmAk(String mAk) {
+        this.mAk = mAk;
+    }
+
+    public  void initSDK(Context ctx, String version) {
+        context = ctx;
+        version = version;
+        //Log.init(ctx, "/sdcard/tuya_log/iot_demo/", 3);
+        tuyaLog();
+        tuyaInit(getmPid(),getmUid(),getmAk(),version);
+    }
+
+    public  void  tuyaInit(String pid, String uuid, String authkey, String version){
+        getTuyaApi().init(0,new String[]{},pid,uuid,authkey,version);
+    }
+
+    public void  tuyaLog(){
+        getTuyaApi().register_log_callback(new TuyaApi.LogCallback() {
+            @Override
+            public void invoke(String tag, String message) {
+                Log.i(tag, message);
+                //涂鸦初始化成功
+                if (message.equals("tuya_init success...")){
+                    tuyaInitSuccess = true;
+                }
+                //配网成功,可以访问涂鸦
+                if (message.equals("network status:2")){
+                    tuyaNetwork = true;
+                }
+
+
+            }
+        });
+    }
+
+    public String getPointer (String apiName,String apiVersion,String postDate){
+        Pointer pointer = TuyaApi.INSTANCE.http_common_post_simple(
+                apiName, apiVersion, postDate, ""
+        );
+        String json = "";
+        if (pointer ==null){
+            json = "";
+        }else {
+            json = pointer.getString(0);
+        }
+
+        //释放资源
+        getTuyaApi().free_memory(pointer);
+
+        return  json;
+    }
+
+    interface  httpCommonPostCallBack{
+        void  httpCommon(String json);
+
+    }
+
+}

+ 6 - 1
BusinessSetting/src/main/java/com/develop/setting/ui/AboutActivity.kt

@@ -61,6 +61,7 @@ import com.develop.common.utils.AppVersionUtil
 import com.develop.common.utils.CommonUtils
 import com.develop.common.utils.GsonUtils
 import com.develop.common.utils.StringUtils
+import com.develop.common.utils.TuyaApi
 import com.develop.common.utils.TuyaUtils
 import com.develop.common.utils.UpdateUtil
 import com.develop.common.widget.PwdLayout
@@ -394,7 +395,11 @@ class AboutActivity : CommonBVMActivity<ActivityAboutBinding, AboutViewModel>()
 
 //            pageSize++
 
-
+            var pointer = TuyaApi.INSTANCE.http_common_post_simple(
+                "tuya.device.menu.category.list", "2.0", "{\"lang\":\"en\"}", ""
+            )
+//                Log.i("tuya_iot", "data:" + pointer.getString(0))
+            Log.i("tuya_iot", "po:"+  pointer.toString())
 
             weightAlignCount++
             if (weightAlignCount >= 7) {

+ 3 - 0
BusinessSetting/src/main/java/com/develop/setting/ui/SettingMainActivity.kt

@@ -386,6 +386,9 @@ class SettingMainActivity : CommonBindingActivity<ActivitySettingMainBinding>()
 
     //从wifi功能回来方法
     private fun getDevNetwork(num: Int) {
+        //先处理本地配置涂鸦
+        return
+
         //无需获取涂鸦功能,估不网络请求涂鸦
         if (getGoneTuYa()) {
             return

+ 11 - 0
app/build.gradle

@@ -984,6 +984,17 @@ android {
     viewBinding {
         enabled = true
     }
+
+    sourceSets {
+        main {
+            jniLibs.srcDirs = ['src/main/jniLibs']
+        }
+    }
+
+    packagingOptions {
+        pickFirst 'META-INF/AL2.0'
+        pickFirst 'META-INF/LGPL2.1'
+    }
 }
 
 dependencies {

+ 29 - 1
app/src/main/java/com/develop/foodcooking/MainActivity.kt

@@ -8,6 +8,7 @@ import android.util.Log
 import android.view.LayoutInflater
 import android.view.WindowManager
 import androidx.lifecycle.scopeNetLife
+import com.develop.base.ext.appGlobalScope
 import com.develop.base.ext.getGoneTuYa
 import com.develop.base.ext.globalApp
 import com.develop.base.ext.isBrand062
@@ -32,11 +33,14 @@ import com.develop.common.ui.CommonBindingActivity
 import com.develop.common.utils.AppVersionUtil
 import com.develop.common.utils.ConfigUtils
 import com.develop.common.utils.TuyaUtils
+import com.develop.common.utils.TuyaUtilsSo
 import com.develop.foodcooking.databinding.ActivityMainBinding
 import com.drake.net.Post
 import com.drake.net.utils.scopeNetLife
 import com.google.gson.Gson
 import com.kuyuntech.cofarcooking.device.sdk.util.core.CofarSDK
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.launch
 import java.io.File
 import java.security.cert.X509Certificate
 import javax.net.ssl.TrustManager
@@ -100,10 +104,12 @@ class MainActivity : CommonBindingActivity<ActivityMainBinding>() {
 //            getAppTuya(true)
 //        }
 
-        getAppTuya(true)
+//        getAppTuya(true)
 //
 //        getDevInfo()
 
+        getTuyaSo()
+
     }
 
     //获取是否有涂鸦功能
@@ -119,6 +125,28 @@ class MainActivity : CommonBindingActivity<ActivityMainBinding>() {
             getAppTuya(true)
         }
     }
+
+    fun getTuyaSo(){
+        var tuyaConfig = ConfigUtils.loadTuyaConfig()
+        if (tuyaConfig != null) {
+            TuyaUtilsSo.getInstance().setmAk(tuyaConfig.get("ak"))
+            TuyaUtilsSo.getInstance().setmPid(tuyaConfig.get("pid"))
+            TuyaUtilsSo.getInstance().setmUid(tuyaConfig.get("uid"))
+            appGlobalScope.launch(Dispatchers.IO) {
+                TuyaUtilsSo.getInstance().initSDK(globalApp(),"1.0")
+
+            }
+            //涂鸦存值判断有涂鸦功能
+            MMkvUtils.save(ISTUYA, true)
+        } else {
+            //涂鸦存值判断没有涂鸦功能
+            MMkvUtils.save(ISTUYA, false)
+        }
+
+        finish()
+
+    }
+
     fun  getAppTuya(isCatch :Boolean){
         var tuyaConfig = ConfigUtils.loadTuyaConfig()
         if (tuyaConfig != null) {

BIN=BIN
app/src/main/jniLibs/arm64-v8a/libfake_pthread_cancel.so


BIN=BIN
app/src/main/jniLibs/arm64-v8a/libjnidispatch.so


BIN=BIN
app/src/main/jniLibs/arm64-v8a/libtuya_api.so


BIN=BIN
app/src/main/jniLibs/arm64-v8a/libtuyaapp_components.so


BIN=BIN
app/src/main/jniLibs/arm64-v8a/libtuyaapp_drivers.so


BIN=BIN
app/src/main/jniLibs/arm64-v8a/libtuyaos.so


BIN=BIN
app/src/main/jniLibs/arm64-v8a/libtuyaos_adapter.so


BIN=BIN
app/src/main/jniLibs/arm64-v8a/libtuyaos_demo_linux_func.so


BIN=BIN
app/src/main/jniLibs/armeabi-v7a/libfake_pthread_cancel.so


BIN=BIN
app/src/main/jniLibs/armeabi-v7a/libjnidispatch.so


BIN=BIN
app/src/main/jniLibs/armeabi-v7a/libtuya_api.so


BIN=BIN
app/src/main/jniLibs/armeabi-v7a/libtuyaapp_components.so


BIN=BIN
app/src/main/jniLibs/armeabi-v7a/libtuyaapp_drivers.so


BIN=BIN
app/src/main/jniLibs/armeabi-v7a/libtuyaos.so


BIN=BIN
app/src/main/jniLibs/armeabi-v7a/libtuyaos_adapter.so


BIN=BIN
app/src/main/jniLibs/armeabi-v7a/libtuyaos_demo_linux_func.so


+ 5 - 0
libThirdPart/build.gradle

@@ -102,6 +102,11 @@ dependencies {
 
     api 'com.tuya.smart:tuyasmart-iot_sdk:1.0.8-rc.1'
     api 'com.tencent.mars:mars-xlog:1.2.3'
+
+    //jna 依赖
+    api 'net.java.dev.jna:jna:5.14.0'
+    api 'net.java.dev.jna:jna-platform:5.14.0'
+
 //    api 'cn.yipianfengye.android:zxing-library:2.2'
 
 //    api 'org.apache.commons:commons-compress:1.23.0'