Android Studio: JavaExec: не удалось найти или загрузить основной класс - PullRequest
0 голосов
/ 25 мая 2018

Как часть моего скрипта сборки, я хотел бы запустить некоторый код Java перед упаковкой APK.

Когда я пытаюсь построить свой проект, я получаю сообщение об ошибке:

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'
    }
}

1 Ответ

0 голосов
/ 21 августа 2018

С некоторой помощью этого ответа я получил его, изменив путь к классам, как показано ниже.Мне также нужно было сослаться на некоторые библиотеки 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 ["", ""];
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...