我使用Gradle J2ObjC插件建议的SharedCode
,Android
和iOS
项目结构... {strong}访问SharedCode
中的类等> Android
和iOS
模块的主要应用程序代码。这很好。
我想要做的是添加一个名为SharedCodeTestContracts
的第四个模块,该模块依赖于SharedCode
,其类等将由测试代码访问Android
和iOS
模块而不是主应用程序代码,如下所示:
问题:使用J2ObjC Gradle插件可以实现这样吗?我可以有两个由J2ObjC翻译的模块...一个链接到iOS 主应用程序目标,另一个包含JUnit测试和指向iOS 测试目标的链接仅?
关于原因的一些上下文:偶尔我在SharedCode
模块中定义一个接口,该接口将在Android
和iOS
模块中单独实现。为了避免两次写入相同的测试(每个平台上一次),我希望将测试放在共享的地方,每个模块都可以访问。
答案 0 :(得分:1)
这是一个起点。
我假设你已经有了SharedCode / build.gradle工作。
在Android / build.gradle中:
dependencies {
compile project(':SharedCode')
testCompile project(':SharedCodeTestContracts')
}
将J2objC Gradle插件应用于SharedCodeTestContracts / build.gradle,并确保您已在共享代码上指定了j2objcLinkage依赖项:
dependencies {
compile project(':SharedCode')
j2objcLinkage project(':SharedCode')
}
假设1:您的Ios模块是纯Xcode ObjC / Swift项目(不是使用j2objc编译的Java Gradle项目)。如果您的Ios模块是Java Gradle项目,这仍然可以,但使用不同的过程。阅读您可以使用的各种依赖指令的https://github.com/j2objc-contrib/j2objc-gradle/blob/master/dependencies.md#dependency-configurations。就像Gradle Java有'compile'和'testCompile'一样,J2objc-Gradle在其依赖指令上有'test'变体。
假设2:从A到B的箭头表示B取决于图形中的A.此外,当你说A链接到B时你的意思是B链接在A.我在澄清,因为这两者通常是相反的。
当您构建所有Gradle项目时,您将获得2个J2ObjC静态库,一个用于SharedCode,另一个用于SharedCodeTestContracts。在您的iOS Xcode项目中,将应用程序目标链接到SharedCode .a文件,并将测试目标链接到SharedCode和SharedCodeTestContracts。
答案 1 :(得分:0)
感谢@ advayDev1指出我正确的方向。
解决方案是声明build.gradle
模块的SharedCode
文件,如下所示:
plugins {
id 'java'
id 'com.github.j2objccontrib.j2objcgradle' version '0.6.0-alpha'
}
dependencies {
compile 'com.google.guava:guava:18.0'
testCompile 'junit:junit:4.12'
testCompile 'org.hamcrest:hamcrest-core:1.3'
}
j2objcConfig {
autoConfigureDeps true
minVersionIos '8.4'
xcodeProjectDir '../iOS'
xcodeTargetsIos 'MySDK', 'MySDKTests'
finalConfigure()
}
并声明build.gradle
模块的TestContracts
文件如下:
plugins {
id 'java'
id 'com.github.j2objccontrib.j2objcgradle' version '0.6.0-alpha'
}
dependencies {
compile project(':SharedCode')
compile 'junit:junit:4.12' // this is compile scope deliberately
compile 'org.hamcrest:hamcrest-core:1.3' // this is compile scope deliberately
}
j2objcConfig {
autoConfigureDeps true
minVersionIos '8.4'
xcodeProjectDir '../iOS'
xcodeTargetsIos 'MySDKTests'
finalConfigure()
}
根据上述内容,在构建项目时,您应该期望Podfile
的内容如下:
target 'MySDK' do
platform :ios, '8.4'
j2objc_SharedCode
import_other_pods
end
target 'MySDKTests' do
platform :ios, '8.4'
j2objc_TestContracts
j2objc_SharedCode
import_other_pods
end
J2ObjC Gradle插件中存在一个错误,该错误并不能完全产生预期的Podfile
输出,但请参阅here了解更多信息。