javafxports multidex minSdkVersion设置为20或更小

时间:2017-01-01 12:29:55

标签: java android javafxports

研究了此问题中发现的原因Link to initial cause of issue。解决方案是在Android sdk 20或更低版本上实现android multidex库的必要使用。

现在的问题是如何实施此链接详细解决方案Using multidex when minSdkVersion is set to 20 or lower

从链接中提取。

  

如果您覆盖Application类,请将其更改为extend   MultiDexApplication(如果可能)如下:

public class MyApplication extends MultiDexApplication { ... }
     

或者如果你覆盖Application类但是不可能   更改基类,然后您可以改为覆盖   attachBaseContext()方法并调用MultiDex.install(this)来启用   multidex:

public class MyApplication extends SomeOtherApplication {
  @Override
  protected void attachBaseContext(Context base) {
     super.attachBaseContext(context);
     Multidex.install(this);
  }
}

上述代码中提到的类的完整包名称是

android.support.multidex.MultiDexApplication
android.app.Application

javafx应用程序扩展了javafx.application.Application

问题是 - 在使用javafxports时如何在扩展javafx.application.Application时实现multidex解决方案?

现在包括AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="ie.murphysoftware.games.magnatron"
    android:versionCode="5"
    android:versionName="5.0">
    <supports-screens android:xlargeScreens="true" />
    <uses-sdk android:minSdkVersion="21"/>
    <application android:icon="@drawable/magnatron_icon" android:label="@string/app_name">
        <activity android:name="javafxports.android.FXActivity"
            android:label="@string/app_name"
            android:screenOrientation="portrait">
            <meta-data android:name="launcher.class" android:value="javafxports.android.DalvikLauncher" />
            <!-- Full name of the application class to run -->
            <meta-data android:name="main.class"
                android:value="ie.murphysoftware.games.magnatron.MagnatronStart" />
            <!-- Jvm arguments (delimiter |) -->
            <meta-data android:name="jvm.args"
                android:value="-Djavafx.verbose=true|-Djavafx.name=value" />
            <!--This meta-data tag is required to use Google Play Services.-->
            <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
            <!-- Application arguments (delimiter |) -->
            <meta-data android:name="app.args" android:value="arg1|arg2" />
            <!-- Jdwp debugging port. Don't forget to forward port (adb forward tcp:port1 tcp:port2) -->
            <meta-data android:name="debug.port" android:value="0" />
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="com.google.android.gms.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>
        <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
    </application>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
    <uses-permission android:name="com.android.vending.BILLING"></uses-permission>
</manifest>

1 个答案:

答案 0 :(得分:0)

请查看示例项目,我需要按顺序创建以解决UI呈现问题。最初它在我的Nexus 6上非常慢并占用了7s(2s FXML解析,大约5s冻结UI),现在已降至约。 2.5秒。

这是清单:

<?xml version="1.0" encoding="UTF-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="eu.dzim.example" android:versionCode="1" android:versionName="1.0">
    <supports-screens android:xlargeScreens="true"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="21"/>
    <application android:label="ExampleProject" android:name="android.support.multidex.MultiDexApplication" android:icon="@mipmap/ic_launcher">
            <activity android:name="javafxports.android.FXActivity" android:label="ExampleProject" android:configChanges="orientation|screenSize">
                    <meta-data android:name="main.class" android:value="eu.dzim.example.Main"/>
                    <meta-data android:name="debug.port" android:value="0"/>
                    <intent-filter>
                            <action android:name="android.intent.action.MAIN"/>
                            <category android:name="android.intent.category.LAUNCHER"/>
                    </intent-filter>
            </activity>
    </application>
</manifest>
{p> 注意: android:name="android.support.multidex.MultiDexApplication"标记上的<application>

Gradle文件如下所示:

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

apply plugin: 'org.javafxports.jfxmobile'

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

mainClassName = 'eu.dzim.example.Main'

dependencies {

    compile 'com.gluonhq:charm:4.2.0'

    compile 'org.controlsfx:controlsfx:8.40.12'
    compile 'de.jensd:fontawesomefx-commons:8.13'
    compile 'de.jensd:fontawesomefx-fontawesome:4.7.0'
    compile 'de.jensd:fontawesomefx-materialdesignfont:1.7.22'

    compile 'com.fasterxml.jackson.core:jackson-databind:2.8.4'

    compileNoRetrolambda 'com.airhacks:afterburner.mfx:1.6.2'
}

jfxmobile {
    downConfig {
    version = '3.1.0'
    plugins 'display', 'lifecycle', 'statusbar', 'storage', 'settings'
    }
    android {
    manifest = 'src/android/AndroidManifest.xml'
    compileSdkVersion = 22
    minSdkVersion = 19
    targetSdkVersion = 22
    dexOptions {
        javaMaxHeapSize '2g'
    }
    packagingOptions {
        pickFirst 'META-INF/LICENSE'
        pickFirst 'META-INF/NOTICE'
        pickFirst 'license/LICENSE.txt'
    }
    }
}

我使用Eclipse的IDE插件创建了Android / Desktop设置(但这无关紧要)。

我只是重新检查它,构建并验证,build/javafxports/tmp/android/dex中有两个dex文件:

  • classes.dex
  • classes2.dex

我通过任务androidInstall触发了构建,并且应用程序在Nexus 5测试设备上按预期运行。

所以请:将这些文件与您的设置进行比较。尝试构建并安装它。正如我所说:它对我来说很好......

此外,我在StackOverflow上阅读了其他一些帖子,通过简单地使用正确的JDK(64位而不是32位)解决了一个dex问题。所以请确保您在Gradle和Manifest旁边的设置也没问题。