Android Studio中如何访问Kotlin DSL生成的自定义代码?引用生成代码遇未解析引用问题
Android Studio中如何访问Kotlin DSL生成的自定义代码?引用生成代码遇未解析引用问题
嗨,我看了你遇到的问题,其实核心是sourceSets的配置路径和类型没匹配对,导致Android Studio没把你生成的代码当成项目的源代码目录来识别,所以才会出现未解析引用的问题。咱们一步步来解决:
问题出在哪?
你之前配置的sourceSets路径是"$buildDir/generated/debug/out",但实际生成的代码路径是$buildDir/generated/custom_code/debug/out——明显少了custom_code这一层目录!而且你用了java.srcDir,虽然AS可能兼容识别Kotlin文件,但更规范(也更稳妥)的是用kotlin.srcDir来指定Kotlin源代码目录。另外,你的生成代码是放在debug子目录下的,属于debug变体专属代码,配置到main sourceSet里并不合适,应该针对debug变体来配置。
修正后的配置
把你app级build.gradle.kts里的sourceSets部分改成下面这样:
android { sourceSets { named("debug") { // 补上custom_code层级,并且用kotlin.srcDir指定Kotlin源目录 kotlin.srcDir("$buildDir/generated/custom_code/debug/out") } } }
后续操作步骤
- 点击Android Studio右上角的"Sync Project with Gradle Files"按钮,同步项目。
- 执行
Clean Project->Rebuild Project,确保生成的代码被正确识别。 - 回到MainActivity里,现在应该能正常引用生成的函数了:
import com.example.app.customCode class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // 现在可以正常调用了 customCode() } }
额外优化建议(可选)
如果以后你想为不同构建变体(比如release)也生成对应代码,可以把自定义Task和变体关联起来,动态生成对应变体的目录,同时给每个变体的sourceSet配置对应的生成路径。不过目前先解决当前问题,这个可以后续再扩展。
备注:内容来源于stack exchange,提问作者sanitizedUser
相关产品推荐
相关产品推荐

