Jug*_*uge 5 android gradle android-manifest apk
我正在尝试对我的应用程序进行更新,该更新将通过自己的服务器交付。一切都很顺利,直到更新过程显示:解析错误 - 解析包时出现问题。
来自日志猫
PackageParser: Unknown element under <manifest>: meta-data at
Run Code Online (Sandbox Code Playgroud)
并用 aapt 查找
A: android:name(0x01010003)="android.permission.MANAGE_USB" (Raw: "android.permission.MANAGE_USB")
E: meta-data (line=21)
A: android:name(0x01010003)="android.support.VERSION" (Raw: "android.support.VERSION")
Run Code Online (Sandbox Code Playgroud)
同一问题的一篇文章建议应禁用即时运行功能,但仍然不行。
我有最新的 AS 和最新的更新。
我的 app/src/main/AndroidManifest.xml 中的元数据部分是
<meta-data
android:name="android.app.device_admin"
android:resource="@xml/device_admin_receiver" />
Run Code Online (Sandbox Code Playgroud)
另一篇文章也讨论了元数据以及它应该如何包含名称和资源,但在我的元数据中两者都有,所以这不可能是问题。
我还查看了manifest-merger-release-report.txt
meta-data#android.support.VERSION
ADDED from [com.android.support:appcompat-v7:25.3.1] /home/test/.android/build-cache/0babb927f9685604721e7d79f796b3104e7aa65c/output/AndroidManifest.xml:25:5-27:34
MERGED from [com.android.support:support-v4:25.3.1] /home/test/.android/build-cache/c982b10f45110a04eb75ca3351098dfbfe082732/output/AndroidManifest.xml:25:5-27:34
Run Code Online (Sandbox Code Playgroud)
从 app/build/intermediates/manifests/full/release/AndroidManifest.xml 中它有:
<uses-permission android:name="android.permission.MANAGE_USB" />
<meta-data
android:name="android.support.VERSION"
android:value="25.3.1" />
<application
Run Code Online (Sandbox Code Playgroud)
我有外部库
compile 'com.fasterxml.jackson.core:jackson-core:2.9.0'
compile 'com.fasterxml.jackson.core:jackson-databind:2.9.0'
compile 'com.fasterxml.jackson.core:jackson-annotations:2.9.0'
compile 'uk.co.chrisjenx:calligraphy:2.3.0'
Run Code Online (Sandbox Code Playgroud)
和 CarouselLayoutManager 作为模块,其中有
compile 'com.android.support:recyclerview-v7:25.3.1'
Run Code Online (Sandbox Code Playgroud)
我试图找到这个问题的根本原因,但所有的指南、提示和技巧都陷入了死胡同。
更新 1 这是完整的 AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.xxx.yyy.app_android">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.MANAGE_DEVICE_ADMINS" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.MANAGE_USB" />
<application
android:fitsSystemWindows="true"
android:allowBackup="false"
android:icon="@mipmap/icon"
android:supportsRtl="true"
android:label="@string/app_name"
android:name=".ui.App"
android:theme="@style/SplashTheme"
android:windowSoftInputMode="adjustNothing"
tools:ignore="GoogleAppIndexingWarning">
<activity android:name=".ui.SplashActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".ui.USBDeviceConnectionActivity" />
<activity android:name=".ui.MainActivity" />
<activity android:name=".ui.MainAppViewActivity" />
<activity android:name=".ui.InstructionsActivity" />
<service android:name=".machine.AdjustSeatHeightService" />
<service android:name=".machine.AdjustPressureService"/>
<service android:name=".machine.RFIDService"
android:exported="false" />
<service android:name=".machine.MVUControlService"
android:exported="false" />
<service android:name=".machine.PressureNModeControlService"
android:exported="false" />
<service android:name=".machine.MachModeChangeService"
android:exported="false" />
<service android:name=".machine.ReadMotorPos"
android:exported="false" />
<receiver
android:name=".ui.DeviceAdminReceiver"
android:description="@string/app_name"
android:label="@string/app_name"
android:permission="android.permission.BIND_DEVICE_ADMIN">
<meta-data
android:name="android.app.device_admin"
android:resource="@xml/device_admin_receiver" />
<intent-filter>
<action android:name="android.intent.action.DEVICE_ADMIN_ENABLED"/>
<action android:name="android.intent.action.PROFILE_PROVISIONING_COMPLETE"/>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
<action android:name="android.app.action.DEVICE_ADMIN_DISABLED" />
</intent-filter>
</receiver>
<!-- Start the Service if applicable on boot -->
<receiver android:name=".ui.BootReceiver">
<intent-filter >
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
</application>
</manifest>
Run Code Online (Sandbox Code Playgroud)
更新2
将 recyclerview-v7 版本从 25.3.1 替换为 25.3.0,现在我收到此错误。根据我的猜测,有问题的元数据来自 appcompat-v7,但我不知道它是如何被包含的,以及为什么在合并 AndroidManifest 文件时它会出现错误的位置。
Error:Execution failed for task ':app:processDebugManifest'.
> Manifest merger failed : Attribute meta-data#android.support.VERSION@value value=(25.3.1) from [com.android.support:appcompat-v7:25.3.1] AndroidManifest.xml:27:9-31
is also present at [com.android.support:recyclerview-v7:25.3.0] AndroidManifest.xml:24:9-31 value=(25.3.0).
Suggestion: add 'tools:replace="android:value"' to <meta-data> element at AndroidManifest.xml:25:5-27:34 to override.
Run Code Online (Sandbox Code Playgroud)
更新3
好的。看来问题是我已经纳入构建的外部模块。由于某种原因 androidManifest.xml 从中合并,带来了额外的元数据信息。
更新 4 删除了外部模块,但问题仍然出现。问题似乎是 com.android.support:recyclerview-v7:25.3.1 但我不知道为什么。
更新5 发现问题。看来 supportlibraries 25.3.0 及更高版本对其清单文件进行了更改:
<manifest package="android.support.v7.appcompat">
<uses-sdk android:minSdkVersion="9" tools:overrideLibrary="android.support.graphics.drawable.animated"/>
<meta-data android:name="android.support.VERSION" android:value="25.3.0"/>
<application/>
</manifest>
Run Code Online (Sandbox Code Playgroud)
元数据不在应用程序标签下,并且在创建 APK 时它被注入到最终 AndroidManifest.xml 中的错误位置。
现在我只需要弄清楚如何恢复到早期的支持库,因为我收到通知说我有来自未包含的其他库的不匹配版本。:(
根据这个android参考元数据标签包含在下面的标签中
<activity>
<activity-alias>
<application>
<provider>
<receiver>
<service>
Run Code Online (Sandbox Code Playgroud)
但你的标签不在其中任何一个之外。您发布的错误是
PackageParser:
<manifest>元数据下的未知元素
因此,标签直接放置在<manifest>导致问题的标签下方。
因此,请将其移至<application>标签中,它将起作用。
| 归档时间: |
|
| 查看次数: |
5538 次 |
| 最近记录: |