2013-07-12 2 views
3

Я работаю над библиотекой android и хочу экспортировать JAR-файл, который я могу распространять для других, чтобы использовать их в своих приложениях. Я не хочу распространять исходный код, так как он содержит сведения о публикации на моем веб-сервере.Создать JAR для распространения в библиотеке Android

Я попытался использовать файл JAR, который был создан в каталоге bin и скопировал файл jar в мой проект и ссылался на него в моем проекте и пометил кнопку экспорта.

Когда я пытаюсь запустить проект, ссылаясь на библиотеку, которую я скопировал, мое приложение выдает исключение с NoClassDefFoundError. Я сделал несколько Googling, и все, что я нашел, предлагает вам предоставить исходный код и позволить пользователю импортировать в свою среду IDE, а затем ссылаться на этот проект в свое приложение, которое я не хочу делать. Это должно быть возможно, поскольку другие компании предоставляют файлы JAR для библиотек, которые могут быть включены.

Благодарим за помощь.

ответ

6

Я не хочу распространять исходный код, так как он содержит сведения о публикации на моем веб-сервере.

Имейте в виду, что любой, кто хочет, может получить эти данные из JAR.

Это должно быть возможно, поскольку другие компании предоставляют файлы JAR для библиотек, которые могут быть включены.

AFAIK, этот рецепт до сих пор работает:

  1. Создание проекта Android библиотеки, с исходным кодом, ресурсами и таким, и заставить его работать

  2. компилировать исходный Java (например, через Ant) и превратить его в файл JAR.

  3. Создайте копию оригинального проекта библиотеки Android, который будет служить в качестве проекта библиотеки Android для Android

  4. Поместите скомпилированный JAR с шага №2 и поместите его в проект libs/ проекта библиотеки распространения с шага # 3.

  5. Удалить все в src/ библиотечного проекта распределения (но оставить теперь пустой src/ каталог там)

  6. Распределять проект библиотеки распределения (например, ZIP его)

Этот эффективно дает вам то, что вы видите в SDK Play Services - проект библиотеки без исходного кода, но вместо этого JAR в libs/ вместе с ресурсами и т. д.

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

И новая система сборки на основе Gradle поддерживает пакет AAR для распространения библиотек и т. Д., Хотя я еще не играл с этим.


UPDATE

Этот рецепт работает до тех пор, как проект библиотеки сама не имеет зависимостей на другой JAR или библиотеки проекта. В таких случаях все может быть запутано в процессе сборки - все может компилироваться, но ссылки на классы из зависимостей не могут быть разрешены во время выполнения.

+0

, который отвечает звуком более перспективным, чем мой. Я тоже попробую. – Ercan

+0

@CommonsВыберите извините за задержку в возвращении к вам, стали действительно заняты чем-то другим. Он работает, как вы говорите, если нет других зависимостей, однако моя библиотека требует других библиотек, которые не работают. Спасибо за вашу помощь. Очень ценю – Boardy

0

Вы пытались поместить свой файл jar в папку libs? И если вы экспортируете библиотеку jar для Android, убедитесь, что у нее нет /res. Как вы знаете, вы не можете ссылаться на свою папку res из банки, поэтому вам нужно использовать проект библиотеки для ссылки на вашу папку res (drawable, xml, ect ...) С другой стороны, вы не можете сделать код безопасным (часть вы говорите о публикации в своем веб-сервисе), используя его как банку, так как его легко извлекать путем обратной инженерии. вам лучше использовать некоторую кодировку (например, base64 или любой алгоритм, который предоставляет bouncycastle)

+0

А у него есть папка/res, поскольку она ссылается на файл string.xml – Boardy

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