1

我写了一个使用com.gluonhq.charm.down.common.ScanService. 如果我在 src/ios/jniLibs 中手动包含本机库 libCharm.a,它可以在真实的 iOS 设备上按预期工作。这在他们的GoNative应用程序的 Gluon 文档中进行了解释。如果我没记错的话,这个库是在 Charm Down IOS 的 build.gradle 文件中构建的。

这是我的示例的 build.gradle。正如我所说,如果我将 libCharm.a 手动复制到 src/ios/jniLibs,这将导致一个完全正常工作的应用程序。

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'org.javafxports:jfxmobile-plugin:1.0.8'
    }
}

apply plugin: 'org.javafxports.jfxmobile'

repositories {
    jcenter()
    maven {
        url 'http://nexus.gluonhq.com/nexus/content/repositories/releases'
    }
}

mainClassName = 'com.thomaskuenneth.scanservicedemo.ScanserviceDemo'

dependencies {
    compile 'com.gluonhq:charm:3.0.0'

    androidRuntime 'com.gluonhq:charm-android:3.0.0'
    androidRuntime 'com.google.zxing:core:3.2.1'

    iosRuntime 'com.gluonhq:charm-ios:3.0.0'

    desktopRuntime 'com.gluonhq:charm-desktop:3.0.0'
}

jfxmobile {

    apply plugin: 'idea'
    idea.module.downloadJavadoc = true

    android {
        manifest = 'src/android/AndroidManifest.xml'

        androidSdk = '/Users/thomas/Library/Android/sdk'
        compileSdkVersion = 23
    }
    ios {
        infoPList = file('src/ios/Default-Info.plist')
        forceLinkClasses = [
                'com.google.zxing.**.*',
                'com.gluonhq.**.*',
                'io.datafx.**.*',
                'javax.annotations.**.*',
                'javax.inject.**.*',
                'javax.json.**.*',
                'org.glassfish.json.**.*'
        ]
    }
}

我尝试在最新版本的 charm-down-ios 中添加 iosRuntime 依赖项,但这似乎没有效果。所以,问题是:有没有一种方法可以自动获取与我指定的依赖项匹配的 libCharm.a,或者手动方式(同样有效)是唯一可能的方式?非常感谢您提前。

4

1 回答 1

1

到目前为止,插件中没有包含用于管理本机库的正确安装的自动工具,将其从 charm-down-ios.jar 中提取并将其移动到jniLibs项目的库中。但它应该在插件的未来版本中可用。

现在,您必须手动完成,正如您所提到的,从位于本地 .m2 存储库中的文件中提取libCharm.a文件,并将其复制到您的项目中。charm-ios-3.0.0.jarsrc/ios/jniLibs

我想出了这个任务,可以帮助你做到这一点:

task extractNativeLib(type: Sync) {
    def iosNativeDir = project.file(project.jfxmobile.ios.nativeDirectory)
    if (!iosNativeDir.exists()) {
        iosNativeDir.mkdirs()
    } 

    setIncludeEmptyDirs(false)
    from {
        configurations.iosRuntime.collect { zipTree(it).matching { include 'native/**' } }
    }
    into iosNativeDir
    eachFile {details -> details.path = details.name }
}

在调用之前运行此任务launchIOSDevice,它将提取库并将其复制到您的本机文件夹中。

编辑

自 javafxmobile 插件 1.1.0(2016 年 10 月)发布以来,无需使用此任务,因为插件将管理它。

对于项目中包含的 Charm Down 3.0.0+ 插件,它们的原生库将自动添加到构建中,以及包含在src/ios/jniLibs.

于 2016-08-04T12:51:55.603 回答