升级至Android API 31后Cordova签名应用安装失败求助
Cordova升级Android API 31后签名APK安装失败问题
报错信息
adb: failed to install xyzzy.apk: Failure [INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION: Failed to parse /data/app/vmdl2088675470.tmp/base.apk: AndroidManifest.xml]
基本情况
我正尝试将Cordova应用升级至Android API 31,编译过程正常,但签名版本APK无法在设备上安装,未签名版本可正常安装。我的签名流程已长期沿用:编译代码 → 使用zipalign处理 → 用apksigner签名 → 通过adb安装到设备。
环境配置
- cordova 10.0.0
- cordova-android 11.0.0
- Java 11
- build-tools 31.0.0 和 32.0.0
- min sdk version 22
- gradle 7.6
已尝试的解决措施
- 切换API 31和32版本,问题均存在
- 删除设备上的现有应用
- 多次执行
./gradlew clean - 未更换签名密钥
- 重新下载所有20余个使用的插件
- 执行
jarsigner -verify验证签名,输出显示签名正常
附AndroidManifest.xml代码
<?xml version='1.0' encoding='utf-8'?> <manifest android:hardwareAccelerated="true" android:versionCode="23005" android:versionName="2.30.5" package="com.xyzzy.xyzzy" xmlns:android="http://schemas.android.com/apk/res/android"> <supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true" /> <uses-permission android:name="android.permission.INTERNET" /> <application android:hardwareAccelerated="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:usesCleartextTraffic="true"> <activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|smallestScreenSize|screenLayout|uiMode" android:exported="true" android:label="@string/activity_name" android:launchMode="singleInstance" android:name="MainActivity" android:screenOrientation="portrait" android:theme="@style/Theme.App.SplashScreen" android:windowSoftInputMode="adjustResize"> <intent-filter android:label="@string/launcher_name"> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <service android:enabled="true" android:exported="false" android:name="com.google.android.gms.measurement.AppMeasurementService" /> <service android:exported="false" android:name="org.apache.cordova.firebase.FirebasePluginMessagingService"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service> <receiver android:name="org.apache.cordova.firebase.OnNotificationOpenReceiver" /> <activity android:excludeFromRecents="true" android:exported="true" android:name="org.apache.cordova.firebase.OnNotificationReceiverActivity" android:noHistory="true" android:taskAffinity="" android:theme="@android:style/Theme.Translucent.NoTitleBar" /> <meta-data android:name="com.google.firebase.messaging.default_notification_color" android:resource="@color/accent" /> <meta-data android:name="com.google.firebase.messaging.default_notification_channel_id" android:value="@string/default_notification_channel_id" /> <meta-data android:name="firebase_analytics_collection_enabled" android:value="true" /> <meta-data android:name="firebase_performance_collection_enabled" android:value="true" /> <meta-data android:name="firebase_crashlytics_collection_enabled" android:value="true" /> <meta-data android:name="firebase_messaging_auto_init_enabled" android:value="true" /> <provider android:authorities="${applicationId}.emailcomposer.provider" android:exported="false" android:grantUriPermissions="true" android:name="de.appplant.cordova.emailcomposer.Provider"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/emailcomposer_provider_paths" /> </provider> <provider android:authorities="${applicationId}.localnotifications.provider" android:exported="false" android:grantUriPermissions="true" android:name="de.appplant.cordova.plugin.notification.util.AssetProvider"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/localnotification_provider_paths" /> </provider> <receiver android:exported="false" android:name="de.appplant.cordova.plugin.localnotification.TriggerReceiver" /> <receiver android:exported="false" android:name="de.appplant.cordova.plugin.localnotification.ClearReceiver" /> <activity android:exported="false" android:name="de.appplant.cordova.plugin.localnotification.ClickReceiver" android:theme="@style/Theme.AppCompat.NoActionBar" /> <receiver android:directBootAware="true" android:exported="false" android:name="de.appplant.cordova.plugin.localnotification.RestoreReceiver"> <intent-filter> <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" /> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver> </application> <uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.WRITE_CONTACTS" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> <queries> <intent> <action android:name="android.intent.action.SENDTO" /> <data android:scheme="mailto" /> </intent> </queries> <uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.POST_NOTIFICATIONS" /> <uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" /> </manifest>
恳请各位提供解决建议,谢谢!
内容的提问来源于stack exchange,提问作者Jon Schlossberg
相关产品推荐
相关产品推荐

