gpt4 book ai didi

android - 项目评估后访问 build.gradle 中的 sdk.dir 值

转载 作者:IT王子 更新时间:2023-10-28 23:34:48 25 4
gpt4 key购买 nike

我的 build.gradle 文件中有一个自定义任务,它在获得 dex 之前对类文件进行字节码转换,如下所示:

task droidcook(type: JavaExec) {
main 'org.tsg.android.asm.Main'
}

afterEvaluate { project ->
android.applicationVariants.each { variant ->
variant.javaCompile.doLast {
project.tasks.droidcook.configure {
classpath variant.javaCompile.classpath
classpath "build/classes/" + variant.dirName
classpath sdk.dir + "/platforms/android-19/android.jar"
classpath "compile-libs/droidcook.jar"
args "build/classes/" + variant.dirName
args "com.example"
// args "-debug"
// args "-asmifier"
}
project.tasks.droidcook.execute()
}
}
}

上述问题是 classpath sdk.dir + ... 行,其中 sdk.dir 未正确评估。为了让它工作,我目前必须对 android.jar 的路径进行硬编码。

如果您可以根据项目配置使用适当的值替换 android-19 以访问特定于平台的 android.jar,则可以获得奖励积分。 :D

最佳答案

我没有看到公开的 API 将 sdk.dir 暴露给你的构建文件,所以我只是抄袭了 https://android.googlesource.com/platform/tools/build/+/d69964104aed4cfae5052028b5c5e57580441ae8/gradle/src/main/groovy/com/android/build/gradle/internal/Sdk.groovy 中的代码手动阅读。至于替换 android-19,如果我阅读 android.compileSdkVersion 我会得到那个确切的字符串。我也不确定这是一个已发布的 API,因此它可能会在未来版本的 Android Gradle 插件中发生更改和损坏。

话虽如此,这对我有用:

afterEvaluate {
def rootDir = project.rootDir
def localProperties = new File(rootDir, "local.properties")
if (localProperties.exists()) {
Properties properties = new Properties()
localProperties.withInputStream { instr ->
properties.load(instr)
}
def sdkDir = properties.getProperty('sdk.dir')
def androidJarPath = sdkDir + "/platforms/" + android.compileSdkVersion + "/android.jar"
print androidJarPath + "\n"
}
}

如果没有 local.properties,此代码将失败。如果您关心这种情况,您可以从 Sdk.groovy 复制更多代码,以模仿其行为以尝试找到合理的默认值。

关于android - 项目评估后访问 build.gradle 中的 sdk.dir 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20203787/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com