关于 android 文件管理、环境 Android 概念和 android 库插件

About the android file management, Environment Android notion and android library plugin

要在 Eclipse 下使用 Java 在 Android 中创建文件,我必须使用:

File docsFolder = new File(Environment.getExternalStorageDirectory() + "/toto.txt");

所以,我必须导入 import android.os.Environment

案例 1: 在 Eclipse 项目 - Gradle - 全部刷新后,我收到此错误:

error: package android.os does not exist
import android.os.Environment;
                 ^
C:\Users\pascal\workspaceNeon\JFX_withGluon_10.8n\src\main\java\com\gluonapplication\PopUp.java:2694: error: cannot find symbol
        GluonApplication.traceSimple("Path: " + Environment.getExternalStorageDirectory());
                                                ^
  symbol:   variable Environment

案例 2:

结果:我在我的 build.gradle 文件中添加了“应用插件:'android-library'”(见下文)。

在这种情况下,在 Gradle "Refresh all" 上,我得到:

"FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring root project 'JFX_withGluon_10.8n'.
> **android.compileSdkVersion is missing!**"

看来我的build.gradle文件没问题。我刚刚补充说: "apply plugin: 'android-library'".

Java 构建路径库包括 android-25.jar。

src/android/res/AndroidManifest.xml:

 "<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="25"/>

注意:以前,在Java源中,在Android系统中没有这个文件管理,我生成.apk没有问题。我还没有处理 gradle.

非常感谢您的帮助。

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

apply plugin: 'org.javafxports.jfxmobile'
apply plugin: 'android-library'

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

mainClassName = 'com.gluonapplication.GluonApplication'

dependencies {
    compile 'com.gluonhq:charm:4.3.0'
    compile files('libs/android-support-v4.jar')
}

jfxmobile {
     downConfig {
        version '3.2.0'
        plugins 'accelerometer', 'compass', 'device', 'orientation', 'storage', 'vibration', 'display', 'magnetometer', 'lifecycle', 'statusbar', 'position'
    }

android {
        applicationPackage = 'com.gluonapplication'
        manifest = 'src/android/AndroidManifest.xml'
        androidSdk = 'C:/Users/pascal/AppData/Local/Android/sdk'
        resDirectory = 'src/android/res'
        compileSdkVersion = '25'
        buildToolsVersion = '25.0.1'


    }

 ios {
         infoPList = file('src/ios/Default-Info.plist')
        forceLinkClasses = [
                'com.gluonhq.**.*',
                'javax.annotations.**.*',
                'javax.inject.**.*',
                'javax.json.**.*',
                'org.glassfish.json.**.*'
        ]
    }
}

要摆脱所有这些并发症,我认为您应该尝试使用 Android Studio。

您在 downConfig 块下的构建文件中包含了多个 'plugins'。这些插件是 Charm Down libraries,提供不可知的 API,这意味着您将它们添加到主 Java 包中,并且有一个隐藏的 platform-specific 实现将被使用一旦将应用程序部署到任何可能的平台(桌面、android 或 iOS)。

如果您想访问给定的文件夹,可以使用 Storage 插件。

检查 API here

您可以获得私人文件夹(捆绑在您的应用程序中)或 public 文件夹。

对于与您的应用相关的数据,我将使用私人文件夹:

File localRoot = Services.get(StorageService.class)
            .flatMap(s -> s.getPrivateStorage())
            .orElseThrow(() -> new RuntimeException("Error retrieving private storage")); 

现在您可以在那里创建文件了:

File docsFolder = new File(localRoot + "/toto.txt");

对于public,首先你需要检查它是否可用(媒体已安装并且你有写入权限):

boolean storageAvailable = Services.get(StorageService.class)
        .map(service -> service.isExternalStorageWritable())
        .orElse(false);

然后你必须select你想要得到哪个文件夹,即Documents:

File publicRoot = Services.get(StorageService.class)
        .flatMap(s -> s.getPublicStorage("Documents"))
        .orElseThrow(() -> new RuntimeException("Error retrieving public storage")); 

现在您可以在那里创建文件了:

File docsFolder = new File(publicRoot + "/toto.txt");

最后,如果您检查项目的结构,您会发现每个平台都有一个通用的主包:您只能在其中放置 Java 代码。然后你有一个Android包,所以如果你需要它你可以添加android API,但只能在这个包中。

Charm Down 插件正是您如何在主程序包上使用通用 API 创建服务的示例(即参见 StorageService here), and its different implementations (i.e. see AndroidStorageService here)。