【发布时间】:2019-11-11 16:37:41
【问题描述】:
我无法在 Android 6 (API 23) 上部署我的应用程序(调试/发布),但在 Android 8 (API 26) 和 Android 9 (API 28) 上一切正常。输出中存在 INSTALL_PARSE_FAILED_MANIFEST_MALFORMED 错误。
输出:
检测已安装的包...
正在将应用程序复制到设备...
90% ... 复制了 23527kb 中的 21184kb
100% ... 复制了 23527kb 中的 23527kb
ADB0000:部署失败 Mono.AndroidTools.InstallFailedException: 意外的安装输出:pkg: /data/local/tmp/com.companyname.appname-Signed.apk 失败 [INSTALL_PARSE_FAILED_MANIFEST_MALFORMED] 在 E:\A_work\275\s\External\androidtools\Mono.AndroidTools\Internal\AdbOutputParsing.cs:line 345 中的 Mono.AndroidTools.Internal.AdbOutputParsing.CheckInstallSuccess(String output, String packageName) 在 Mono.AndroidTools.AndroidDevice.c__DisplayClass95_0.b__0(Task
1 t) in E:\A\_work\275\s\External\androidtools\Mono.AndroidTools\AndroidDevice.cs:line 753 at System.Threading.Tasks.ContinuationTaskFromResultTask1.InnerInvoke() 在 System.Threading.Tasks.Task.Execute()ADB0010:意外安装输出:pkg: /data/local/tmp/com.companyname.appname-Signed.apk 失败 [INSTALL_PARSE_FAILED_MANIFEST_MALFORMED]
在 Mono.AndroidTools.Internal.AdbOutputParsing.CheckInstallSuccess(字符串 输出,字符串包名)在 E:\A_work\275\s\External\androidtools\Mono.AndroidTools\Internal\AdbOutputParsing.cs:line 345 在 Mono.AndroidTools.AndroidDevice.c__DisplayClass95_0.b__0(Task
1 t) in E:\A\_work\275\s\External\androidtools\Mono.AndroidTools\AndroidDevice.cs:line 753 at System.Threading.Tasks.ContinuationTaskFromResultTask1.InnerInvoke() 在 System.Threading.Tasks.Task.Execute() 完成构建项目 “AppNameInCamelCase.Droid.csproj”——失败。 块引用
构建失败。
2>Samsung SM-G800F 部署失败。
========== 构建:1 个成功,0 个失败,6 个最新,0 个跳过 ==========
==========部署:0成功,1失败,0跳过==========
这是我的 AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="preferExternal" package="com.companynameallinsmall.appnameallinsmall" android:versionName="X.X.x" android:versionCode="XXXYYY">
<!--Target SDK version should be 25+ in order to ask for permissions in popups.-->
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="28" />
<!--Permissions which are requested via popup.-->
<!--For logging and data writing.-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!--For picking photo.-->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!--For location-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!--Permissions granted during installation.-->
<uses-permission android:name="com.android.vending.BILLING" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE" />
<uses-permission android:name="android.permission.BROADCAST_STICKY" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.BATTERY_STATS" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-feature android:name="android.hardware.sensor.compass" android:required="false" />
<uses-feature android:name="android.hardware.sensor.accelerometer" android:required="true" />
<uses-feature android:name="android.hardware.location" android:required="true" />
<uses-feature android:name="android.hardware.location.gps" android:required="true" />
<uses-feature android:name="android.hardware.location.network" android:required="true" />
<application android:label="CamelCase Name" android:theme="@style/STAPPCustomTheme">
<uses-library android:name="org.apache.http.legacy" android:required="false" />
<meta-data android:name="com.google.android.geo.API_KEY" android:value="YXSIBIDGA......" />
</application>
</manifest>
编译的 AndroidManifest - Obj 文件夹
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="preferExternal" package="com.companynameallinsmall.appnameallinsmall" android:versionName="X.X.x" android:versionCode="XXXYYY">
<!--Target SDK version should be 25+ in order to ask for permissions in popups.-->
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="28" />
<!--Permissions which are requested via popup.-->
<!--For logging and sensor data writing.-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!--For picking photo.-->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!--For location-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!--Permissions granted during installation.-->
<uses-permission android:name="com.android.vending.BILLING" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE" />
<uses-permission android:name="android.permission.BROADCAST_STICKY" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.BATTERY_STATS" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-feature android:name="android.hardware.sensor.compass" android:required="false" />
<uses-feature android:name="android.hardware.sensor.accelerometer" android:required="true" />
<uses-feature android:name="android.hardware.location" android:required="true" />
<uses-feature android:name="android.hardware.location.gps" android:required="true" />
<uses-feature android:name="android.hardware.location.network" android:required="true" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />
<application android:label="CamelCase Name" android:theme="@style/STAPPCustomTheme" android:name="android.app.Application" android:allowBackup="true" android:icon="@mipmap/icon" android:debuggable="true">
<uses-library android:name="org.apache.http.legacy" android:required="false" />
<meta-data android:name="com.google.android.geo.API_KEY" android:value="YXSIBIDGA......" />
<activity android:configChanges="orientation|screenSize" android:icon="@mipmap/icon" android:label="CamelCase Name" android:launchMode="singleTop" android:screenOrientation="portrait" android:name="md***********.MainActivity" />
<activity android:configChanges="orientation|screenSize" android:icon="@mipmap/icon" android:label="CamelCase Name" android:noHistory="true" android:screenOrientation="portrait" android:theme="@style/Theme.SplashNotPowered" android:name="md***********.SplashScreen">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<provider android:authorities="com.companynameallinsmall.appnameallinsmall.fileProvider" android:exported="false" android:grantUriPermissions="true" android:name="Companyname.Utils.fileProvider">
<meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/companynameallinsmall_utils_fileprovider_file_paths" />
</provider>
<service android:name="md***********.MatchaBackgroundService" />
<receiver android:enabled="true" android:exported="false" android:label="Connectivity Plugin Broadcast Receiver" android:name="md***********.ConnectivityChangeBroadcastReceiver" />
<activity android:configChanges="orientation|screenSize" android:name="md***********.MediaPickerActivity" />
<receiver android:enabled="true" android:exported="false" android:label="Essentials Battery Broadcast Receiver" android:name="md***********.BatteryBroadcastReceiver" />
<provider android:authorities="com.companynameallinsmall.appnameallinsmall.fileProvider" android:exported="false" android:grantUriPermissions="true" android:name="xamarin.essentials.fileProvider">
<meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/xamarin_essentials_fileprovider_file_paths" />
</provider>
<receiver android:enabled="true" android:exported="false" android:name="md***********.PowerSaveModeBroadcastReceiver" />
<provider android:name="mono.MonoRuntimeProvider" android:exported="false" android:initOrder="1999999999" android:authorities="com.companynameallinsmall.appnameallinsmall.mono.MonoRuntimeProvider.__mono_init__" />
<!--suppress ExportedReceiver-->
<receiver android:name="mono.android.Seppuku">
<intent-filter>
<action android:name="mono.android.intent.action.SEPPUKU" />
<category android:name="mono.android.intent.category.SEPPUKU.com.companynameallinsmall.appnameallinsmall" />
</intent-filter>
</receiver>
<activity android:name="com.google.android.gms.common.api.GoogleApiActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:exported="false" />
<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
</application>
</manifest>
Lint 输出 AndroidManifest.xml:
扫描清单:
清单:错误:找不到 API 数据库;未执行 API 检查 [LintError]
AndroidManifest.xml:43:警告:使用 '$' 而不是 '.'对于内部 类(或在包名中仅使用小写字母);代替 “Companyname.Utils.fileProvider”与“Companyname$Utils$fileProvider” [内部类分隔符]
<provider android:authorities="com.companynameallinsmall.fileProvider"
android:exported="false" android:grantUriPermissions="true" android:name="Companyname.Utils.fileProvider">
AndroidManifest.xml:33:错误:避免硬编码调试模式;忽略它允许调试 并发布构建以自动分配一个 [HardcodedDebugMode]
<application android:label="CamelCase Name" android:theme="@style/STAPPCustomTheme" android:name="android.app.Application" android:allowBackup="true" android:icon="@mipmap/icon" android:debuggable="true">
AndroidManifest.xml:33:警告:在 SDK 上 版本 23 及更高版本,您的应用数据将自动备份并 在应用安装时恢复。考虑添加属性 android:fullBackupContent 指定一个 @xml 资源配置 要备份哪些文件。更多信息: https://developer.android.com/training/backup/autosyncapi.html [允许备份]
<application android:label="CamelCase Name" android:theme="@style/STAPPCustomTheme"
android:name="android.app.Application" android:allowBackup="true"
android:icon="@mipmap/icon" android:debuggable="true">
AndroidManifest.xml:33:警告:应用程序无法被 Google 索引 搜索;考虑添加至少一个带有 ACTION-VIEW 的 Activity 意图过滤器。有关更多详细信息,请参阅问题说明。 [GoogleAppIndexingWarning]
<application android:label="CamelCase Name" android:theme="@style/STAPPCustomTheme" android:name="android.app.Application" android:allowBackup="true" android:icon="@mipmap/icon" android:debuggable="true">
^ 2 个错误,3 个 警告
【问题讨论】:
标签: xamarin xamarin.forms visual-studio-2019