在Debug buildvariant中无法访问/ res / raw下的文件

时间:2014-11-06 10:49:58

标签: android gradle android-studio

在Android Studio / Gradle Android项目中,我有两个构建变体,Debug和Release(标准项目设置)。

您可以在此图片中看到我的文件夹结构:

enter image description here

我有一个WebView,它应该显示/ res / raw-folder中的imprint.html。 这适用于发布版本,但不是调试版本,WebView说

Couldn't load website under 'file///android_res/raw/imprint.hml
net::EE_FILE_NOT_FOUND
这让我很困惑。

我做错了什么?

6 个答案:

答案 0 :(得分:13)

尝试删除后缀为调试模式。

另外,请确保你有的proguard规则

-keepclassmembers class **.R$* {public static <fields>;}
-keep class **.R$*

编辑: 找出问题后(调试应用程序包后缀“.debug”),尝试以这种方式加载文件:

    String path = "android.resource://" + getPackageName() + "/" + R.raw.my_web_file;
    Uri myFileUri = Uri.parse(path);
    File file = new File(myFileUri.toString());
    webview.loadUrl(file.getAbsolutePath());

第二次编辑: 如果仍然不起作用(虽然对我而言是有效的),试试这个:使用输入流将文件加载到webview。

String prompt = "";
try {
    InputStream inputStream = getResources().openRawResource(R.raw.my_web_file);
    byte[] buffer = new byte[inputStream.available()];
    inputStream.read(buffer);
    prompt = new String(buffer);
    inputStream.close();
} catch (IOException e) {
    e.printStackTrace();
}

webview.loadData(prompt,"text/html","utf-8");

答案 1 :(得分:2)

试试这个适合我的。

WebView webview = (WebView) findViewById(R.id.webview);
webview.loadUrl("file:///android_res/raw/filename.html");

答案 2 :(得分:2)

您可能已经意识到,原始目录不是用于直接路径访问(see docs),而是首选资源目录。

从API级别8开始,您可以尝试使用这种稍微冗长的方法,但我的成功喜忧参半:

webview.loadUrl("file:///android_res/raw/imprint.html");

或者,res路径应该使用3个斜杠和冒号,如果它不适用于Debug,可能会出现编译调试版本的问题,你应该显示/检查你的gradle文件

foreach($request->steps as $step) {
  $project->steps()->create(['step' => $step]);
}

答案 3 :(得分:1)

我认为你可以使用 android_asset 文件夹而不是raw文件夹来做同样的事情。 只需将所有.html文件放入资产即可。

语法如下:

setContentView(R.layout.webview);  
webView = (WebView) findViewById(R.id.webView1);
wv.loadUrl("file:///**android_asset**/xyz.html");

答案 4 :(得分:1)

我遇到了同样的问题,其背后的原因是调试风格的applicationId不同。 基于DDsix的答案,这对我来说最有效。

它处理:

  • 不同构建变体中的不同applicationId
  • HTML中的特殊字符(åäá)
  • 将HTML文件本地化为不同的原始文件夹(raw,raw-en,raw-xyz)

<强>代码

InputStream inputStream = getResources().openRawResource(rawFileResId);
StringBuilder stringBuilder = new StringBuilder();
try {
    BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
    String line;
    while ((line = reader.readLine()) != null) {
        stringBuilder.append(line);
    }
} catch (IOException e) {
    // Log Exception
} finally {
    try {
        inputStream.close();
    } catch (IOException e) {
        // Log Exception
    }
}
String html = stringBuilder.toString();
webView.loadData(html, "text/html; charset=utf-8", "UTF-8");

如果您使用的是原始文件夹中的CSS,请使用loadDataWithBaseURL()代替loadData()

mWebView.loadDataWithBaseURL("file:///android_res/raw/", html, "text/html; charset=utf-8", "UTF-8", null);

答案 5 :(得分:-2)

试试这个

WebView webview = (WebView) findViewById(R.id.webview);
webview.loadUrl("file:///android_res/raw/filename.html");