Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.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
Qt5.2是否将外部文件包含到Android软件包中?_Qt_Apk_Qt5_Qmake_Qt5.1 - Fatal编程技术网

Qt5.2是否将外部文件包含到Android软件包中?

Qt5.2是否将外部文件包含到Android软件包中?,qt,apk,qt5,qmake,qt5.1,Qt,Apk,Qt5,Qmake,Qt5.1,如何将外部文件包含到“apk”中 例如: pro文件所在的主目录中有“123.txt”。我应该向pro文件中添加什么以将“123.txt”放入apk 我尝试了部署,部署文件夹。但它们只适用于Symbian和Windows CE。有两种方法可以做到这一点,这两种方法都在上的“移植现有的Qt应用程序”中提到 将它们捆绑到qrc文件中(跨平台工作) 将它们添加到“资产:”目录(特定于Android) 对于#2: “资产”目录将在您构建项目时创建。我发现在将文件打包到apk之前,使用“INSTALLS”

如何将外部文件包含到“apk”中

例如:

pro文件所在的主目录中有“123.txt”。我应该向pro文件中添加什么以将“123.txt”放入apk


我尝试了部署,部署文件夹。但它们只适用于Symbian和Windows CE。

有两种方法可以做到这一点,这两种方法都在上的“移植现有的Qt应用程序”中提到

  • 将它们捆绑到qrc文件中(跨平台工作)
  • 将它们添加到“资产:”目录(特定于Android)
  • 对于#2:

    “资产”目录将在您构建项目时创建。我发现在将文件打包到apk之前,使用“INSTALLS”qmake变量将文件复制到目录中是最简单的方法。下面是我制作的一个项目的qmake文件。请注意,对于安装,资产的路径为“/assets”,而不是预期的“assets”。(它实际上位于Android构建工作区的子目录中。)

    要从android中的代码访问目录,请使用“资产:”。(在示例中,
    /assets/Samples
    ==>
    资产:/Samples


    特定于用户2400925

    在Qt5.1中,如果文件不存在,我曾经将数据库从Assets文件夹复制到用户的home文件夹。应用程序可以使用它


    您可以通过

    使用Qt资源系统。默认情况下,所有Qt应用程序都可以使用“:/”前缀或URL方案前缀“qrc:”访问qrc文件的内容

    另一种方法是将资源部署到包的资产目录中。如果您想与Android API实现更好的互操作性,这是最好的选择。您可以使用“assets:”前缀访问目录中的所有资源。与qrc不同,这种方法不是跨平台解决方案

    构建项目时,将在
    构建目录/android build/
    中创建一个名为“资产”的文件夹。复制资产目录中的文件后,可以将这些文件添加到pro中:

    deployment.files += MyFile1
    deployment.files += MyFile2
    ...
    deployment.path = /assets
    INSTALLS += deployment
    
    资源中的文件是只读的。因此,如果要更改,应首先将其复制到其他位置:

    QFile dfile("assets:/MyFile1");
    if (dfile.exists())
    {
         dfile.copy("./MyFile1");
         QFile::setPermissions("./MyFile1",QFile::WriteOwner | QFile::ReadOwner);
    }
    

    还有一个简单的方法:

    1) 将此字符串添加到.pro中

    ANDROID\u包\u源\u目录=$$PWD/ANDROID源


    2) 在proj文件夹中创建android sources文件夹。将您需要的任何内容放入android sources/assets/。您还可以将任何其他文件(如AndroidManifest.xml或android sources/res/drawable/icon.png)复制并更新到目标捆绑包中。

    另一种简单方法:

  • 将此字符串添加到.pro中
  • ANDROID\u包\u源\u目录=$$PWD/ANDROID源

  • 在proj文件夹中创建android sources文件夹。将您需要的任何内容放入android sources/assets/。您还可以将任何其他文件(如AndroidManifest.xml或android sources/res/drawable/icon.png)放在那里,以便复制并更新到目标捆绑包中

  • 1.我尝试过(没有成功),但后来我了解到,即使在只读模式下,Qt也不允许使用与qrc文件绑定的数据库。Qt 5.2不生成“资产”目录。我应该怎么做?我已经用一个如何使用资产的示例更新了答案:目录。该解决方案在Qt 5.12.0上仍然有效,而之前评论中的解决方案对我不起作用。这只是复制/粘贴了一年多前发布的art926的答案。SQLite数据库文件确实需要复制到文件系统文件夹,即使是只读访问。因为Qt将文件标识符下传给底层SQLite3库(),该库只能处理文件系统路径,而不能处理
    assets://
    qrc://
    方案。您可以使用“assets:”前缀访问目录中的所有资源是的,有例外。例如,Qt SQLite数据库驱动程序只接受普通文件系统路径。
    QFile dfile("assets:/MyFile1");
    if (dfile.exists())
    {
         dfile.copy("./MyFile1");
         QFile::setPermissions("./MyFile1",QFile::WriteOwner | QFile::ReadOwner);
    }