Ответ 1
Это инструкции, которые в конечном итоге сработали для меня. Я получил их, деконструировав Google Ant script, на котором основан ответ Rob.
Следующий контент от "Android-программирования без IDE" из документации (архивировано здесь); copyright 2017 by geekygenius, Майкл Аллан, cascal, Дорон Бехар, mnoronha и AndroidMechanic; лицензированный под CC BY-SA 3.0. Архив полного Содержимое документации можно найти на archive.org, где пример индексируется по его идентификатору темы: 85, например: 9496.
Это минималистский пример Hello World, который использует только самые базовые инструменты для Android.
Требования и допущения
- Oracle JDK 1.7 или более поздняя версия
- Android SDK Tools (только инструменты командной строки)
В этом примере предполагается Linux. Возможно, вам придется настроить синтаксис для своей собственной платформы.
Настройка SDK для Android
После распаковки версии SDK:
-
Установите дополнительные пакеты с помощью диспетчера SDK. Не используйте
android update sdk --no-ui
, как указано в комплекте Readme.txt; он загружает около 30 ГБ ненужных файлов. Вместо этого используйте интерактивный менеджер SDKandroid sdk
для получения рекомендуемого минимума пакетов. -
Приложите следующие каталоги JDK и SDK к вашему исполнению PATH. Это необязательно, но нижеприведенные инструкции предполагают.
- JDK/бен
- SDK/платформенные инструменты
- SDK/инструменты
- SDK/build-tools/LATEST (как установлено на шаге 1)
-
Создайте виртуальное устройство Android. Используйте интерактивный AVD Manager (
android avd
). Возможно, вам придется немного поиграть и найти совет; инструкции на месте не всегда полезны.(Вы также можете использовать свое собственное устройство)
-
Запустите устройство:
emulator -avd DEVICE
-
Если экран устройства заблокирован, проведите по экрану, чтобы разблокировать его.
Оставьте его включенным во время программирования приложения.
Кодирование приложения
-
Перейдите в пустой рабочий каталог.
-
Сделайте исходный файл:
mkdir --parents src/dom/domain touch src/dom/domain/SayingHello.java
Содержание:
package dom.domain; import android.widget.TextView; public final class SayingHello extends android.app.Activity { protected @Override void onCreate( final android.os.Bundle activityState ) { super.onCreate( activityState ); final TextView textV = new TextView( SayingHello.this ); textV.setText( "Hello world" ); setContentView( textV ); } }
-
Добавить манифест:
touch AndroidManifest.xml
Содержание:
<?xml version='1.0'?> <manifest xmlns:a='http://schemas.android.com/apk/res/android' package='dom.domain' a:versionCode='0' a:versionName='0'> <application a:label='Saying hello'> <activity a:name='dom.domain.SayingHello'> <intent-filter> <category a:name='android.intent.category.LAUNCHER'/> <action a:name='android.intent.action.MAIN'/> </intent-filter> </activity> </application> </manifest>
-
Создайте подкаталог для объявленных ресурсов:
mkdir res
Оставьте его пустым.
Построение кода
-
Сгенерировать источник для объявлений ресурсов. Замените здесь правильный путь к SDK, и установленный API для сборки против (например, "android-23" ):
aapt package -f \ -I SDK/platforms/android-API/android.jar \ -J src -m \ -M AndroidManifest.xml -S res -v
Объявления ресурсов (описанные ниже) фактически являются необязательными. В то же время вышеупомянутый вызов ничего не делает, если res/все еще пуст.
-
Скомпилируйте исходный код в байт-код Java (.java →.class):
javac \ -bootclasspath SDK/platforms/android-API/android.jar \ -classpath src -source 1.7 -target 1.7 \ src/dom/domain/*.java
-
Перевести байт-код с Java на Android (.class →.dex):
Сначала используйте Jill (.class →.jayce):
java -jar SDK/build-tools/LATEST/jill.jar \ --output classes.jayce src
Затем Jack (.jayce →.dex):
java -jar SDK/build-tools/LATEST/jack.jar \ --import classes.jayce --output-dex .
Байт-код Android раньше назывался "исполняемый код Dalvik", и поэтому "dex".
Вы можете заменить шаги 11 и 12 одним вызовом на Джек, если хотите; он может компилироваться непосредственно из источника Java (.java →.dex). Но есть преимущества для компиляции с
javac
. Это более известный, хорошо документированный и более широко используемый инструмент. -
Пакет файлов ресурсов, включая манифест:
aapt package -f \ -F app.apkPart \ -I SDK/platforms/android-API/android.jar \ -M AndroidManifest.xml -S res -v
Это приводит к частичному APK файлу (пакет приложений для Android).
-
Сделайте полный APK с помощью инструмента
ApkBuilder
:java -classpath SDK/tools/lib/sdklib.jar \ com.android.sdklib.build.ApkBuilderMain \ app.apkUnalign \ -d -f classes.dex -v -z app.apkPart
Он предупреждает: "ЭТО ИНСТРУМЕНТ УДАЛЕН. См." Справка "для получения дополнительной информации". Если
--help
терпит неудачу сArrayIndexOutOfBoundsException
, затем вместо этого не передавайте аргументы:java -classpath SDK/tools/lib/sdklib.jar \ com.android.sdklib.build.ApkBuilderMain
В нем объясняется, что CLI (
ApkBuilderMain
) устарел в пользу прямого вызова Java API (ApkBuilder
). (Если вы знаете, как это сделать из командной строки, обновите этот пример.) -
Оптимизируйте выравнивание данных APK (рекомендуемая практика):
zipalign -f -v 4 app.apkUnalign app.apk
Установка и запуск
-
Установите приложение на Android-устройство:
adb install -r app.apk
-
Запустите приложение:
adb shell am start -n dom.domain/.SayingHello
Он должен запускаться и говорить привет.
Это все. Это то, что нужно, чтобы поздороваться с базовыми инструментами Android.
Объявление ресурса
Этот раздел является необязательным. Заявки ресурсов не требуются для простого приложения "привет мир". Если они не требуются для вашего приложения, то вы можете упростить сборку, опуская шаг 10, и удаление ссылки на каталог res/с шага 13.
В противном случае, здесь приведен краткий пример того, как объявить ресурс, и как ссылаться на него.
-
Добавить файл ресурсов:
mkdir res/values touch res/values/values.xml
Содержание:
<?xml version='1.0'?> <resources> <string name='appLabel'>Saying hello</string> </resources>
-
Ссылка на ресурс из манифеста XML. Это декларативный стиль ссылки:
<!-- <application a:label='Saying hello'> --> <application a:label='@string/appLabel'>
-
Ссылка на тот же ресурс из источника Java. Это настоятельная рекомендация:
// v.setText( "Hello world" ); v.setText( "This app is called " + getResources().getString( R.string.appLabel ));
-
Протестируйте приведенные выше изменения путем перестройки, переустановки и повторное выполнение приложения (шаги 10-17).
Он должен перезапустить и сказать: "Это приложение называется Saying hello".
Удаление приложения
adb uninstall dom.domain
См. также
- рабочий пример - рабочая сборка script, которая использует приведенные выше команды