2017-02-04 7 views
0

Для создания файлов в Android с Java под Eclipse, я должен использовать:О андроида управления файлами, окружающей среды Android Понятие и Android библиотека плагин

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

Итак, я должен импортировать import android.os.Environment.

СЛУЧАЙ 1: После проекта Затмения - 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:

Последствие: Я добавил "применить плагин: 'android-library' "в файле build.gradle (см. ниже).

В этом случае на Gradle "Обновить все", я получаю:

"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 файл прекрасно. Я только что добавил: "применить плагин: 'android-library'".

Библиотеки путей пути Java содержат android-25.jar.

ЦСИ/Android/Рез/AndroidManifest.xml:

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

Примечание: Ранее в источнике Java, без этого файла управления в системе Android, у меня не было никаких проблем для генерации .apk. Я еще не справляюсь с градиентом.

Большое спасибо за помощь.

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.**.*' 
     ] 
    } 
} 
+0

ПОЧЕМУ ВЫ ИСПОЛЬЗУЕТЕ ** ECLIPSE ** В 2017 году? ECLIPSE НЕ БОЛЬШЕ ПОДДЕРЖИВАЕТСЯ! – OBX

+0

Если вы удалите тег 'gluon', люди воспримут его как обычный вопрос с Android. Используйте теги 'gluon' и' javafxports', чтобы избежать путаницы. –

ответ

1

Вы включаете несколько «плагинов» в файл сборки под блоком downConfig. Эти плагины - Charm Down libraries, которые предоставляют агностический API, что означает, что вы добавляете их в свой основной пакет Java, и существует скрытая реализация для платформы, которая будет использоваться после развертывания вашего приложения на любой из возможных платформ (рабочий стол, Android или iOS).

Если вы хотите получить доступ к данной папке, у вас есть плагин Storage.

Проверьте API here.

Вы можете получить частную папку (в комплекте с вашим приложением) или общую папку.

Для данных, связанных с вашим приложением, я буду использовать личную папку:

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

так что теперь вы можете создать свой файл там:

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

для публичного один, сначала вам нужно чтобы проверить, имеется ли он (носитель установлен, и у вас есть права на запись):

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

Затем вы должны выбрать какую папку вы хотите получить, то есть 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, поэтому, если вам это нужно, вы можете добавить API Android, но только в этом пакете.

Плагины Charm вниз как раз пример того, как можно создать службу с общим API на основной пакет (т.е. см StorageServicehere), и различные ее реализации (т.е. см AndroidStorageServicehere).

+0

Большое спасибо. Я лучше понимаю, как избежать написания специальных кодов на платформе. Теперь я пытаюсь использовать ваше первое решение. –

+0

Я внедрил ваше 1-е решение и протестировал его с Android. Это прекрасно работает: ** файлы могут быть записаны, прочитаны или удалены в частном каталоге Android **. –

+0

Хорошо. Когда один из предоставленных ответов работает для вас, вы должны пометить его как принятый (зеленый тик), так как другие найдут его позже и будут знать, это полезно. Вы также можете продвигать, если вам нравятся любые ответы. Вот как работает SO ... –

0

Чтобы уйти от всех этих осложнений, я думаю, вы должны попробовать с Android Studio.

+0

Извините, но я использую также javafxports (gluon charm down) в этом приложении, которое уже разработано для рабочего стола, без студии Android. (Примечание: это приложение является общим для этих двух платформ) –