Невозможно установить приложение, построенное на CLI, за пределами Android Studio - отсутствует «ошибка при удалении», отсутствует код ошибки / base.apk - PullRequest
0 голосов
/ 16 ноября 2018

Я довольно новичок в нативной разработке для Android и в последнее время экспериментирую со сборкой непосредственно из CLI без Android Studio (действительно не люблю IDE и нахожу Gradle слишком сложным, хотя пока не могу запустить мой набор инструментов ... )

Используя руководство со всего Интернета, в частности this , у меня есть чрезвычайно простое приложение, которое успешно компилируется в подписанный и выровненный APK (насколько я могу судить). Я работаю на платформе 14 с Java 1.8, и я не заметил никаких изменений при изменении этой конфигурации.

Я поставил источник приложения на GitHub для справки по этому вопросу. Это одно занятие с одним макетом.

Когда дело доходит до adb install (или ручной установки с устройства), установка всегда завершается неудачно с INSTALL_FAILED_INVALID_APK ... Package /data/app/net.ilmiont.helloworld-...==/base.apk code is missing (... - это некоторый длинный идентификатор по внешнему виду).

Logcat

Запуск adb logcat во время попытки установки, я получаю это:

11-16 10:34:52.729 24742 7402 I Finsky : [9791] com.google.android.finsky.verifier.impl.ea.a(82): Skipping verification. Disabled by user setting 11-16 10:34:52.729 24742 7402 I Finsky : [9791] com.google.android.finsky.verifier.impl.ea.a(43): Skipping anti malware verification due to pre-check failure 11-16 10:34:52.730 24742 24742 I Finsky : [2] com.google.android.finsky.verifier.impl.fs.c(164): Verifying id=132, result=1 11-16 10:34:52.735 24742 24742 I Finsky : [2] com.google.android.finsky.verifier.impl.fs.c(177): Verification complete: id=132, package_name=net.ilmiont.helloworld 11-16 10:34:52.752 1856 27782 E : Couldn't opendir /data/data/net.ilmiont.helloworld: No such file or directory 11-16 10:34:52.753 1856 27782 E installd: Failed to delete /data/data/net.ilmiont.helloworld: No such file or directory 11-16 10:34:52.753 1856 27782 E : Couldn't opendir /data/user_de/0/net.ilmiont.helloworld: No such file or directory 11-16 10:34:52.753 1856 27782 E installd: Failed to delete /data/user_de/0/net.ilmiont.helloworld: No such file or directory 11-16 10:34:52.754 2198 2398 W PackageManager: com.android.server.pm.Installer$InstallerException: android.os.ServiceSpecificException: Failed to delete /data/user_de/0/net.ilmiont.helloworld (code 2) 11-16 10:34:52.756 2198 2398 W PackageManager: Package couldn't be installed in /data/app/net.ilmiont.helloworld-pbDVHiVe6mEghhiOqRUNjg== 11-16 10:34:52.756 2198 2398 W PackageManager: com.android.server.pm.PackageManagerException: Package /data/app/net.ilmiont.helloworld-pbDVHiVe6mEghhiOqRUNjg==/base.apk code is missing

Я не понимаю, почему он пытается открыть / удалить эти каталоги, когда приложение только-только устанавливается (и никогда не было успешно установлено) - я не знаю достаточно о внутренностях Android, но по этой трассировке похоже, что удаление - проблема.

Я просматривал свой источник несколько раз и просто не вижу, что мне не хватает. Манифест выглядит хорошо, макет выглядит хорошо, Java - это все две строки. Так чего мне не хватает? Это должно быть что-то явно очевидное.

Устройство

Это может быть актуально, так что вот все детали.

Nokia 6 (оригинальная версия) под управлением Android без корня 8.1.

Я открыл Android Studio, создал стандартное стандартное приложение и нажал «Выполнить», и он успешно скомпилирован и развернут, поэтому ясно, что что-то не так с моей цепочкой инструментов app / build, которая делает этот перерыв, и у меня нет идей, где искать.

Сценарий сборки (выдержки, он собирается, но не будет развертываться)

aapt package -v -f -m -J $PROJECT_SOURCE -M $ANDROID_MANIFEST -S $ANDROID_RESOURCES -I $ANDROID_SDK/platforms/android-$ANDROID_API/android.jar;

javac -d $JAVA_COMPILE_DESTINATION -source $JAVA_VERSION -target $JAVA_VERSION_TARGET -classpath "$PROJECT_SOURCE$JAVA_CLASSPATH_LIBS" -bootclasspath $ANDROID_SDK/platforms/android-$ANDROID_API/android.jar $PROJECT_SOURCE/$PROJECT_PACKAGE_SOURCE/*.java;

dx --dex --output=$DX_COMPILE_DESTINATION $JAVA_COMPILE_DESTINATION;

aapt package -f -m -F $APP_APK_UNALIGNED -M $ANDROID_MANIFEST -S $ANDROID_RESOURCES -I $ANDROID_SDK/platforms/android-$ANDROID_API/android.jar;

aapt add $APP_APK_UNALIGNED $DX_COMPILE_DESTINATION;

zipalign -f 4 $APP_APK_UNALIGNED $APP_APK;

apksigner sign --ks /home/jh_walker/.keystore $APP_APK;

Keystore

keytool -genkeypair -validity 365 -keystore $KEYSTORE -alias $KEYSTORE_ALIAS -sigalg SHA1withDSA -keyalg DSA -keysize 1024

Что я пробовал

  • Java 1,7 / 1,8
  • Компиляция на разных платформах Android (21/28)
  • Включая дополнительные ресурсы (изначально не имели значков)
  • Установка use-sdk в манифесте (без последствий)

Чего мне не хватает?

1 Ответ

0 голосов
/ 16 ноября 2018

Я туда попал.

aapt inspect app.apk

И сразу же я заметил в APK, был ./bin/classes.dex, и ни у одного из других файлов этот префикс ./ не был.

Копая глубже, и я увидел в своем скрипте сборки, что я компилировал DEX в ./bin/classes.dex, а затем добавил этот путь к моему APK. Но, похоже, что что-то в этом пути не понравилось aapt (хотя это полностью справедливо для того места, откуда я его запускал), и он не добавил файл должным образом - он кажется просто пустым ./bin/classes.dex. составил.

(Да, это довольно пафосное объяснение, и я буду расследовать это позже!)

В любом случае, кажется, вам нужно добавить из вашего текущего каталога: classes.dex. Может быть, это очевидно для кого-то более знакомого с инструментами.

Во всяком случае,

cp ./bin/classes.dex . && aapt add app.apk.unaligned classes.dex работает, но aapt add app.apk.unaligned ./bin/classes.dex не работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...