Я довольно новичок в нативной разработке для 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
в манифесте (без последствий)
Чего мне не хватает?