• UNITY3D C#開(kāi)發(fā)ANDROID APP調(diào)用串口

    2021/3/18??????點(diǎn)擊:

    查閱了很多Unity3D開(kāi)發(fā)Android應(yīng)用調(diào)用串口的方法,很多資料介紹的都是用java調(diào)用serial_port庫(kù),然后編寫(xiě)jni供Unity3D調(diào)用。
    Unity3D C#調(diào)用JNI庫(kù)


     void Update()
      {
        using (AndroidJavaClass cls_UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
        {
          using (AndroidJavaObject obj_Activity = cls_UnityPlayer.GetStatic("currentActivity"))
          {
            AndroidJavaClass cls_CompassActivity = new AndroidJavaClass("com.LB.UnityAndroid1.CompassActivity");
            cls_CompassActivity.CallStatic("openCom1", obj_Activity);
          }
        }
      }


    對(duì)于很多C#程序員來(lái)說(shuō),配置java和android開(kāi)發(fā)環(huán)境都很陌生,需要折騰很久。
    然而,根本不用這么麻煩,android串口庫(kù)本來(lái)就是c語(yǔ)言寫(xiě)的,而C#語(yǔ)言直接就可以調(diào)用C語(yǔ)言編寫(xiě)的動(dòng)態(tài)鏈接庫(kù)(android的動(dòng)態(tài)庫(kù)擴(kuò)展名是.so),所有jni是沒(méi)有必要的。
    Unity3D C#引用C語(yǔ)言動(dòng)態(tài)鏈接庫(kù)函數(shù)


    #if  UNITY_ANDROID 
      [System.Runtime.InteropServices.DllImport("libserial_port.so")]
      protected static extern Int32 Serial_Open([MarshalAs(UnmanagedType.LPTStr)]String path, int baudrate, int flags);
      [System.Runtime.InteropServices.DllImport("libserial_port.so")]
      protected static extern void Serial_Close(Int32 port);
      [System.Runtime.InteropServices.DllImport("libserial_port.so")]
      protected static extern Int32 Serial_SendString(Int32 port, string str);
      [System.Runtime.InteropServices.DllImport("libserial_port.so")]
      protected static extern Int32 Serial_SendData(Int32 port, [MarshalAs(UnmanagedType.LPArray)]byte[] data, int size);
      [System.Runtime.InteropServices.DllImport("libserial_port.so")]
      protected static extern Int32 Serial_RecvData(Int32 port);
    #endif


    Int32 port = Serial_Open(portName, 9600, 0);
    byte[] buff = { 0xFA, 0xFB, 0xFC, 0xFD, 0xFF };
    int n = Serial_SendData(port, buff, buff.Length);
    Serial_Close(port);


    將libserial_port.so放入\Assets\Plugins\Android\libs目錄下,設(shè)置對(duì)應(yīng)CPU目錄



    配置對(duì)應(yīng)的平臺(tái)和CPU