java 更新到 Android 3.0.0 后,我的 Android 清单充满错误

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/46976562/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-11-03 09:26:41  来源:igfitidea点击:

My Android manifest is full of errors after updating to Android 3.0.0

javaandroid

提问by Panache

I'm badly stuck after updating to Android 3.0.0 and gradle update to 4.1. My app is not building and the manifest contains a lot of errors. I tried cleaning the project under Build, invalidate caches/restart under Files, without success.

更新到 Android 3.0.0 并将 gradle 更新到 4.1 后,我被严重卡住了。我的应用程序没有构建,清单包含很多错误。我尝试清理下的项目Build,使缓存无效/重新启动下Files,但没有成功。

The errors I recieve are as following:

我收到的错误如下:

Error:(52) error: unknown element found.
Error:(52) unknown element found.
Error:java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException: com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details
Error:java.util.concurrent.ExecutionException: com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details
Error:com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details
Error:Execution failed for task ':app:processDebugResources'.
Failed to execute aapt

错误:(52) 错误:发现未知元素。
错误:(52) 发现未知元素。
错误:java.util.concurrent.ExecutionException:java.util.concurrent.ExecutionException:com.android.tools.aapt2.Aapt2Exception:AAPT2 错误:检查日志以获取详细信息
错误:java.util.concurrent.ExecutionException:com.android.tools .aapt2.Aapt2Exception:AAPT2 错误:检查日志以获取详细信息
错误:com.android.tools.aapt2.Aapt2Exception:AAPT2 错误:检查日志以获取详细信息
错误:任务“:app:processDebugResources”的执行失败。
执行 aapt 失败

All errors are in debug\AndroidManifest. When I delete or comment the marked activities, they're getting added back on gradle build,

所有错误都在debug\AndroidManifest. 当我删除或评论标记的活动时,它们会重新添加到 gradle 构建中,

I'm also getting an 'URI not registrered error too with android="http://schemas.android.com/apk/res/android"'

我也收到一个“URI 未注册错误android="http://schemas.android.com/apk/res/android"

Manifest:

显现:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="sample.app"
    android:installLocation="auto"
    android:versionCode="48"
    android:versionName="4.8" >

    <uses-sdk
        android:minSdkVersion="19"
        android:targetSdkVersion="25" />
    //Hardware Constraints for Application
    <uses-feature android:name="android.hardware.location.gps" />

    <!-- <uses-feature android:name="android.hardware.location.network" /> -->

    //Required App Permissions
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.READ_SMS" />
    <uses-permission android:name="android.permission.WRITE_CONTACTS" />
    <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" />
    <uses-permission android:name="android.permission.READ_CALL_LOG" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.USE_CREDENTIALS" />
    <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
    <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
    <uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT" />
    <uses-permission android:name="android.permission.CALL_PHONE" />
    <uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY" />
    <uses-permission android:name="android.permission.SEND_SMS" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.CAPTURE_AUDIO_OUTPUT" />

    <uses-permission-sdk-23 android:name="android.permission.MODIFY_PHONE_STATE" />

    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />

    <meta-data
        android:name="android.support.VERSION"
        android:value="25.3.1" />

    <activity android:name="com.box.androidsdk.content.auth.OAuthActivity" />

    <uses-feature
        android:name="android.hardware.sensor.accelerometer"
        android:required="true" /> <!-- Permissions required for GCM -->
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" />

    <permission
        android:name="sample.app.permission.C2D_MESSAGE"
        android:protectionLevel="signature" />

    <uses-permission android:name="sample.app.permission.C2D_MESSAGE" />
    <!--
  <uses-feature
          android:name="android.hardware.camera2.full"
          android:required="true" />
    -->
    <!--
   <uses-feature
           android:name="android.hardware.sensor.accelerometer"
           android:required="true" />
    -->
    <application
        android:name="sample.app.dailymotion.volleyapp.AppController"
        android:allowBackup="true"
        android:debuggable="true"
        android:hardwareAccelerated="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:largeHeap="true"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" >

        <!--
             <meta-data
             android:name="com.google.android.gms.vision.DEPENDENCIES"
             android:value="barcode"/>
        -->
        <activity android:name="sample.app.SplashScreen" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="sample.app.ClrInfo"
            android:exported="false"
            android:theme="@style/MyDialogTheme" />

</application>
</manifest>

回答by Enzokie

The Android docs mentioned about the migration guide here : https://developer.android.com/studio/build/gradle-plugin-3-0-0-migration.html

此处提到的有关迁移指南的 Android 文档:https: //developer.android.com/studio/build/gradle-plugin-3-0-0-migration.html

Element hierarchies in the Android manifest

In previous versions of AAPT, elements nested in incorrect nodes in the Android manifest are either ignored or result in a warning. For example, consider the following sample:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.myname.myapplication">
   <application
       ...
       <activity android:name=".MainActivity">
           <intent-filter>
               <action android:name="android.intent.action.MAIN" />
               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
           <action android:name="android.intent.action.CUSTOM" />
       </activity>
   </application>
</manifest>

Android 清单中的元素层次结构

在以前版本的 AAPT 中,嵌套在 Android 清单中不正确节点中的元素要么被忽略,要么导致警告。例如,请考虑以下示例:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.myname.myapplication">
   <application
       ...
       <activity android:name=".MainActivity">
           <intent-filter>
               <action android:name="android.intent.action.MAIN" />
               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
           <action android:name="android.intent.action.CUSTOM" />
       </activity>
   </application>
</manifest>

Note that you must check your Manifest if you really comply to the specific nesting rule they provided otherwise your app wont compile.

请注意,如果您确实遵守他们提供的特定嵌套规则,则必须检查您的清单,否则您的应用程序将无法编译。

Manifest file structure

The code snippet below shows the general structure of the manifest file and every element that it can contain. Each element, along with all of its attributes, is fully documented in a separate file.

<manifest>

    <uses-permission />
    <permission />
    <permission-tree />
    <permission-group />
    <instrumentation />
    <uses-sdk />
    <uses-configuration />  
    <uses-feature />  
    <supports-screens />  
    <compatible-screens />  
    <supports-gl-texture />  

    <application>

        <activity>
            <intent-filter>
                <action />
                <category />
                <data />
            </intent-filter>
            <meta-data />
        </activity>

        <activity-alias>
            <intent-filter> . . . </intent-filter>
            <meta-data />
        </activity-alias>

        <service>
            <intent-filter> . . . </intent-filter>
            <meta-data/>
        </service>

        <receiver>
            <intent-filter> . . . </intent-filter>
            <meta-data />
        </receiver>

        <provider>
            <grant-uri-permission />
            <meta-data />
            <path-permission />
        </provider>

        <uses-library />

    </application>

</manifest>

清单文件结构

下面的代码片段显示了清单文件的一般结构以及它可以包含的每个元素。每个元素及其所有属性都完整记录在单独的文件中。

<manifest>

    <uses-permission />
    <permission />
    <permission-tree />
    <permission-group />
    <instrumentation />
    <uses-sdk />
    <uses-configuration />  
    <uses-feature />  
    <supports-screens />  
    <compatible-screens />  
    <supports-gl-texture />  

    <application>

        <activity>
            <intent-filter>
                <action />
                <category />
                <data />
            </intent-filter>
            <meta-data />
        </activity>

        <activity-alias>
            <intent-filter> . . . </intent-filter>
            <meta-data />
        </activity-alias>

        <service>
            <intent-filter> . . . </intent-filter>
            <meta-data/>
        </service>

        <receiver>
            <intent-filter> . . . </intent-filter>
            <meta-data />
        </receiver>

        <provider>
            <grant-uri-permission />
            <meta-data />
            <path-permission />
        </provider>

        <uses-library />

    </application>

</manifest>

In your case you must transfer your

在你的情况下,你必须转移你的

<activity android:name="com.box.androidsdk.content.auth.OAuthActivity" />

<activity android:name="com.box.androidsdk.content.auth.OAuthActivity" />

inside in <application>so that it will compile.

在里面,<application>以便它会编译。

Disabling AAPT2 is just a workaround but not a real answer.

禁用 AAPT2 只是一种解决方法,而不是真正的答案

回答by Izabela Orlowska

No need to disable AAPT2. :) In line 56 of your AndroidManifest.xml you define an activity:

无需禁用 AAPT2。:) 在 AndroidManifest.xml 的第 56 行中,您定义了一个活动:

<activity android:name="com.box.androidsdk.content.auth.OAuthActivity" />

The 'activity' tag can only be nested under the 'application' element. For more info please look at the Android Manifest structure documentation.

“activity”标签只能嵌套在“application”元素下。有关更多信息,请查看Android 清单结构文档