Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
与android设备交互的桌面应用程序_Android_C++_File Io_Usb_Filesize - Fatal编程技术网

与android设备交互的桌面应用程序

与android设备交互的桌面应用程序,android,c++,file-io,usb,filesize,Android,C++,File Io,Usb,Filesize,我正在构建一个在Windows主机上运行的UI应用程序.exe,它应该能够 列出已连接的android设备。 在内部存储器(而不是SD卡)上写入正好512字节的文件。要从UI输入的写入路径。 要写入的文件必须在内部内存上精确到512字节,这对于我的应用程序需求至关重要。以下是我的做法: 我用Qt编写了UI和基本逻辑。 应用程序使用adb设备枚举连接的设备并显示在UI的listView中。 要写一个文件,我首先在我的电脑磁盘上创建一个文件,用我预先配置的512字节内容填充它,然后使用adb将该文件

我正在构建一个在Windows主机上运行的UI应用程序.exe,它应该能够

列出已连接的android设备。 在内部存储器(而不是SD卡)上写入正好512字节的文件。要从UI输入的写入路径。 要写入的文件必须在内部内存上精确到512字节,这对于我的应用程序需求至关重要。以下是我的做法:

我用Qt编写了UI和基本逻辑。 应用程序使用adb设备枚举连接的设备并显示在UI的listView中。 要写一个文件,我首先在我的电脑磁盘上创建一个文件,用我预先配置的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;
}
我可以看到创建了一个文件/mnt/emmc/diagnose。 获取adb shell,并在/mnt/emmc上执行ls-l确实将文件大小显示为512

因此,以下是我的问题:

我正在本地创建的文件显示以下属性 是不是我在磁盘上创建的文件实际上不是512字节,而是4KB

所以,如果我使用adb push,在设备上创建的文件大小是多少?512字节,或者因为它通过操作系统,它将应用适当的填充,而实际文件大小不会是512字节

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

我不喜欢在设备上安装任何.apk,并使用我的应用程序与之交互。但如果没有任何效果,我也可以采取这种方法


非常感谢您的帮助和指点……

我认为您做的事情是正确的

1文件大小不应更改,因为它是同一个文件。也许文件系统中的大小无论如何都不一样。你可以试着把它写下来读回去,看看它是否真的改变了

2如果您没有在设备上运行任何应用程序,adb是一个不错的选择


3如果它是这样工作的,请保持原样。

我需要文件系统中的大小正好是512字节。我怎样才能控制它?如果我直接在设备上运行应用程序,我可以发出JNI调用,例如JNIEXPORT jint JNICALL Java_com_NativeLib_writeCommand和JNIEnv*env、jobject obj、jstring path{char const*path1=*env->GetStringUTFCharsenv,path,0;int temp=0;int f=openpath1,O|CREAT | O|u WRONLY | O| DIRECT;temp=writef,cmdbuf,512;closef;return temp;}也许您可以通过adb使用shell命令。请参阅