#java #gradle #javac #android
Я хочу собрать какое-то произвольное приложение, к примеру, найденное на Гитхабе: https://github.com/heruoxin/Clip-Stack (само приложение у меня уже есть, потому не надо мне слать ссылки на бинарные сборки) Зачастую, в комплекте с приложением есть обертка для Gradle, иногда свойства проекта от Eclipse, иногда ничего нет. Сам процесс, не смотря на кажущуюся простоту, достаточно сложен: надо выкачать SDK/NDK (теперь прямых ссылок на них не дают, но об этом позже), настроить переменные окружения и запустить ./gradlew, а после выкачивания 200-300 мегабайт зависимостей, очень часто вылезает какая-то ошибка (к примеру о том, что нужна проприетарная Java 8). И даже если ошибки нет, сборка может сожрать 2-3 гигабайта памяти, весь своп и затем упасть, ссылаясь на недостаток памяти (ведь нынче все богатые и девелопят исключительно на макбуках последнего поколения, причем все торопятся - потому все это собирается в 10 потоков, отжирая в 10 раз больше памяти). Кроме того, такой подход не дает возможности скомпилировать приложение на изолированной от сети машине: Android Studio Gradle без подключения к интернет Вопрос: как собрать приложение без использования толстых сборщиков? Пожалуй основная проблема происходит из-за сложности разруливания зависимостей. Например, для сборки приложения выше, мне понадобились: support-fragment-25.2.0.aar support-compat-25.2.0.aar support-annotations-25.2.0.jar support-core-utils-25.2.0.aar support-core-ui-25.2.0.aar appcompat-v7-22.2.1.aar recyclerview-v7-25.2.0.aar cardview-v7-25.2.0.aar Но быстро выяснилось, что в 25-й версии что-то было изменено и она не подходит, скомпилированное приложение просто падает. Я выкачал множество версий aar-пакетов и самодельными скриптами проиндексировал их, создавая самодельную базу символов, но столкнулся с проблемой, что в какой-то версии нет нужной фичи, а через пару версий этой фичи (или другой) уже нет. Кроме того, не очень понятно, где и как брать официальные бинарники, без проприетарного SDK Manager. В общем, я сдался. Анализ поведения Gradle показал, что javac+dx не используются вообще, а aapt используется только для обработки картинок. Если кто-то имеет возможность/хочет написать легковестную IDE или хотя бы скрипт для сборки приложений, то с радостью присоединюсь к проекту. Ссылки: https://developer.android.com/studio/build/building-cmdline.html - официальная инструкция ведет меня к ненавистному мной Gradle https://stackoverflow.com/questions/41132753/ - здесь кратко описывается процесс сборки через javac+dx+aapt, дополнительный блеск от jarsigner+zipalign. Это работает (проверял лично), однако, тут не описано как именно это сделать (впрочем, если почитать мануалы, то становится понятно), равно как не описано, как разруливать зависимости, что делать с ресурсами и т.д., а кроме того, как установить пакеты из SDK. https://metacpan.org/pod/Android::Build - ссылка уже не рабочая, но в архивах можно найти замечательный скрипт, который мог собрать простенькие приложения под Android В вопрос призывается Lex Hobbit из Как создать модульное android приложение
Ответы
Ответ 1
Как уже написали в комментарии к вопросу - сборка и "жизнь" без Android Studio - очень непроста. Но раз условия диктуют необходимость жить без нее, то будем адаптироваться. Предварительная подготовка среды сборки Java JDK Android SDK (в самом низу страницы в разделе "Get just the command line tools") Настройка переменных среды JAVA_BIN путь до bin папки Java JDK ANDROID_SDK путь до папки с Android SDK Приватный ключ для подписи APK файла (назовем его release_key.keystore) keytool -genkey -v -keystore release_key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000 Написать код приложения и проверить правильность структуры приложения Пошаговый алгоритм сборки Пошаговый алгоритм сборки Android приложения без использования gradle / ant / Android Studio (предполагается, что весь исходный код, включая AndroidManifest.xml, ресурсы, необходимые библиотеки у нас уже есть): Создаем R.java, PK файл из ассетов, ресурсов и AndroidManifest.xml и получаем MyApplication.apk.unaligned используя используя aapt package Компилируем java исходники в *.class исполльзуя для этого javac Создаем исполняемый файл classes.dex из *.class используя dx Добавляем в MyApplication.apk.unaligned файл classes.dex используя aapt add Подписываем MyApplication.apk.unaligned с дебажным или релизным ключем Выравниваем наш APK используя zipalign и вуаля! Создание .aar библиотеки Алгоритм создания библиотеки .aar схож с алгоритмом создания APK файла. в п.1 вместо R.java создаем R.txt используя aapt с опцией --output-text-symbols и название архива с расширением *.aar в п.3 вместо classes.dex создаем classes.jar используя jar cvf classes.jar *.class в п.4 добавляем classes.jar в архива с расширением *.aar и на этом все, наша отдельная AAR библиотека создана P/S чуть позже поправлю и можно написать скриптик для сборки. И кажется, как бы все было проще, если бы всеже перешли к Jack&Jill, но как сообщают разработчики - они осознали, во что это им обойдется. Ниже приведен процесс сборки APK с использованием тулчейна Jack.Ответ 2
Можно собрать под Intellij IDEA без Gradle. Еще пару лет назад я практиковал такое... Врукопашную собираешь все jar/aar вручную прокидываешь зависимости и вперед. Есть фанаты сборки Android под maven, ах ну да - это же толстый сборщик :) Был опыт сборки под Ant - не знаю насколько он толст для ТС... В любом случае, полностью присоединяюсь к @pavlofff: всем сердцем полюбить Gradle в кратчайшие сроки, либо купить много валерьянки с глицином, потому что современная сборка APK без помощи Android Studio способна "добить" любого
Комментариев нет:
Отправить комментарий