【问题标题】:Android Studio: JavaExec: Could not find or load main classAndroid Studio:JavaExec:找不到或加载主类
【发布时间】:2018-11-05 07:02:54
【问题描述】:

作为构建脚本的一部分,我想在打包 APK 之前运行一些 Java 代码。

当我尝试构建我的项目时,我得到了错误:

Error: Could not find or load main class net.bgreco.myapp.build.BuildScript

BuildScript.java 位于app/src/main/java/net/bgreco/myapp/build/

BuildScript.class 确实在我收到上述错误消息之前编译成功,我可以从命令行运行它而没有错误。

app/build.gradle

task runBuildScript(type: JavaExec) {
    main = 'net.bgreco.myapp.build.BuildScript'
}

tasks.whenTaskAdded { theTask ->
    if (theTask.name.contains('package')) {
        theTask.dependsOn 'runBuildScript'
    }
}

【问题讨论】:

    标签: android android-studio gradle


    【解决方案1】:

    this answer 的帮助下,我通过如下修改类路径使其工作。我还需要引用一些 Android 库,所以我包含了 android.jar 的路径。

    app/build.gradle

    task runBuildScript(type: JavaExec) {
        String flavor, buildType
        (flavor, buildType) = getCurrentFlavorAndBuildType()
        classpath files("build/intermediates/classes/" + flavor + "/" + buildType, "${android.getSdkDirectory().getAbsolutePath()}\\platforms\\${android.compileSdkVersion}\\android.jar")
        main = 'net.bgreco.myapp.build.BuildScript'
        args = [flavor] // Not needed unless you want to know the current flavor from within the BuildScript
    }
    
    tasks.whenTaskAdded { theTask ->
        if (theTask.name.contains('package')) {
            theTask.dependsOn 'runBuildScript'
        }
    }
    
    def getCurrentFlavorAndBuildType() {
        Gradle gradle = getGradle()
        String tskReqStr = gradle.getStartParameter().getTaskRequests().toString()
    
        Pattern pattern;
    
        if (tskReqStr.contains("assemble"))
            pattern = Pattern.compile("assemble(\\w+)(Release|Debug)")
        else
            pattern = Pattern.compile("generate(\\w+)(Release|Debug)")
    
        Matcher matcher = pattern.matcher(tskReqStr)
    
        if (matcher.find())
            return [matcher.group(1).toLowerCase(), matcher.group(2).toLowerCase()]
        else {
            println "NO MATCH FOUND"
            return ["", ""];
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-13
      • 2016-01-16
      • 2021-06-06
      • 2017-02-26
      相关资源
      最近更新 更多