您可以使用 RemObjects Silver 来代替 JNI。你在那里写的 swift 代码不是用 Apple 的 Swift 工具链编译的,相反,他们有自己的编译器工具链,称为 Elements,所以元素的迅捷这也被称为Silver和苹果的swift有一些区别。它经过扩展,可以很好地融入 Java 和 .NET 世界。你可以在这里读更多关于它的内容 -银牌语言扩展 https://docs.elementscompiler.com/Silver/LanguageExtensions/.
您可以使用 Visual Studio 或他们自己的 OS X IDE(称为 Fire)中的元素。让我用 Fire 来演示一个非常简单的例子。 (下载元素 http://www.elementscompiler.com/elements/download.aspx)
示例:简单的共享记录器
1.打开火并创建一个新项目。在项目模板中,选择共享项目。 (平台的选择并不重要)
2. Under 文件 -> 新建文件创建一个新的空源文件代码文件模板。我们称之为记录器。 (确保选择的语言是swift
)
3.将该文件的内容替换为:
#if COOPER
import java.util
#elseif ECHOES
import System.Collections.Generic
import System.Linq
import System.Text
#elseif NOUGAT
import Foundation
#elseif !ELEMENTS
#endif
public class Logger {
public class func logIt(stuff: String){
#if NOUGAT
NSLog("\(stuff)")
#elseif ECHOES
Console.WriteLine("\(stuff)")
#elseif COOPER
System.out.println("\(stuff)")
#elseif !ELEMENTS
print("\(stuff)")
#endif
}
}
这是适用于每个平台的记录器抽象的最简单示例。使用预处理器指令,您可以指定将编译到每个特定平台的代码。
NOUGAT
代表Cocoa
ECHOES
代表.NET
COOPER
代表Java
您还可以使用!ELEMENTS
指示您将使用其他工具链有条件编译的代码,例如,如果您想使用 Apple 的 Swift 构建代码。
- Under 文件 -> 新建项目创建新的Android类库并将其添加到当前解决方案中
- 在左侧的解决方案资源管理器中,将共享项目(可以从共享项目的地球图标拖动)拖到 Android 类库引用中。然后您应该能够在那里看到您的共享项目。您还可以删除Android类库具有的源文件。
Under 火 -> 首选项,转到第四个选项卡并确保您有 Fire 发现的 JDK、JRE 和 Android 文件夹。
构建解决方案。 Android 类库将构建 .jar 文件,您现在可以从 Android Studio 项目中使用该文件。
导航到您的 Android 类库项目目录,然后从obj/Dubug/Android
将 .jar 文件添加到您的 Android 项目中libs
folder.
在 Android studio 中,右键单击 .jar 文件并按添加为库。然后确保你的 build.gradle 有compile files('libs/swiftcommons.android.jar')
在其依赖项中。
这就是 Logger 反编译时的样子。
package swiftcommons.android;
public class Logger {
public static void logIt(String stuff) {
if(stuff == null) {
throw new IllegalArgumentException("stuff");
} else {
System.out.println(String.format("%s", new Object[]{stuff}));
}
}
public Logger() {
}
}
现在您可以从代码中调用记录器:
import swiftcommons.android.Logger;
//.....
Logger.logIt("It works..");
另外,作为一个好的策略,我建议您编写共享代码库,该代码库将使用 Apple 的 swift 工具链进行编译(#IF !ELEMENTS
)和 Android 的 Elements。 (#IF COOPER
)。元素还为您提供SwiftBase库和名为的实用程序库Sugar https://docs.elementscompiler.com/API/Sugar/您可以在使用 Elements 进行编译时使用它。