2016-03-09 18 views
1

Мое первое предположение заключалось в том, что *.so (unix) или *.dll (win) - это общая библиотека. По крайней мере, это мой код записи на использование в C.Что означает «общая библиотека» при разработке в Java для Android? (`* .jar` или` * .so`)

Теперь контекст развивается для Android, который выполняется в стиле Java-> Dalvik.

У меня проблемы с воспринимаемой двусмысленностью термина shared library. В java кажется, что файлы *.jar или *.dex содержат код, который является как обоими, так и совместно используемыми библиотеками.

Есть ли ссылка, чтобы рассказать, что означает shared library?

очень конкретная проблема заключается в том, что Android разработчики aapt упаковки вещь, имея возможность --shared-lib

--shared-Lib Сделать ресурс пакета разделяемой библиотеки, которую можно загрузить с помощью приложения во время выполнения, чтобы получить доступ к ресурсов библиотек. Подразумевается --non-constant-id.

, о котором я не знаю, что теперь подразумевается под общей библиотекой. Я знаю, что есть этот интерфейс JNI, и некоторые вещи Android NDK могут также иметь файлы *.so, которые могут иметь смысл, но я действительно не уверен.

ответ

1

В коде разработчиков Android на Java классы, которые он пишет, скомпилированы в байт-код Java (в комплекте с банком вместе с другими классами, автоматически создаваемыми во время процесса сборки). после создания этот байт-код переводится в байт-код Dalvik (.dex), который включен в пакет приложений (apk).

В дополнение к Java-коду приложение может быть запрограммировано с использованием «родных» библиотек, написанных на C-коде и скомпилированных с помощью android-ndk для архитектуры устройства, генерирующей файлы .so (динамически связанные) или .a библиотеки (связанный статически). Обычно это делается для проблем с производительностью или повторного использования библиотек, написанных на C, и не переносите их на Java. Как вы сказали в вопросе, эта привязка выполняется через библиотеку JNI.

Эти библиотеки должны быть включены в пакет приложений (apk) и загружаться при выполнении приложения с помощью System.loadLibrary().

+0

Итак, вы хотите сказать, что, например, аргумент '-shared-lib'' aapt'-пакета 'имеет какое-то отношение к родным общим библиотекам? Кроме того, вы не будете ссылаться на файл 'jar' в качестве библиотеки, или вы считаете, что они могут быть источником для импортированных классов, т. Е. Они ведут себя как файл библиотеки * .a в родную« C-программу »? – humanityANDpeace

+1

Файлы Jar, от которых зависит приложение, являются частью кода Java. Ваш Java-код и его зависимости преобразуются в байт-код Dalvik (работает в Dalvik VM). Так что да, с точки зрения Дальвика, они нравятся статически. Общие библиотеки скомпилированы для фактического ISA мобильного устройства, поэтому им не нужна какая-либо виртуальная машина для запуска. Они добавляются в файл apk, как есть. –

 Смежные вопросы

  • Нет связанных вопросов^_^