Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Создание standalone библиотеки под android

Anna | 1.06.2014 | нет комментариев
В этой статье я расскажу как сделать библиотеку, которая использует другие библиотеки и при этом уместить всё в одном jar.

Возможен мы пишем библиотеку, она использует другие библиотеки и, в частности, для примера, support library. Если бы мы применяли maven, то в pom файле легко прописали зависимости и не парились. Но что если нашу библиотеку будут применять люди, которые не пользуются системами сборок либо пользуются ant’ ом?

Мы можем положить зависимости рядом с нашим jar. Но тогда неотвратимы раздоры библиотек различных версий, скажем, если мы используем одну версию support library, а в самом приложении иная. Тогда придется руками одну из них удалять.

Дозволено пойти иным путем, припомним что jar это обыкновенный zip файл. Мы распакуем все зависимости, добавим код нашей библиотеки и скомпилируем. На выходе получим цельный jar файл со всеми зависимостями. Но если в приложении применяются те же библиотеки что и у нас, то получим ошибку что в плане два идентичных класса.

Для решения этой задачи воспользуемся утилитой jarjar. Она переименовывает все классы в jar файле. На примере support library — все классы находятся в пакете android.support.v4

Пример применения:

java -jar jarjar.jar process <rulesFile> <inJar> <outJar>
rulesFile - файл с правилами переименования
inJar, outJar - здесь все ясно

Сделаем правило для переименования классов android.support.v4.* в inner.android.support.v4.*

rule android.support.v4.** inner.android.support.v4.@1

и сбережем в файл rules.txt

Запускаем

java -jar jarjar.jar rules.txt android-support-v4.jar android-support-v4-renamed.jar

В результате получили jar’ку с переименованными классами. Дальше мы распаковываем все наши зависимости с переименованными классами и компилируем. Получаем библиотеку, которая содержит каждый код необходимый для выполнения.

Наша библиотека содержит код всех зависимостей, которые могут весить много. Дабы уменьшить размер применим proguard для удаления неиспользуемых классов и способов.

И в завершение маленький скрипт на gradle тот, что всё это делает

apply plugin: 'java'

defaultTasks 'proguard'

task unpackJars(dependsOn: compileJava) {
    //распаковываем классы из библиотек
    file('libs').listFiles().each { File file ->
        if (file.name.endsWith('.jar')) {
            copy {
                from(zipTree(file.path))
                into('build/classes/main')
            }
        }
    }
    //собираем jar'ку
    tasks.jar.execute()
}

task proguard(type: proguard.gradle.ProGuardTask, dependsOn: unpackJars) {
    injars 'build/libs/library.jar'
    outjars 'build/libs/proguard_library.jar'
    libraryjars '/Applications/my/Android Studio.app/sdk/platforms/android-10/android.jar'

    //укажем что классы нашей библиотеки удалять не необходимо
    keep 'class com.CasualSoftware.classloader.library.*'
}

dependencies {
    compile 'com.google.android:android:2.2.1'
    compile fileTree(dir: 'libs', include: ['*.jar'])
}

Вои и всё, позже выполнения скрипта мы получим proguard_library.jar, тот, что дозволено добавлять к приложению и применять.

В моём случае библиотека использует support library и dropbox sdk, и весит 522 байта.

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB