我对 Android 原生开发很陌生,最近尝试在没有 Android Studio 的情况下直接从 CLI 构建(我真的不喜欢 IDE 并且发现 Gradle 过于复杂,虽然我还不能让我的工具链运行......)
使用来自网络的指导,特别是这个,我有一个非常基本的应用程序,它成功地构建到一个签名和对齐的 APK(据我所知)。我正在使用 Java 1.8 针对平台 14 进行构建,并且在更改此配置时没有观察到任何变化。
我已将应用程序源代码放在 GitHub 上以供此问题的参考。这是一种布局的活动。
当涉及到adb install(或从设备手动安装)时,安装总是失败INSTALL_FAILED_INVALID_APK...... Package /data/app/net.ilmiont.helloworld-...==/base.apk code is missing(...外观上是一些长 ID)。
逻辑猫
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在清单中设置(无影响)我错过了什么?
我到了那里。
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没有。
| 归档时间: |
|
| 查看次数: |
1159 次 |
| 最近记录: |