我正在kotlin多平台上实现ksp processor,目标是iOS和android应用程序,下面的文档为KSP定义了多个配置名称:
add("kspIosArm64", project(":test-processor"))
add("kspIosX64", project(":test-processor"))但是,运行这些会导致文件重声明错误。的确,文件是在不同的位置创建的:build/generated/ksp/iosArm64/和build/generated/ksp/iosX64/,但是包是相同的。
我完全迷失了如何解决这个问题,有没有办法为每个生成的文件获取这个生成的文件夹路径,以便修改package?
发布于 2022-09-27 08:51:17
我将尝试现在部分回答你的问题,而不是让你堆叠和专注于使项目能够运行。我假设您正在使用XCode为iOS运行该项目。这里的问题是(正如您所提到的),所有这些源集都是用相同的包名生成的,这更多地是一个KSP问题(我认为),我们必须等待解决。
为了运行和测试项目,您现在可以做的是:
之前,使用./gradlew clean清理构建。
我认为clean可以作为KMM框架任务之前的“步骤”添加:
XCode项目文件->构建阶段->生成KMM框架->在运行负责构建框架的分级任务之前添加clean (这将使构建时间更长)
./gradlew :yourSharedModule:clean :yourSharedModuleName:embedAndSignAppleFrameworkForXcode
时要构建的一个体系结构。
XCode项目->构建设置->体系结构->只构建活动体系结构->是
这个解决方案只需要构建和运行一个体系结构(在您的例子中可能是一个模拟器),这里的问题是您可能与其他体系结构有一些问题,并且在日常开发中无法很容易地发现它们。
env或构建配置值,以区分要添加哪些ksp依赖项(基于它的值),因此在运行项目时并不是所有的处理器都被添加
XCode项目->构建阶段->生成KMM框架->将其作为gradle param -Parchitecture=someArchitecture传递
或者甚至有可能在build.gradle.kts文件中完成。
ksp依赖项(iOS依赖项),因此您要构建的唯一依赖项是(请记住同步项目并清理它)。
我个人会尝试实现第三种解决方案,我不知道这是否容易,但它似乎是最好的解决方案,其他解决方案也应该有效,但请考虑它们是一个肮脏的走动.。
我可以提供更多的信息或某种形式的POC以后,只是让我知道在评论或其他地方是否需要它。
https://stackoverflow.com/questions/73863650
复制相似问题