Как создавать приложения для Android без IDE из командной строки

HelloWorld без Android Studio

Обновление: я создал новый курс, в котором объясняется, как можно избежать использования Android Studio и Gradle, но по-прежнему использовать IntelliJ iDE:



Привет всем!

В этом руководстве я покажу вам, как вы можете создать / скомпилировать APK (приложение для Android) из вашего java-кода с помощью терминала (в Linux) без IDE или, другими словами, без Android Studio. В конце я также покажу вам сценарий для автоматизации процесса. В этом примере я буду использовать Android API 19 (4.4 Kitkat), чтобы создать простой HelloWorld. Я хочу сказать, что я буду делать это руководство без команды Android, которая устарела.

1. Установить Java

Во-первых, вам нужно установить java, в моем случае я устанавливаю версию без головы, потому что я не использую графику (только командную строку):

sudo apt-get install openjdk-8-jdk-headless

2. Установите все инструменты SDK.

Затем загрузите последние инструменты SDK для Android, которые вы можете найти здесь:



Или просто сделайте:

wget https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip

Я рекомендую распаковать его в каталог / opt внутри другого каталога, который мы назовем «android-sdk»:

mkdir -p /opt/android-sdk
unzip sdk-tools-linux-3859397.zip -d /opt/android-sdk

Теперь нам нужно установить инструменты платформы (которые содержат ADB), Android API и инструменты сборки.

Фактически, если вы используете Debian, вы можете избежать установки пакета platform-tools и установить только ADB следующим образом:

sudo apt-get install adb

3. Закодируйте приложение.

В этом примере я хочу скомпилировать простой файл HelloWorld. Итак, для начала нам нужно создать каталог проекта:

mkdir HelloAndroid
cd HelloAndroid

Затем нам нужно составить дерево файлов:

mkdir -p src/com/example/helloandroid
mkdir obj
mkdir bin
mkdir -p res/layout
mkdir res/values
mkdir res/drawable

Если вы используете внешние библиотеки (файлы .jar), также создайте для них папку:

mkdir libs

Вот пример:



Как использовать JavaMail на Android (без Gradle)
Привет, ребята! medium.com



Создайте файл src / com / example / helloandroid / MainActivity.java и поместите его внутрь:

Создайте файл strings.xml в папке res / values. Он содержит весь текст, который использует ваше приложение:

Activity_main.xml - это файл макета, который должен находиться в res / layout:

Вам также необходимо добавить файл AndroidManifest.xml в корень:

4. Создайте код.

Теперь я рекомендую сохранить путь к проекту в переменной:

export PROJ=path/to/HelloAndroid

Во-первых, нам нужно сгенерировать файл R.java, который необходим для нашего кода:

cd /opt/android-sdk/build-tools/26.0.1/
./aapt package -f -m -J $PROJ/src -M $PROJ/AndroidManifest.xml -S $PROJ/res -I /opt/android-sdk/platforms/android-19/android.jar
  • -m указывает aapt создавать каталоги в местоположении, указанном -J
  • -J указывает, куда идет вывод. Если сказать -J src, будет создан файл типа src / com / example / helloandroid / R.java.
  • -S указывает, где находится каталог res с чертежами, макетами и т. Д.
  • -Я сообщает aapt, где находится android.jar. Вы можете найти свой в таком месте, как android-sdk / platform / android- ‹Уровень API› /android.jar

Теперь нам нужно скомпилировать файлы .java:

cd /path/to/AndroidHello
javac -d obj -classpath src -bootclasspath /opt/android-sdk/platforms/android-19/android.jar src/com/example/helloandroid/*.java

Если вы используете внешний, добавьте к нему путь к классам:

javac -d obj -classpath "src:libs/<your-lib>.jar" -bootclasspath /opt/android-sdk/platforms/android-19/android.jar src/com/example/helloandroid/*.java

Скомпилированные файлы .class находятся в папке obj, но Android не может их прочитать. Мы должны перевести их в файл с именем «classes.dex», который будет прочитан средой выполнения dalvik Android:

cd /opt/android-sdk/build-tools/26.0.1/
./dx --dex --output=$PROJ/bin/classes.dex $PROJ/obj

Но если вы используете внешние библиотеки, лучше сделайте:

./dx --dex --output=$PROJ/bin/classes.dex $PROJ/*.jar $PROJ/obj

Если у вас есть ошибка UNEXPECTED TOP-LEVEL EXCEPTION, это может быть связано с тем, что вы используете старые инструменты сборки, а DX пытается перевести java 1.7, а не 1.8. Для решения проблемы необходимо указать версию java 1.7 в предыдущей команде javac:

cd /path/to/AndroidHello
javac -d obj -source 1.7 -target 1.7 -classpath src -bootclasspath /opt/android-sdk/platforms/android-19/android.jar src/com/example/helloandroid/*.java

Параметр -source указывает версию Java ваших исходных файлов. Обратите внимание, что мы можем использовать предыдущие версии Java, даже если используем OpenJDK 8 (или 1.8).

Теперь мы можем поместить все в APK:

./aapt package -f -m -F $PROJ/bin/hello.unaligned.apk -M $PROJ/AndroidManifest.xml -S $PROJ/res -I /opt/android-sdk/platforms/android-19/android.jar
cp $PROJ/bin/classes.dex .
./aapt add $PROJ/bin/hello.unaligned.apk classes.dex

Имейте в виду: до сих пор мы использовали три команды AAPT, первая и вторая похожи, но не работают одинаково. Вы должны скопировать файл classes.dex в корень проекта, как указано выше! В противном случае AAPT не поместит этот файл в нужное место в архиве APK (потому что APK похож на файл .zip).

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

При желании вы можете проверить содержимое пакета следующим образом:

./aapt list $PROJ/bin/hello.unaligned.apk

5. Подпишите пакет.

Для этого мы сначала создаем новое хранилище ключей с помощью команды keytool, предоставленной Java:

keytool -genkeypair -validity 365 -keystore mykey.keystore -keyalg RSA -keysize 2048

Просто ответьте на вопросы и введите пароль.

Вы можете подписать APK следующим образом:

./apksigner sign --ks mykey.keystore $PROJ/bin/hello.apk

Обратите внимание, что apksigner существует только с Build Tools 24.0.3.

6. Выровняйте пакет.

Это так просто:

./zipalign -f 4 $PROJ/bin/hello.unaligned.apk $PROJ/bin/hello.apk

Выравнивание увеличивает производительность приложения и может уменьшить использование памяти.

7. Протестируйте приложение.

Чтобы протестировать приложение, подключите смартфон с помощью USB-кабеля и используйте ADB:

adb install $PROJ/bin/hello.apk
adb shell am start -n com.example.helloandroid/.MainActivity

Но перед запуском этой команды я рекомендую запустить эту:

adb logcat

Если во время установки или запуска произошла ошибка, вы увидите ее с помощью этой команды.

Вуаля! Вот результат:

8. Сделайте сценарий

Если вы не хотите выполнять все эти шаги каждый раз при компиляции приложения, создайте сценарий! Вот мой:

Чтобы использовать его, запустите:

cd /path/to/AndroidHello
./build.sh test

Примечания

  • Вы можете удалить «test», если хотите просто скомпилировать без тестирования.
  • Этот сценарий только компилирует и запускает приложение на телефоне. Но я также могу создать сценарий для автоматического создания нового проекта, подобного этому. Думаю, у меня есть хорошая идея, но мне нужно знать, если вы заинтересованы. В таком случае, пожалуйста, оставьте комментарий или напишите мне по электронной почте.
  • Также могу доделать скрипт для внешних библиотек. Также дайте мне знать, если вы этого хотите.

Если у вас есть вопросы, не стесняйтесь задавать их ниже или по электронной почте ;-)! РЕДАКТИРОВАТЬ: На самом деле я очень занят ...