我尝试通过生成带有Gradle的apk文件将一个简单的JavaFX应用程序移植到Android .

但不幸的是,我生成的应用程序安装到Android设备总是失败,出现以下错误:“INSTALL_FAILED_NO_MATCHING_ABIS:无法提取本机库,res = -113 . ” .

项目结构

src
|-main
  |-java
    |-app
      |-main
        |-MainApp.java
  |-resources
    |-app
      |-css
        |-main.css

MainApp.java

public class MainApp extends Application
{
    @Override
    public void start(Stage primaryStage)
    {
        try
        {
        primaryStage.setTitle("TestAppFX");

            Button btn = new Button("Exit Application");
            btn.setOnAction(new EventHandler<ActionEvent>() {
                @Override
                public void handle(ActionEvent event)
                {
                    System.exit(0);
                }
            });

            StackPane root = new StackPane();
            root.getChildren().add(btn);

            primaryStage.setScene(new Scene(root, 300, 250));
            primaryStage.show();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }

    public static void main(String[] args)
    {
        launch(args);
    }
}

gradle.build

buildscript {
    repositories {
        jcenter()
    }

    dependencies {
        classpath 'org.javafxports:jfxmobile-plugin:1.3.10'
    }
}

apply plugin: 'org.javafxports.jfxmobile'

mainClassName = 'app.main.MainApp'

repositories {
    jcenter()
}

jfxmobile {
    android {
        compileSdkVersion = 25
        androidSdk = 'C:/Program Files (x86)/Entwicklung/Android_SDK'
        applicationPackage = 'org.javafxports.ensemble'
    }
}

Used software/emulators:

  • Eclipse Oxygen.2

  • Gradle 4.4.1(使用Android SDK 25;还尝试过SDK 21和Gradle 2.2.0)

  • Android Studio 3.0.1

Used emulators in Android Studio:

  • Lollipop x86(SDK 21)

  • Lollipop x86_64(SDK 21)

并尝试过

  • Nougat x86(SDK 25)

  • Nougat x86_64(SDK 25)

使用Nexus 4或5(X)的图像 .

好的,所以我已经尝试了很多东西,但这只会让我遇到其他问题,所以我希望有人可以帮助我前进:

1) 我找到了一个用户建议添加的thread

splits {
    abi {
        enable true
        reset()
        include 'x86', 'armeabi-v7a'
        universalApk true
    }
}

到build.gradle文件的android部分 . 但Gradle只是留下了一个消息,即“分裂”功能未知 . 我发现在“buildscript”部分下添加以下命令是必要的:

apply plugin: 'com.android.library'

2) 但是Gradle不知道这个插件,所以我再次搜索并找到a blog post,建议在存储库和依赖项部分添加以下行:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.3.0'    
    }
}

添加此Gradle后说“无法应用插件[id'com.android.library'] . Gradle 2.2版是必需的 . 当前版本是4.4.1 . 如果使用gradle包装器,请尝试编辑distributionUrl . ”如果我安装Gradle 2.2而不是4.4.1,我会收到一些组件不再可用的错误 . 我不认为这一步让我更进一步,但我当然错了..

3) 如果我根据相关的上一个稳定版本(找到here *)将类路径中的插件"gradle"的版本号更改为2.3.3,我收到以下错误:"Failed to apply plugin [id 'org.javafxports.jfxmobile']. Could not create an instance of type org.javafxports.jfxmobile.plugin.JFXMobileExtension_Decorated. Could not generate a proxy class for class org.javafxports.jfxmobile.plugin.android.AndroidExtension."

4) 如果我使用API 21(Lollipop)建议GdleHub上Gradle的开发人员通过将compileSdkVersion设置为21并通过Android Studio下载sdk我得到以下错误:"Could not find org.javafxports:dalvik-sdk:8.60.9."所以我将其设置回API 25.项目页面也说dalvik-sdk 8.60.9目前是javafx插件的基础 .

我希望你还和我在一起;)如果不让我知道,那么我可以尝试更准确地解释这个问题 . 我不知道如何使Gradle生成有效的apk文件,所以如果您有任何建议,请告诉我!


*)您可以看到不同插件的当前版本(android,javafx) . 只需按照属性"classpath"中指定的路径,例如:https://jcenter.bintray.com/org/javafxports/jfxmobile-plugin .