桌面应用程序与Android设备交互

时间:2013-11-30 16:44:55

标签: android c++ file-io usb filesize

我正在构建一个在Windows主机上运行的UI应用程序(.exe),应该可以

  1. 列出连接的Android设备。
  2. 在内部存储器(不是SD卡)上写入完全512字节的文件。写入的路径从UI输入。
  3. 要写入的文件必须在内部存储器上完全是512字节,这对我的应用程序需求至关重要。以下是我的接触方式:

    1. 我使用Qt来编写UI和基本逻辑。
    2. 该应用程序使用adb设备枚举已连接的设备并显示在UI的listView中。
    3. 要写一个文件,我首先在磁盘(我的电脑)上创建一个文件,用512字节(我预配置的内容)填充它,然后使用adb将此文件推送到设备上

      int DoWrite(Buffer* pBuf)
      {
      // pBuf contains preconfigured 512 byte pattern to be written to a file on device
      //prepare a local file       
      char*cmdBuf = new char[512];
      for (int i(0); i < 512; ++i)
          cmdBuf[i] = pBuf->operator[](i);
      ofstream myFormattedFile;
      if(myFormattedFile.is_open())
      {
           //temp file creation successful
           pBuf->WriteFormattedDataToStream(myFormattedFile);
           myFormattedFile.close();
      }
      FILE* fp = 0;
      fp = fopen("rawData.bin", "wb");
      int temp = fwrite(cmdBuf, sizeof(char), 512, fp);
      fclose(fp);
      //push this file to device at /mnt/emmc/diagnose (or whatever the myFilePath is set to)
      //ADB_PATH is set to adb executable
      //m_filePath is set to /mnt/emmc
      std::string cmd = ADB_PATH + "adb push " + "C:\\Users\\MyUser\\DiagTool\\rawData.bin " + m_filePath;
      //Execute push command
      int rc = system(cmd.c_str());
      delete [] cmdBuf;
      return 0;
      }
      
    4. 我能够看到创建了文件/ mnt / emmc / diagnose。 获取adb shell,并在/ mnt / emmc上执行ls -l确实将filesize显示为512!

      所以,这是我的问题:

      • 我在本地创建的文件显示以下属性 enter image description here

      是否这样我在磁盘上创建的文件实际上不是512字节,而是4KB?

      所以,如果我使用adb push,那么在设备上创建的文件大小是多少? 512字节或自通过OS后,它将应用适当的填充,实际文件大小不会是512字节?

      • 这是写入内存的正确方法吗?或者有更好的方法吗?

      • 我不想在设备上安装任何.apk,并使用我的应用程序与它进行交互。但如果没有任何作用,我也可以采用这种方法!

      感谢任何帮助或指针...

1 个答案:

答案 0 :(得分:0)

我认为你做的是正确的事。

1)文件大小不应该改变,因为它是相同的文件。也许文件系统中的大小无论如何都不一样。您可以尝试编写并阅读它,看看它是否确实发生了变化。

2)如果您没有在设备上运行任何应用,adb就是您的选择。

3)如果它以这种方式工作,请保持原样。