应用程序构建过程适用于 Android 6.0.1,但不适用于 2.3.6

问题描述

我希望我的 Android 应用也能在旧版 Android 上运行。我编写的这个 hello world 应用可在我的 Android 6.0.1 设备上运行,但未安装到我的 Android 2.3.6 设备(错误消息:未安装应用程序)。我在 adb 提取的日志中发现以下消息:

D/PackageParser( 1464): Scanning package: /data/app/vmdl953816991.tmp
I/PackageParser( 1464): org.kolodez.HelloWorld: compat added android.permission.WRITE_EXTERNAL_STORAGE android.permission.READ_PHONE_STATE
W/PackageParser( 1464): Exception reading AndroidManifest.xml in /data/app/vmdl953816991.tmp
W/PackageParser( 1464): java.lang.SecurityException: meta-inf/MYALIAS.SF has invalid digest for classes.dex in /data/app/vmdl953816991.tmp
W/PackageParser( 1464):     at java.util.jar.JarVerifier.invalidDigest(JarVerifier.java:130)
W/PackageParser( 1464):     at java.util.jar.JarVerifier.verifyCertificate(JarVerifier.java:357)
W/PackageParser( 1464):     at java.util.jar.JarVerifier.readCertificates(JarVerifier.java:265)
W/PackageParser( 1464):     at java.util.jar.JarFile.getInputStream(JarFile.java:389)
W/PackageParser( 1464):     at android.content.pm.PackageParser.loadCertificates(PackageParser.java:342)
W/PackageParser( 1464):     at android.content.pm.PackageParser.collectCertificates(PackageParser.java:513)
W/PackageParser( 1464):     at com.android.server.PackageManagerService.installPackageLI(PackageManagerService.java:5996)
W/PackageParser( 1464):     at com.android.server.PackageManagerService.access$2200(PackageManagerService.java:142)
W/PackageParser( 1464):     at com.android.server.PackageManagerService$5.run(PackageManagerService.java:4750)
W/PackageParser( 1464):     at android.os.Handler.handleCallback(Handler.java:587)
W/PackageParser( 1464):     at android.os.Handler.dispatchMessage(Handler.java:92)
W/PackageParser( 1464):     at android.os.Looper.loop(Looper.java:130)
W/PackageParser( 1464):     at android.os.HandlerThread.run(HandlerThread.java:60)
E/PackageParser( 1464): Package org.kolodez.HelloWorld has no certificates at entry AndroidManifest.xml; ignoring!

我做错了什么?

编辑:它也在我的 Android 5.0.2 上运行。因此,我使用 android-23/android.jar 并且 API 23 仅​​在 Android 6 及更高版本上受支持的事实并不是原因。

以下是构建说明:

aapt package -v -f -m -S ./src/res/ -J ./src/src/ -M ./src/AndroidManifest.xml -I /usr/lib/android-sdk/platforms/android-23/android.jar
javac -d ./obj/ -source 1.7 -target 1.7 -classpath /usr/lib/android-sdk/platforms/android-23/android.jar -sourcepath ./src/src/ ./src/src/org/kolodez/HelloWorld/*
/usr/lib/android-sdk/build-tools/27.0.1/dx --dex --output=./bin/classes.dex ./obj/
aapt package -f -M ./src/AndroidManifest.xml -S ./src/res/ -I /usr/lib/android-sdk/platforms/android-23/android.jar -F ./bin/HelloWorld.unsigned.apk ./bin
keytool -genkeypair -validity 10000 -dname "CN=Kolodez,OU=Kolodez,O=Kolodez,C=US" -keystore ./key/mykey.keystore -storepass mypass -keypass mypass -alias myalias -keyalg RSA
jarsigner -keystore ./key/mykey.keystore -storepass mypass -keypass mypass -signedjar ./bin/HelloWorld.signed.apk ./bin/HelloWorld.unsigned.apk myalias
zipalign -f 4 ./bin/HelloWorld.signed.apk ./bin/HelloWorld.apk

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)