我对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
我尝试过的事情
use-sdk
(无影响)我想念什么?
答案 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
)版本时发生这种情况,请检查versionCode
和versionName
是否与上次相同发布到Play商店。
答案 2 :(得分:0)
尝试在我的设备上安装 apk 时,我也收到了 base.apk code is missing
错误消息。就我而言,我最近升级了 Gradle 和 Android Gradle 工具(很天真,因为 Studio 推荐了它)......所以,降级到以前的 gradle 和工具版本为我修复了它。
可以通过编辑 2 个位置的版本号来降级:android/build.gradle
和 gradle-wrapper.properties
- 然后在 Android Studio 中进行 gradle 同步。