Как стать автором
Обновить

Комментарии 18

И чем же это лучше, чем использование Gradle?

Ничем, но зато можно понять как работает вся кухня внутри.

Каким образом, если в статье нет ничего похожего на объяснение того, что происходит? Только набор действий без комментариев.

Если изучить ссылки, которые приведены во "Введении", то там найдете больше подробностей.
Я специально их дал, чтобы не повторяться.


Цель этой статьи показать, что собрать приложение для Android можно собрать используя лишь пакетный менеджер и любой редактор.

В том, что писать bash скрипты умеют многие, а умеющих с Gradle работать гораздо меньше.


Я нашел статьи, где были просто набор команд. Их и применил. Для таких примитивных проектов gradle, даже make в общем-то не нужен.


Если покажете статью, где то же самое делают с помощью gradle, мне будет интересно почитать.

Тоже писал подобное. Весь toolchain — 14Mb (вместе с libgdx 56Mb) это всё необходимое для сборки ничего и больше качать не надо.
А gradle это минимум 2Гб оверхеда и медленная сборка. AndroidStudio это минимум 3Гб RAM но лучше больше, гиг триграм и других индексов.

а тут слил с флешки 14Мб, распаковал, написал
./ma init-app myapp
./ma build myapp
./ma install myapp
и оно на телефоне и сборка myapp занимает 2сек.

если надо по классам поискать, то весь индекс по всему андройду занимает ~160кб.
./ma find-class Intent | grep android
android.app.IntentService
android.app.PendingIntent
android.app.PendingIntent$CanceledException
android.app.PendingIntent$OnFinished
android.content.Intent
android.content.IntentFilter
android.content.IntentFilter$AuthorityEntry
android.content.Intent$FilterComparison
android.content.IntentFilter$MalformedMimeTypeException
android.content.IntentSender
android.content.IntentSender$OnFinished
android.content.IntentSender$SendIntentException
android.content.Intent$ShortcutIconResource
android.content.pm.LabeledIntent
android.provider.ContactsContract$Intents
android.provider.ContactsContract$Intents$Insert
android.provider.Contacts$Intents
android.provider.Contacts$Intents$Insert
android.provider.Contacts$Intents$UI
android.speech.RecognizerIntent
android.speech.RecognizerResultsIntent

./ma show-class android.content.Intent | grep put | grep double
public android.content.Intent putExtra(java.lang.String, double);
public android.content.Intent putExtra(java.lang.String, double[]);

Я так понимаю, java все равно надо через пакетный менеджер устанавливать?

не обязательно — можно использовать с той же флешки, указав путь к каталогу через "org.gradle.java.home"

Вообще-то предполагается что java уже есть да и apt-get быстро её поставит если надо. Но можно и с флешки. Когда мне понадобилась java от sun то она была недоступна несколько дней так что теперь у меня есть java.squashfs её можно без установки использовать достаточно пути прописать.
#!/bin/sh

cd $(dirname $0)
dir=$PWD

# https://youtrack.jetbrains.com/issue/IDEA-78860
export IBUS_ENABLE_SYNC_MODE=1

export JAVA_HOME=$dir/bin/jdk1.8.0_74/bin
export PATH=$dir/bin/jdk1.8.0_74/bin:$PATH

./bin/android-studio/bin/studio.sh

Изначально был скрипт который монтировал Android sdk, ndk, studio, eclipse, jdk и gradle и всякие кэши android studio из squashfs а поверх overlayfs но потом пришлось отказаться от overlayfs в пользу aufs. (На штатной убунте не работает. Автор Miklos Szeredi сказал что в «This should be fixed in recent kernels (4.2 and above)») Так вот все файлы монтировалисть как readonly а изменения складывались в отдельную папку. И сразу стало ясно что избыточность просто потрясающая. 3.6Гиг против 30Мб.
Зато разворачивается быстро скопировал нажал mount-fs и запустил android-studio и не надо ждать пока весь этот шлак выкачается по новой, да и как обычно обязательно что-то пойдёт не так. Только железо должно быть повынослевее и минимум с 3Гб озу, а лучше с 32.

android-ndk-r10e.squashfs - 605Mb
android-sdk-linux.squashfs - 2100Mb
android-studio.squashfs - 314Mb
eclipse.squashfs - 265Mb
java.squashfs - 58Mb
java-src.squashfs - 13Mb
jdk1.8.0_74.squashfs - 161Mb
user.squashfs - 177Mb

Эта ссылка есть у меня во "Введении", по сути я переделал этот совет для Linux.

Упс, пропустил. Извиняюсь.
Как видно из статьи начать разработку в консоли совсем несложно.


но зачем?) нормальную морду без UI не сделаешь (100500 сборок с правками хмл не для меня), а без UI только для себя любимого делать… Я затрудняюсь представить что мне нужно написать для себя без нормального UI, и что не может быть сделано через эмулятор баша…
но зачем?

"Потомучто мы можем!" :)


Я в начале стати написал, что этот способ не годится для сложной разработки.
Но если вам надо сделать что-то простое или, например, собрать чужую программу, то почему бы и нет.
Для этих целей IDE не надо, а gradle устанавливается по зависимостям, при установке SDK.


Или как в моем случае, Android Studio на нетбук не влезет, а программу надо написать очень примитивную.


Поэтому для ряда задач такой способ сорки имеет право на жизнь.


что мне нужно написать для себя без нормального UI, и что не может быть сделано через эмулятор баша…

Я намучался на андройде с эмулятором питона и SL4A и решил переписать тот же код на Java. Мне результат понравился.

Подскажите пожалуйста а как теперь к этому проекту подсоединить стороннею библиотеку? (objectbox-daocompat-1.0.0.jar например)
Добавте при компиляции вашу либу javac -classpath objectbox-daocompat-1.0.0.jar:android.jar…
Дальше как обычно
Понимаю, что статья старая, но всё же спрошу. Как в данную цепочку натив добавить? Тот же C++. Часть с NDK ясно: при помощи clang/gcc собираем. Получаем одну или несколько *.so библиотек. А дальше как их добавить в сборку?
Примерно так-же как обычно. Вынимаем из ndk (toolset-ы) компилятор и линковщик заголовки и библиотеки (для разных платформ: arm64-v8a,armeabi,armeabi-v7a,mips,mips64,x86,x86_64), им собираем .so дальше добавляем это в apk как обычные файлы например в директорию libs/armeabi и загружаем из явы в зависимости от платформы нужный .so.
ps: из минусов получается довольно большой объём, как у toolset-ов так и у результирующего apk.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации