我们需要匹配android项目中kotlin文件的包语句和目录吗?

我们需要匹配android项目中kotlin文件的包语句和目录吗?,android,kotlin,Android,Kotlin,根据kotlin的文件,我们有 不需要匹配目录和包:源文件可以任意放置在文件系统中 但是,当我尝试在与Android Studio项目中文件位置不同的文件上指定package语句时,我得到以下警告: 包指令与文件位置不匹配 有人知道为什么会这样吗?这是Android Studio中的IDE检查,默认情况下只会生成警告(而不是错误)。即使您有此警告,您的代码仍然可以正常编译和运行-如果您愿意,您可以抑制它或自由关闭它 让包名与目录结构匹配只是一种约定(特别是对于混合语言项目),因为您必须对Java

根据kotlin的文件,我们有

不需要匹配目录和包:源文件可以任意放置在文件系统中

但是,当我尝试在与Android Studio项目中文件位置不同的文件上指定package语句时,我得到以下警告:

包指令与文件位置不匹配


有人知道为什么会这样吗?

这是Android Studio中的IDE检查,默认情况下只会生成警告(而不是错误)。即使您有此警告,您的代码仍然可以正常编译和运行-如果您愿意,您可以抑制它或自由关闭它

让包名与目录结构匹配只是一种约定(特别是对于混合语言项目),因为您必须对Java文件执行此操作。来自语言官方:

在混合语言项目中,Kotlin源文件应与Java源文件位于相同的源根目录中,并遵循相同的目录结构(每个文件应存储在与每个包语句对应的目录中)

对于纯Kotlin项目,指南建议您通过省略公共根包简化目录嵌套:

在纯Kotlin项目中,建议的目录结构是遵循包结构,省略公共根包(例如,如果项目中的所有代码都在“org.example.Kotlin”包及其子包中,则带有“org.example.Kotlin”包的文件应直接放在源根下,而文件则位于源根下“org.example.kotlin.foo.bar”应该位于源根目录的“foo/bar”子目录中


值得注意的是,这种省略目录的做法在社区和开源项目中几乎没有或根本没有被采用,因此,即使语言允许,您也可能不想遵循指南。

当您这样做时,kotlin android extensions的合成属性仍然有效吗?不适用于我……您省略了,但仍然会收到警告,Package指令与文件位置不匹配这是一个问题,因为当您更改小部件的文件夹时,它会得到一个新的包名,因此如果您的主屏幕上有一个小部件,它将停止工作,并显示一条消息:“加载小部件时出现问题”。为避免此问题,您需要保留小部件的名称,但这样会出现此警告。。。