Подтвердить что ты не робот

Как добавить внешние библиотеки jar в проект android из командной строки

Я пытаюсь создать проект Android, который имеет некоторые зависимости. Файлы jar находятся в каталоге lib/. Я могу создать проект, добавив этот файл jar в свой путь к классам, но, конечно же, это Force Closes в эмуляторе, потому что эти библиотеки отсутствуют.

Я делаю это из командной строки с ant ( не в eclipse). Как я могу включить эти библиотеки в apk из командной строки?

4b9b3361

Ответ 1

Ответ Jay K был прав на момент написания, но теперь SDK изменился, и вот новый способ сделать это:

Добавьте следующую строку в ant.properties:

jar.libs.dir=lib

Протестировано, работает там, где external.libs.dir не работает.
Это изменило в декабре 2010 года, а затем снова в октябре 2011 года.

Ответ 2

Только для справок в будущем: Прямо сейчас в SDK есть ошибка, которая предотвращает использование jar.libs.dir: http://code.google.com/p/android/issues/detail?id=33194

Простое решение снова использовать jar.libs.dir(в ожидании исправления ошибки), заключается в том, чтобы добавить эту цель в файл build.xml:

<target name="-pre-compile">
    <path id="project.all.jars.path">
        <path path="${toString:project.all.jars.path}"/>
        <fileset dir="${jar.libs.dir}">
            <include name="*.jar"/>
        </fileset>
    </path>
</target>

Ответ 3

При компиляции сделайте следующее:

javac -encoding ascii -target 1.5 -d bin/classes \
-bootclasspath $SDKDIR/android.jar src/some/project/* -classpath=libs/*.jar

И, когда вы генерируете байт-код для Dalvik:

dx --dex --output=bin/classes.dex bin/classes libs/*.jar

Кроме того, когда вы упаковываете файл APK:

apkbuilder bin/something.apk -z bin/projectname.ap_ \
-f bin/classes.dex -rf src -rj libs

Я предполагаю, что вы используете Linux... на Windows будет почти то же самое.

Ответ 4

Отвечая на мой собственный вопрос:

Я создал файл build.properties и добавил строку

external.libs.dir=lib

Это было удачное предположение, действительно.

Ответ 5

Приведенный выше пример не работает правильно. Вы не можете перезаписать файл project.all.jars.path. Ниже приведен рабочий пример:

<target name="-pre-compile">
<!-- HACK to add the android-support-v4.jar to the classpath directly from the SDK -->

    <echo>ORIGINAL jars.path : ${toString:project.all.jars.path}</echo>
    <path id="project.all.jars.path.hacked">
            <path path="${toString:project.all.jars.path}"/>
            <path path="${sdk.dir}/extras/android/support/v4/android-support-v4.jar"/>
    </path>

    <path id="project.all.jars.path">
            <path path="${toString:project.all.jars.path.hacked}"/>
    </path>
    <echo>HACKED jars.path : ${toString:project.all.jars.path}</echo>

</target>

Ответ 6

Если вы храните библиотеки в ${basedir}/libs, они смогут найти их ant script.

Я посмотрел на текущий ant script ($ {sdk.dir}/tools/ant/build.xml), и он определяет jar.libs.dir в "libs".

FYI, ant script хорошо документирован, поэтому легко проследить.

Если вы перемещаете библиотеки, обязательно отредактируйте свои файлы .classpath, чтобы пользователи eclipse не пострадали.

Ответ 7

external.libs.dir=lib

после двух часов поиска этого ответа, это сработало для меня. Файл jar в моем каталоге libs, наконец, компилирует AND и связан с APK.

Ответ 8

поместите банки в каталог ${YOUR_PROJECT}/libs

Ответ 9

Свойство jar.libs.dir - это единственный каталог. Это не похоже на CLASSPATH, который представляет собой список, разделенный двоеточием/точкой с запятой. Способ иметь несколько каталогов в вашем jar.libs.dir - не устанавливать его напрямую; пусть он по умолчанию равен libs и перейдите в libs и создайте необходимые программные ссылки для файлов .jar, которые вам нужны.