无法在Android Studio外部安装基于CLI构建的应用–删除失败/错误/base.apk代码

时间:2018-11-16 10:59:02

标签: android adb aapt

我对Android本机开发还很陌生,最近又尝试在不使用Android Studio的情况下直接从CLI进行构建(确实不喜欢IDE,并且发现Gradle过于复杂,尽管我还无法运行我的工具链... )

根据网络上的指南,尤其是this,我有一个非常基本的应用程序,可以成功构建为签名并对齐的APK(据我所知)。我正在针对使用Java 1.8的平台14进行构建,并且在更改此配置时未发现任何更改。

我已将应用程序源on GitHub用作此问题的参考。这是一种活动,只有一种布局。

当涉及adb install(或从设备手动安装)时,安装总是失败,并显示INSTALL_FAILED_INVALID_APK ... Package /data/app/net.ilmiont.helloworld-...==/base.apk code is missing...从外观上看是一个很长的ID )。

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都是两行。那我想念什么呢?这一定是显而易见的。

设备

这可能是相关的,所以这里是所有详细信息。

运行无根Android 8.1的诺基亚6(原始版本)。

我打开了Android Studio,创建了默认的样板应用程序,然后单击“运行”,它成功构建并部署,因此很明显我的应用程序/构建工具链出现了问题,这使此中断,而且我对要看的地方一无所知。

构建脚本(摘录,它确实会构建但不会部署)

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;

密钥库

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(无影响)

我想念什么?

3 个答案:

答案 0 :(得分:0)

我到了。

aapt inspect app.apk

我立即在APK中注意到./bin/classes.dex,其他文件都没有./前缀。

深入研究,发现在构建脚本中我正在将DEX编译为./bin/classes.dex,然后将该路径添加到我的APK中。但是看来aapt不喜欢该路径的某些东西(尽管对于我从哪里运行它是完全有效的),并且它没有正确添加文件---似乎只是空的{{ 1}}组成。

(是的,这是一种可悲的解释,我稍后会进行适当的调查!)

无论如何,似乎您必须从当前目录添加:./bin/classes.dex。对于熟悉工具的人来说,这也许是显而易见的。

反正

classes.dex有效,但cp ./bin/classes.dex . && aapt add app.apk.unaligned classes.dex无效。

答案 1 :(得分:0)

如果您想在设备上安装应用程序的调试(gradle installDebug)版本时发生这种情况,请检查versionCodeversionName是否与上次相同发布到Play商店。

答案 2 :(得分:0)

尝试在我的设备上安装 apk 时,我也收到了 base.apk code is missing 错误消息。就我而言,我最近升级了 Gradle 和 Android Gradle 工具(很天真,因为 Studio 推荐了它)......所以,降级到以前的 gradle 和工具版本为我修复了它。

可以通过编辑 2 个位置的版本号来降级:android/build.gradlegradle-wrapper.properties - 然后在 Android Studio 中进行 gradle 同步。