LINUX.ORG.RU

Как кодить и запускать App на Android без ATD Plugin и без Android Studio?

 


1

3

(Ответы в конце поста!)

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

Т.е.

1) Беру свой редактор: eclipse, vim, gedit и т.п. Пишу в этих редакторах манифесты, .java файлы и т.п. Что и как писать, чтобы запилить простую софтину?

2) Запускаю сборку проекта в консоли, получаю некий .apk или что там.

3) Запускаю некую консольную тулзу, которая фигачит сборку на живой девайс по USB, запускает его там.

Хочется набора не связанных операций, а не некую студию с кнопкой «build + run».

Можно ли так? Как? При этом чтобы в производственной цепочке не было официально призираемых гуглом тулзов.

Опишите как будет устроен каждый пункт физически. Что за тулзы запускать, как компилить, как собирать сборку, в какой последовательности, от чего что зависит и т.п. Дайте мануал.

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


_____________________________________
Кусок ответов.
_____________________________________

1. Что и как писать — ответ in progress.

2. Чем собирать — в комплекте Android Studio есть билдер Gradle. Пишем ему build.gradle, запускаем в консоли. Дальше гуглить. https://stackoverflow.com/a/32643466/749515

Не работает нихрена.

Скачал sdk-tools-linux-3859397.zip отсюда https://developer.android.com/studio/index.html ( В САМОМ НИЗУ СТРАНИЦЫ ). Распаковал .zip, положил в:
/ar/bin/tools

Берём вот этот сэмпл-пример-проект:
https://github.com/googlesamples/android-Camera2Basic
клонируем сюда:
/ar/src/android_examples/android-Camera2Basic

Идём куда склонировали, запускаем:

ANDROID_HOME=/ar/bin/tools /ar/bin/android-studio/gradle/gradle-3.2/bin/gradle .

Оно говорит:

You have not accepted the license agreements of the following SDK components:
  [Android SDK Build-Tools 25.0.3, Android SDK Platform 25].
  Before building your project, you need to accept the license agreements and complete the installation of the missing components using the Android Studio SDK Manager.
Что делать - непонятно. Пробовал:
/ar/bin/tools/bin/sdkmanager --update
Не помогло.

3. Консольная тулза — adb. Позволяет многое, даже коннект через wi-fi, установку APK, запуск софтины, копирование файлов туда-сюда, выполнение шелл комманд. Официально поддерживается.

adb pull /mnt/extSdCard/DCIM/Camera/20170606_172501.jpg /tmp/1.jpg
adb shell ifconfig wlan0


Последнее исправление: hlamotron (всего исправлений: 7)

Беру свой редактор: eclipse, vim, gedit и т.п. Пишу в этих редакторах манифесты, .java файлы и т.п.

Бери

Запускаю сборку проекта в консоли, получаю некий .apk или что там.

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

Эти пункты, вроде как, хорошо реализуются с помощью android-sdk, я вот так на Haxe под ведро писал - редактировал в Vim, компилял lime и деплоил через adb.

nihirash ★★★
()

А что мешает? Ant в качестве билдсистемы(или Gradle вместо), Android SDK в руки. И всё. Я так и пишу. Никаких ущербных андроид студий уже продолжительное время не видел.

a1batross ★★★★★
()
Ответ на: комментарий от andreyu

Сборка нативного кода с помощью ndk-build, а сборка ява-кода, apk и его подпись с помощью gradle.

Как-то так:

cd $(ANDROID_PREFIX) && ndk-build NDK_DEBUG=0 && ./gradlew assembleRelease

andreyu ★★★★★
()
Ответ на: комментарий от vvviperrr

Плохо пока может. Лучше по-старинке собирать.

mono ★★★★★
()

Господа, помогите собрать sample из гитхаба гугла с помощью gradle. В конце топика дофигачено описание проблемы.

hlamotron
() автор топика
Ответ на: комментарий от hlamotron
sdkmanager --licenses

Попробуй, но я не уверен. Вообще, если ты откроешь проект в Android Studio, там все эти SDK подтянутся автоматом.

EXL ★★★★★
()
Последнее исправление: EXL (всего исправлений: 1)
Ответ на: комментарий от vvviperrr

андроид плагин в градле уже умеет собирать нативный код

Поддержка заявлена была больше года назад. Но «умеет делать» и «действительно делать» - это разные понятия.

andreyu ★★★★★
()
Ответ на: комментарий от vvviperrr

Время идет, а поддержка сборки нативного кода все еще в зачаточном состоянии:
http://tools.android.com/tech-docs/new-build-system/gradle-experimental

Сейчас наверное стоит смотреть в сторону cmake - https://developer.android.com/studio/projects/add-native-code.html

andreyu ★★★★★
()
Ответ на: комментарий от vvviperrr

собирал им небольшой проект, проблем не возникло

А я собирал им большие проекты, проблем было много. Проще оказалось использовать ndk-build.

andreyu ★★★★★
()
Ответ на: комментарий от vvviperrr

На хелловорлдах там действительно все отлично работает, даже одновременная отладка Java и C++. На больших проектах все плохо.

anonymous
()
Ответ на: комментарий от andreyu

Сейчас наверное стоит смотреть в сторону cmake - https://developer.android.com/studio/projects/add-native-code.html

Куча проблем на проектах с несколькими SO-шками. Костыльки в виде складирования SO-шечек в отдельные папочки и забирание оттуда их Gradle'ом повсеместно. Отдельно похлопаем идиотам из Google за бинари в Git-репозитории.

Но это ладно. Смех в том, что в Android Studio НЕТУ поддержки CMake вообще. Даже подсветки нету. И расширений-плагинов, добавляющих её, тоже.

Нафиг такую хрень. Кажется, ndk-build выиграет эту битву.

EXL ★★★★★
()
Ответ на: комментарий от vvviperrr

андроид плагин в градле уже умеет собирать нативный код

Официальные гайды и документация Android Studio говорят только об использовании CMake и ndk-build. Поддержка сборки нативного кода непосредственно Gradle'ом как была в experimental, так там по всей видимости и останется. А судя по тому, что все официальные NDK-проекты Google были недавно переведены на CMake: https://github.com/googlesamples/android-ndk, становится ясно в пользу чего Google сделал свой выбор.

Так что пусть ТС делает по официальным гайдам, а то его проект внезапно может превратиться в тыкву, когда в очередной раз что-то задумают выкинуть из experimental Gradle.

EXL ★★★★★
()
Ответ на: комментарий от andreyu

ndk-build NDK_DEBUG=0 && ./gradlew assembleRelease

Хм, а у меня ndk-build автоматом вызывает сам Gradle, то бишь тупо выполняю одну команду ./gradlew assembleRelease для сборки как либ, так и APK. В build.gradle такое:

externalNativeBuild {
    ndkBuild {
        path 'src/main/cpp/Android.mk'
    }

    // cmake {
    //    path 'src/main/cpp/CMakeLists.txt'
    // }
}

[весь файл целиком]

Кажется, теперь я понимаю, почему у вас читается Application.mk, а у меня нет :)

EXL ★★★★★
()
Ответ на: комментарий от EXL

Куча проблем на проектах с несколькими SO-шками. Костыльки в виде складирования SO-шечек в отдельные папочки и забирание оттуда их Gradle'ом повсеместно

Да, это печально. Но я все же планирую собраться с силами и выделить время на создание «правильного, универсального» cmakelist.txt для своего движка и новых проектов.

Отдельно похлопаем идиотам из Google за бинари в Git-репозитории.

HeyZap, Samsung, Vundle (и еще сотни других) складируют кучу мусора в репозиториях и публичных архивах sdk.

Смех в том, что в Android Studio НЕТУ поддержки CMake вообще. Даже подсветки нету. И расширений-плагинов, добавляющих её, тоже.

Давно не слежу за развитием android studio. Благо гугель все еще поддерживает альтернативу в виде консольных утилит.

andreyu ★★★★★
()
Ответ на: комментарий от EXL

Кажется, теперь я понимаю, почему у вас читается Application.mk, а у меня нет :)

Да, возможно причина в этом.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

Но я все же планирую собраться с силами и выделить время на создание «правильного, универсального» cmakelist.txt для своего движка и новых проектов.

Интересно, надеюсь, отпишешься потом о результатах.

EXL ★★★★★
()
Последнее исправление: EXL (всего исправлений: 2)
Ответ на: комментарий от EXL

Интересно, надеюсь, отпишешься потом о результатах.

Если соберусь с силами.

andreyu ★★★★★
()
Ответ на: комментарий от hlamotron

Берёшь старый SDK, пишешь в консоли android create project (какие там аргументы посмотришь сам). Он создаёт AndroidManifest, папочки и скрипты Ant-а. Потом пишешь ant release и получаешь APK в bin/projectname-release-unsigned.apk, подписываешь jarsigner-ом и проходишься zipalign из состава SDK.

Как там в новых я не знаю, но слышал, что всё сломали и вообще не радужно.

Ещё mittorn может рассказать как собирать APK без Ant и Gradle вообще используя только утилиты из SDK и JDK, напрямую вызывая компилятор, aapt и прочее.

a1batross ★★★★★
()
Ответ на: комментарий от a1batross

Как там в новых я не знаю, но слышал, что всё сломали и вообще не радужно.

$ android create project
*************************************************************************
The "android" command is deprecated.
For manual SDK, AVD, and project management, please use Android Studio.
For command-line tools, use tools/bin/sdkmanager and tools/bin/avdmanager
*************************************************************************
Invalid or unsupported command "create project"

Supported commands are:
android list target
android list avd
android list device
android create avd
android move avd
android delete avd
android list sdk
android update sdk

И ещё удалили GCC 4.8 из состава нового NDK, остался только GCC 4.9

EXL ★★★★★
()

1. Способ получить актуальный android sdk:

curl http://dl.google.com/android/android-sdk_r22.0.4-linux.tgz | tar xzf -
export ANDROID_HOME=$PWD/android-sdk-linux
export PATH=${PATH}:${ANDROID_HOME}/tools:${ANDROID_HOME}/platform-tools:$PWD/android-ndk
sleep 3s; echo y | android update sdk -u --filter platform-tools,build-tools-19.0.0,android-19,extra-android-support --force 

2. есть https://github.com/mittorn/microasdk - очень старый sdk
Ему можно подсунуть android.jar поновее.
Т.к dx.jar там требует старую яву, придётся взять из более нового sdk, это если нужен совсем маленький sdk, но он может собрать только что-либо примитивное. В этом случае придётся собирать вручную без всяких ant, в интернете есть несколько инструкций по этому делу.

Комманды создания проекта больше нету, потому придётся взять готовый build.xml и AndroidManifest из какого-нибудь хелловорлда.

Для сборки существующего проекта
ant build


Сама сборка apk из себя представляет:
1. генерация интерфейсов через aidl
2. генерация классов описания ресурсов через aapt
3. компиляция кода через javac
4. дексификация кода через dx
5. генерация ресурсов через aapt
6. сборка apk (через apkbuilder или можно просто через zip)
7. zipalign (ускорит доступ в архиве)
8. подпись

mittorn ★★★★★
()
Последнее исправление: mittorn (всего исправлений: 1)
Ответ на: комментарий от mittorn

А 4.8 мог что-то что не мог 4.9? Я лично никаких проблем при переходе не заметил.

Я это просто отметил. Тоже проблем не заметил при переходе. Ах да, ещё в новом NDK по-дефолту компилятор Clang/LLVM. Вот там более серьёзные проблемы имеются. Например, SDL2 для armeabi не компилируется из-за сегфолта в самом компиляторе.

EXL ★★★★★
()
Ответ на: комментарий от EXL

Это лол
Добавлю ещё что они решили выпилить hardfloat сборку из ndk потому что новые нанятые макаки не осилили понять как она работала и не осилили новые хидеры bionic адаптировать под неё.
А у нас оно используется в xash3d и является единственным допустимым abi для модов на armv7
Фактически в старых bionic все стандартные функции функции используюзщие float'ы были либо инлайновыми либо в math.h, в котором уже стоял нужный аттрибут.
А в новом ndk к примеру atof перестал быть инлайновым и аттрибута к нему не имеется.
В ndk всё равно gcc не обновляется, по этому его можно не обновлять, а при необходимости подтянуть хиледеры из новых версий
У меня на github ещё есть ndk r10d с gcc6, выдранным из crystax
В нём правда не хватает оптимизированной реализации sincos (та что в bionic - sucks и присутствует только начиная с 2.3,при сборке им совместимость с 2.2- ломается). В отличте от crystax он не линкует свои потроха.

mittorn ★★★★★
()
Ответ на: комментарий от mittorn

ещё что они решили выпилить hardfloat сборку из ndk

А разве уже не выпилили? Вроде раньше был armeabi-v7a-hard, а сейчас его тупо нет.

выдранным из crystax

Кстати, а как Crystax дружит с этими hard/float ABI calling convention?

EXL ★★★★★
()
Ответ на: комментарий от hlamotron

Google забила на GUI для управления AVD и SDK, а CLI ощущение что сделан по остаточному принципу. Сам активно изучаю андроид и делаю свое приложение. Пользовался eclipse почти 10 лет, но из-за android переключился на idea community edition. Как начал изучать:

  • сгенерировал проект в android studio;
  • построил его из консоли, посмотрел организацию;
  • скчал репозитарий с семплами: git clone https://android.googlesource.com/platform/frameworks/support.git Исправил/Написал(в зависимости от версии android) конфиги под сборку ApiDemos gradle'ом.
  • собрал в терминале, ипортировал в idea, запусил в эмуляторе.

Каждый шаг был не простым и приводил к очередному текстовому квесту. Лайфкак: google.com > site:googlesource.com «build.gradle» + базводры. Не пользуюсь maven и тем более ant для сборки android, хотя очень привык к maven и начал собирать все именно им. С maven возникают непонятки которые требовали влезание в исходники плагина и появлялись никому ненужные мысли о патчах в апстим плагина, а еще проблемы с интеграцией с ide. Потому gradle, сразу снимается куча вопросов, за тебя уже все написали, есть примеры и лучшие практики в интернетах.

Aber ★★★★★
()
Ответ на: комментарий от Aber

Google забила на GUI для управления AVD и SDK,

Она (компания) перенесла и переносит его в Android Studio. Там всё это теперь развивается.

EXL ★★★★★
()
Последнее исправление: EXL (всего исправлений: 1)
Ответ на: комментарий от EXL

Вопрос, как от человека пока не очень разбирающегося, у меня такая странность мне всегда после запуска avd через ide приходится в терминале выполнять adb connect localhost, а иначе ide и не видит только что запущенное устройств и, как следствие, до выполнения connect не позволяет запустить на уст-ве приложение. Чтоб сделать чтоб оно как-то само коннектилось?

Aber ★★★★★
()
Ответ на: комментарий от Aber

У меня коннект тоже всё время отваливается или глючит. Только крон с реконнектом спасают отцов русских тоталитаризмофф.

hlamotron
() автор топика
Ответ на: комментарий от EXL

Ну как crystax дружит не знаю, но у выдранного gcc6 проблем нету.
Мне больше интересно как дела со шлангом обстоят, но проверять лень, к тому же в 10 ndk он слишком древний.

mittorn ★★★★★
()
Ответ на: комментарий от waker

А что мешает юзать древние sdk?
Выше я кидал как скачать старый sdk
Ну а ему уже можно подсунуть android.jar поновее если вдруг понадобились новые фичи.

mittorn ★★★★★
()
Ответ на: комментарий от mittorn

А что мешает юзать древние sdk?

не факт, что гемор с древними сдк и подсовыванием android.jar будет меньше, чем с android studio и свежими сдк.

опять же, ты уверен, что sdkmanager из древних сдк сможет поставить все необходимое? точнее, что он сможет это делать достаточно долгое время? гугелу ничего не стоит формат на сервере поменять, как только увидят, что древними сдк пользуется 0.1% лоровцев.

waker ★★★★★
()
Ответ на: комментарий от Aber

Это в Android Studio или IDEA? У меня нет таких проблем в AS, всё гладко с эмуляторами и adb, IDEA не использую.

EXL ★★★★★
()
Ответ на: комментарий от EXL

И там, и там. Хм, а у тебя adb из sdk или из поставки дистрибутива?

Может его запуск организовать через систему инициализации... да не, лень.

Aber ★★★★★
()
Ответ на: комментарий от mittorn

А что мешает юзать древние sdk?

Вот кстати, осенью прошлого года запустил привычный sdk manager, решил обновить и все... . После обновления я не нашел ни sdk/avd manager из которого запустил обновление, ни ddms. Даже подумал что что-то пошло не так и sdk потерял целостность, тыкался пока на changelog не наткнулся.

Aber ★★★★★
()
Ответ на: комментарий от Aber

Хм, а у тебя adb из sdk или из поставки дистрибутива?

Тот, что шёл вместе с Android Studio и ставился ей.

EXL ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.