2016-02-12 96 views
1

我必须使用摇篮J2ObjC插件建议SharedCodeAndroidiOS项目结构...其中SharedCode类等由AndroidiOS模块的主要应用程序代码访问。这工作正常。项目中可能有两个Java共享代码模块?

我希望做的是添加一个名为SharedCodeTestContracts第四模块,这对SharedCode的依赖,其类等是由AndroidiOS模块的测试代码访问,而不是主要应用程序代码,如下所示:

Module dependencies

问题:是这样的可能与J2ObjC摇篮插件?我可以有两个由J2ObjC翻译的模块...其中一个链接到iOS 主要的应用程序目标,另一个包含JUnit测试并链接到iOS 测试目标只?

上下文的有关为什么位:偶尔我定义SharedCode模块要被在AndroidiOS模块分开实现中的接口。为了避免两次编写相同的测试(每个平台一次),我想将测试放在可由每个模块访问的共享位置。

回答

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了解更多。

1

这是一个起点。

我假设你已经有SharedCode/build.gradle在这一点上工作。

在Android /的build.gradle:

dependencies { 
    compile project(':SharedCode') 
    testCompile project(':SharedCodeTestContracts') 
} 

应用J2objC摇篮插件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在它的依赖指令上有'测试'变体。

假设2:箭头从A到B意味着B依赖于您的图纸中的A.另外,当你说A链接到B时,你的意思是B在A中链接。我正在澄清,因为这两者通常都是相反的。

当您构建所有Gradle项目时,您将获得2个J2ObjC静态库,一个用于SharedCode,一个用于SharedCodeTestContracts。在您的iOS Xcode项目中,将应用程序目标链接到SharedCode .a文件,并将测试目标链接到SharedCode和SharedCodeTestContracts。

+0

感谢您对此回复@ advayDev1。如果我遇到任何麻烦,我会在本周尝试一下,我会告诉你。 –

+0

嘿@ advayDev1,我尝试了你的建议,但我没有看到我期望的'Podfile'中的输出。在这里写下评论太长了,所以我把它作为一个问题添加在这里:[将输出混淆到具有两个Java模块的项目的Podfile](https://github.com/j2objc-contrib/j2objc -gradle/issues/599)当你有时间的时候请看一看,如果你能发现我做错的事情,请告诉我。非常感谢。 –

相关问题