从命令行生成R.java文件“无效的资源目录名称”

时间:2015-03-09 11:46:15

标签: java android command-line

我需要使用命令行从资源构建R.java文件。我使用以下Java程序执行此操作。 我得到了错误:

  

无效的资源目录名称:C:\ Users \ Muzammil-Husnain \ testing \ Soothing-snow-fall \ res / drawable-tvdpi

  

无效的资源目录名称:C:\ Users \ Muzammil-Husnain \ testing \ Soothing-snow-fall \ res / drawable-xhdpi

如果我从res文件夹中删除这两个文件夹,则说

  

错误:输入目录“文件”不存在

这是我的代码:

public static String ProjectPath = "C:\\Users\\Muzammil-Husnain\\testing\\Soothing-snow-fall";
public static String ANDROID_HOME = "C:/Program Files (x86)/Android/android-sdk";

public static void generateRfile() {
    try {
        File projectDirectoryFile = new File(ProjectPath);
        String command = "aapt package -v -f -m "+
        " -S \""+projectDirectoryFile.getCanonicalPath()+"/res\"" +
        " -J \""+projectDirectoryFile.getCanonicalPath()+"/gen\"" +
        " -M \""+projectDirectoryFile.getCanonicalPath()+"/AndroidManifest.xml\"" +
        " -I C:\\Program Files (x86)\\Android\\android-sdk\\platforms\\android-21\\android.jar\"";
        System.out.println("Directory Path : "+projectDirectoryFile.getCanonicalPath());
        System.out.println(command);
        ProcessBuilder processBuilder = new ProcessBuilder("cmd.exe", "/c", command);
        processBuilder.redirectErrorStream(true);
        Process process = processBuilder.start();
        BufferedReader r = new BufferedReader(new InputStreamReader(process.getInputStream()));
        String line;
        while (true) {
            line = r.readLine();
            if (line == null) {
                break;
            }
            System.out.println(line);
        }

    } catch (IOException ex) {
        Logger.getLogger(RunApplicationOnPrject.class.getName()).log(Level.SEVERE, null, ex);
    }
}

Here is my resource Directory

3 个答案:

答案 0 :(得分:3)

您正在安装命令行来调用cmd.exe,并且该目录不在双引号内,因此cmd.exe正在解释"文件"在C:\ Program Files中作为不同的参数。尝试将目录/文件规范放在双引号之间,如下所示:

    String command = "aapt package -v -f -m "+
    " -S \""+projectDirectoryFile.getCanonicalPath()+"/res\"" +
    " -J \""+projectDirectoryFile.getCanonicalPath()+"/gen\"" +
    " -M \""+projectDirectoryFile.getCanonicalPath()+"/AndroidManifest.xml\"" +
    " -I \""+ANDROID_HOME+"/platforms/android-18/android.jar\"";

答案 1 :(得分:1)

修改

我的一位朋友指着我gradle。它是一种复杂的构建自动化工具,也可以从命令行使用。由于为Android设置资源和资产始终是一场噩梦,您可能需要查看它。似乎有一些教程可用于创建this onethis one等Android应用。


根据this SO post,您可能需要跳过一些环节才能将资源文件夹正确添加到项目中。

sometimes comes up过时和/或Android SDK版本过时的另一个问题。您应该检查是否可以将这些更新到任何更新的版本。

答案 2 :(得分:0)

android jar文件未被aapt定位问题是代码中缺少启动引用

 " -I C:\\Program Files (x86)\\Android\\android-sdk\\platforms\\android-21\\android.jar\""

虽然结束引用存在并且android.jar的url被破坏所以我改变了。所以我将代码更改为

 " -I \"C:\\Program Files (x86)\\Android\\android-sdk\\platforms\\android-21\\android.jar\""

并且问题得到解决: - )