Как создавать приложения для 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
Вот пример:
Создайте файл 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», если хотите просто скомпилировать без тестирования.
- Этот сценарий только компилирует и запускает приложение на телефоне. Но я также могу создать сценарий для автоматического создания нового проекта, подобного этому. Думаю, у меня есть хорошая идея, но мне нужно знать, если вы заинтересованы. В таком случае, пожалуйста, оставьте комментарий или напишите мне по электронной почте.
- Также могу доделать скрипт для внешних библиотек. Также дайте мне знать, если вы этого хотите.
Если у вас есть вопросы, не стесняйтесь задавать их ниже или по электронной почте ;-)! РЕДАКТИРОВАТЬ: На самом деле я очень занят ...