Я решил, что я опубликую обновленный ответ для тех, кто смотрит на что-то немного более актуальное.
В настоящее время Android и Android Studio поддерживают подмножество функций Java 8. Согласно документации на Android, расположенной на их веб-сайте , Google говорит:
Для поддержки функций языка Java 8 требуется новый компилятор Jack. Джек поддерживается только на Android Studio 2.1 и выше. Поэтому, если вы хотите использовать возможности Java 8, вам нужно использовать Android Studio 2.1 для сборки вашего приложения.
Если у вас уже установлена Android Studio, убедитесь, что вы обновили ее до последней версии, нажав «Справка»> Проверьте наличие обновлений (на Mac, Android Studio> Проверить наличие обновлений). Если у вас еще нет IDE, установленной на вашей рабочей станции, загрузите Android Studio здесь.
Поддерживаемые Java 8 языковые функции и API
Android не поддерживает все функции языка Java 8. Однако при разработке приложений, ориентированных на Android 7.0 (API level 24), доступны следующие функции:
- Методы по умолчанию и статические интерфейсы Лямбда-выражения (также доступны на уровне API 23 и ниже)
- Повторяющиеся аннотации
- Ссылки на методы (также доступны на уровне API 23 и ниже)
- Тип Аннотации (также доступны на уровне API 23 и ниже)
Кроме того, доступны следующие API-интерфейсы Java 8:
Reflection и связанные с языком API:
- java.lang .FunctionalInterface
- java.lang.annotation.Repeatable
- java.lang.reflect.Method.isDefault () и API-интерфейсы Reflection, связанные с повторяемыми аннотациями, такими как AnnotatedElement.getAnnotationsByType (Class)
Утилиты API:
- java.util.function
- java.util.stream
Чтобы использовать новые функции языка Java 8, вам также необходимо использовать Jack L-цепи . Эта новая инструментальная привязка для Android компилирует исходные языки Java в Android-readable байт-код DEX, имеет свой собственный формат библиотеки .jack и предоставляет большинство функций toolchain как часть одного инструмента: переупаковка, сжатие, обфускация и multidex.
Ниже приведено сравнение двух наборов инструментов, используемых для создания файлов Android DEX:
Legacy javac toolchain: javac (.java → .class) → dx (.class → .dex) New Jack toolchain: Jack (.java → .jack → .dex)
Perl хранит, где модули загружаются из хэш% INC. Вы можете загружать вещи относительно этого:
package Module::Foo;
use File::Spec;
use strict;
use warnings;
my ($volume, $directory) = File::Spec->splitpath( $INC{'Module/Foo.pm'} );
my $config_file = File::Spec->catpath( $volume, $directory, '../configure.yaml' );
% Ключи INC основаны на строгом переводе :: to / with .pm, добавленном даже в Windows, VMS и т. Д.
Обратите внимание, что значения в% INC могут относиться к текущему каталогу, если вы поместите относительные каталоги в @INC, поэтому будьте осторожны, если вы меняете каталоги между требованием / использованием и проверкой% INC.
Для решения этой проблемы существует модуль с именем File :: ShareDir . Вы были на правильном пути, пытаясь найти FindBin, но FindBin всегда находит запущенную программу , а не модуль, который ее использует. ShareDir делает что-то очень похожее на решение ysth, за исключением завершенного в приятном интерфейсе.
Использование так же просто, как
my $filename = File::ShareDir::module_file(__PACKAGE__,
'my/data.txt');
# and then open $filename or whatever else.
или
my $dirname = File::ShareDir::module_dir(__PACKAGE__);
# Play ball!
Измените свой use Module
вызов на require Module
(или require Module; Module->import(LIST)
). Затем используйте отладчик, чтобы пройти процесс загрузки модуля и посмотреть, откуда Perl думает, что он загружает файлы.