gpt4 book ai didi

android - 包名与文件路径不对应 - Gradle 配置

转载 作者:行者123 更新时间:2023-12-03 04:41:06 26 4
gpt4 key购买 nike

我最近正在尝试将普通的 Android Studio (IntelliJ) 项目迁移到 Gradle 项目。目前我遇到了一个问题:IntelliJ 在每个文件的开头都会给我一个警告,说我的“包名与文件路径不对应”。例如

我的 some/prefixes/a/b/c/d/E.java 的第一行是:

package a.b.c.d;
....

IntelliJ 认为包名应该是 ' cd ' 而不是 ' a.b.c.d '。因为我设置
SourceSets {
main.java.srcDirs = ["some/prefixes/a/b"]
}

在模块的 build.gradle 中。

我知道我可以进行以下更改以使 IntelliJ 高兴:
SourceSets {
main.java.srcDirs = ['some/prefixes']
}

但我不能这样做,因为 ' some/prefixes 下有大量项目' 而且我绝对不想将它们全部引入这个模块。

我曾经添加一个 packagePrefix="a.b"在我的' module.iml ' 在我原来的 Android 工作室项目中,它运行良好:
https://www.jetbrains.com/idea/help/configuring-content-roots.html#d2814695e312

但我不知道在迁移到 Gradle 项目后如何完成类似的修复。

最佳答案

我最终为 gradle 写了一个任务。
任务添加大名鼎鼎的包前缀 到 *.iml 文件。

此解决方案仅适用于 intelliJ,我希望有人有更好的解决方案。

task addPackagePrefix << {
println 'addPackagePrefix'
def imlFile = file(MODULE_NAME+".iml")

if (!imlFile.exists()) {
println 'no module find '
return

}
def parsedXml = (new XmlParser()).parse(imlFile)

if(parsedXml.component[1] && parsedXml.component[1].content){
parsedXml.component[1].content.findAll { Node node ->
node.sourceFolder.findAll { Node s ->
def url = s.attribute("url").toString()

if (url.endsWith(SRC_DIR)) {
println 'Node founded '
def attr = s.attribute('packagePrefix')
if (attr == null) {
// add prefix
println 'Adding package prefix'
s.attributes().put('packagePrefix', PACKAGE_NAME)
println s.toString()

// writing
def writer = new StringWriter()
new XmlNodePrinter(new PrintWriter(writer)).print(parsedXml)
imlFile.text = writer.toString()
}
}

}
}
}

关于android - 包名与文件路径不对应 - Gradle 配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27677657/

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