Как добавить внешние библиотеки JAR в проект Android из командной строки - PullRequest
39 голосов
/ 10 июля 2010

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

Я делаю это из командной строки с помощью ant ( не в затмении).Как мне сделать так, чтобы они включали эти библиотеки в apk из командной строки?

Ответы [ 9 ]

29 голосов
/ 15 февраля 2011

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

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

jar.libs.dir=lib

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

12 голосов
/ 18 сентября 2012

Только для дальнейшего использования: сейчас в 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>
8 голосов
/ 10 июля 2010

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

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 будет почти то же самое.

7 голосов
/ 10 июля 2010

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

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

external.libs.dir=lib

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

6 голосов
/ 24 мая 2013

Пример выше не совсем правильно работает. Вы не можете перезаписать встроенный 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>
3 голосов
/ 26 января 2012

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

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

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

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

1 голос
/ 22 марта 2012

положить банки в ${YOUR_PROJECT}/libs директорию

1 голос
/ 26 июля 2011
external.libs.dir=lib

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

0 голосов
/ 30 марта 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...