Cordova 应用程序无法加载 assets/www 中的任何文件(仅 index.html)

Posted

技术标签:

【中文标题】Cordova 应用程序无法加载 assets/www 中的任何文件(仅 index.html)【英文标题】:Cordova app cannot load any files in assets/www (only index.html) 【发布时间】:2016-03-20 08:20:37 【问题描述】:

我正在编译一个非常简单的 Cordova 应用程序并在 android 上进行部署。我想在各种 Android 设备上测试 jQuery Mobile 的流畅度,所以我正在用 jQuery Mobile 演示文件夹的内容编译一个应用程序。

我创建了一个新的 Cordova 项目并将 jQuery Mobile 演示文件夹的内容放入我的 www 文件夹中。

然后我使用 Cordova 二进制文件添加了 android 平台,运行了 cordova build,最后是 cordova run android

应用程序在我的手机上打开,但不会加载除 index.html 之外的文件。我将应用程序连接到 Chrome Inspector 调试器以查看未加载的内容,这是我看到的内容:

Cordova 找不到的所有文件都存在于platforms/android/assets/www 中。 Cordova 可以找到 index.html 只是找到,但它无法加载其他任何内容。

如果我在网络浏览器中打开该文件夹,一切都会正常加载。

任何人都知道可能导致此问题的原因或我可能会采取哪些步骤来进一步排除故障和隔离问题?我已经在 Google 上搜索了几个小时,但我找不到其他人面临这种​​情况.对于其他人来说,是 index.html 文件无法加载,或者他们只是忘记将他们想要的文件添加到 www 文件夹中。在我的情况下,index.html 加载正常,但没有其他内容(见上面的截图)。

这是我的config.xml(大部分只是标准默认值):

<?xml version='1.0' encoding='utf-8'?>
<widget id="com.rand.jqmdemo" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
    <name>jqmdemo</name>
    <description>
        A sample Apache Cordova application that responds to the deviceready event.
    </description>
    <author email="dev@cordova.apache.org" href="http://cordova.io">
        Apache Cordova Team
    </author>
    <content src="index.html" />
    <plugin name="cordova-plugin-whitelist" spec="1" />
    <access origin="*" />
    <allow-intent href="http://*/*" />
    <allow-intent href="https://*/*" />
    <allow-intent href="tel:*" />
    <allow-intent href="sms:*" />
    <allow-intent href="mailto:*" />
    <allow-intent href="geo:*" />
    <platform name="android">
        <allow-intent href="market:*" />
    </platform>
    <platform name="ios">
        <allow-intent href="itms:*" />
        <allow-intent href="itms-apps:*" />
    </platform>
    <engine name="android" spec="~4.1.1" />
</widget>

这是我的AndroidManifest.xml 文件:

<?xml version='1.0' encoding='utf-8'?>
<manifest android:hardwareAccelerated="true" android:versionCode="1" android:versionName="0.0.1" package="com.elliot.jqmdemo" xmlns:android="http://schemas.android.com/apk/res/android">
    <supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <application android:hardwareAccelerated="true" android:icon="@drawable/icon" android:label="@string/app_name" android:supportsRtl="true">
        <activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/activity_name" android:launchMode="singleTop" android:name="MainActivity" android:theme="@android:style/Theme.Black.NoTitleBar" android:windowSoftInputMode="adjustResize">
            <intent-filter android:label="@string/launcher_name">
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
    <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="22" />
</manifest>

这是我的index.html 文件:http://pastebin.com/duFSLT5T

【问题讨论】:

这不是科尔多瓦问题,这是您的应用程序的问题。请出示您的 HTML 文件。 @Joerg 感谢您的帮助。这是我的 index.html 文件:pastebin.com/duFSLT5T 它未从 jQuery Mobile 演示文件夹中修改。包含的所有相关文件均有效,并且 index.html 确实可以在常规 Web 浏览器中正确加载。 附带说明;我之前使用过带有 Phonegap / Cordova 的 jQuery Mobile,它不是很糟糕,但仍然很糟糕,尤其是对于旧手机(~岁)。我不会再在我的任何项目中使用 jQuery Mobile,但我真的很喜欢英特尔 AppFramework。 您确定目录_assets 存在吗?不重要,但是为什么要用js和_assets/js呢? @Joerg 是的,它们确实存在,这是我的 www 文件夹的屏幕截图:pasteboard.co/26GVqv3.png(文件确实存在于该文件夹中)。我无法评论为什么它的结构是这样的,因为我只是复制并粘贴了 jQuery Mobile 的演示文件夹的内容。 【参考方案1】:

我最终想通了。这是使用 Android 部署时的 Cordova 问题。任何以下划线开头的文件夹都会被忽略而不发出警告。看起来这个 bug 已经存在 5 年多了,而且没有很快修复的迹象:

https://code.google.com/p/android/issues/detail?id=5343

【讨论】:

【参考方案2】:

如果您的文件在 files->jqdemo->www 中,就像您在 pasteboard.co 上显示的那样,那么您的文件位于错误的位置。

他们必须在:

your_cordova_project->platforms->android->assets->www

这样做:

只在你的cordova项目的根文件夹中包含资产、index.html、js,然后进行cordova构建,不要自己更改平台www文件夹。

如果您正在编码而不仅仅是测试,更好的方法是使用符号链接或预脚本来完成复制工作。因此,您不必每次构建 cordova 时都调用。

jQuery Mobile:它在移动设备上运行得非常好,如果你知道你在做什么。否则很容易让你的应用程序变慢。所以,要小心!

更新:

有趣的问题,我坚持下去,路径不正确,也许无法解决。所以,试试这个:

    创建一个新的 css 文件,名称为 test.css 和内容:

body 
   background-color: red !important;
   font-size: 3em !important;

将此文件放在 www 文件夹的根目录中,将其链接到您的 html 文件中并进行 cordova 构建。您在平台 www 文件夹中看到文件了吗?

它对您的设备有何影响?

【讨论】:

感谢您的帮助!我的代码已经在那个位置。我之前向您展示的屏幕截图只是源代码所在的www 文件夹,然后它是由 Cordova 为 Android 平台构建的。这是我的平台->android->assets->www 文件夹的屏幕截图:pasteboard.co/29GStIj.png 所有代码和所有文件都在那里。下面是 Cordova 找不到的 CSS 文件位置的截图:pasteboard.co/29PGQKi.png

以上是关于Cordova 应用程序无法加载 assets/www 中的任何文件(仅 index.html)的主要内容,如果未能解决你的问题,请参考以下文章

Cordova iOS libMobileGestalt 错误应用程序无法加载

Cordova:在 Angular 8 延迟加载实施后,应用程序无法启动,并且在初始屏幕显示白屏后

Cordova ios 应用程序无法加载设备数据

iOS Cordova 应用程序无法在设备上正确加载

Cordova 应用程序无法加载 assets/www 中的任何文件(仅 index.html)

Cordova 5.3.1 和 iOS9 平台 - 我无法从外部源加载图像和脚本