Android Studio 3.0 中的 AndroidManifest.xml 问题

Issue with AndroidManifest.xml in Android Studio 3.0

我最近从 Canary 频道安装了 Android Studio 3.0。但是,加载我的旧项目时,它会不断出现在 AndroidManifest.xml 文件中,该文件根据构建变体自动生成:

Error:(49) unknown element <uses-sdk> found

这也显示:

Error:/home/computername/AndroidStudioProjects/applicationname/app/build/intermediates/manifests/full/release/AndroidManifest.xml:49 unknown element <uses-sdk> found

不用说,这在 Android Studio 2.3 中不是问题。关于如何解决这个问题的任何想法?我在这里阅读了一些类似的问题,但 none 解决了我的问题。顺便说一句 - 我将构建变体设置为调试或发布并不重要,它说的是同一件事。此外,"R" class 不起作用,如果我将鼠标悬停在 manifest xmlns:android="http://schemas.android.com/apk/res/android 声明上,它会显示 "URI is not registered".

同样,项目结构完全没有改变,我只是升级到 Android Studio 3.0。

谢谢!

这是 /src/main 文件夹下的 AndroidManifest.xml 文件,它工作得很好。问题出在 /app/build/intermediates/manifests/full 文件夹中生成的 AndroidManifest.xml 文件 - 这些文件破坏了我的应用程序。

 <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.domain.appname">`

        <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
            <activity android:name=".view.MainActivity"
                android:noHistory="true">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />

                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <activity
                android:name=".view.TabbedActivity"
                android:label="@string/app_name"
                android:theme="@style/AppTheme.NoActionBar"
                android:screenOrientation="landscape"
                android:configChanges="keyboardHidden|orientation|screenSize"
                android:noHistory="true">

            </activity>
        </application>

        <!-- PROTECTION_NORMAL permissions, automatically granted -->
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
        <uses-permission android:name="android.permission.INTERNET" />

        <!-- DANGEROUS PERMISSIONS, must request -->
        <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    </manifest>

以下是调试或发布不起作用的自动生成清单的方式:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.domain.appname"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="21"
        android:targetSdkVersion="25" />

    <!-- PROTECTION_NORMAL permissions, automatically granted -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />

    <!-- DANGEROUS PERMISSIONS, must request -->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

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

    <application
        android:allowBackup="true"
        android:debuggable="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.domain.appname.view.MainActivity"
            android:noHistory="true" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.domain.appname.view.TabbedActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:label="@string/app_name"
            android:noHistory="true"
            android:screenOrientation="landscape"
            android:theme="@style/AppTheme.NoActionBar" >
        </activity>

        <uses-sdk
            android:minSdkVersion="21"
            android:targetSdkVersion="25" />
    </application>

</manifest>

稍后编辑

我已经回到 Android Studio 2.3,并将 gradle 插件设置回 2.3.2,下面是自动生成的 AndroidManifest.xml 现在的样子:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.domain.appname.test" >

    <uses-sdk
        android:minSdkVersion="21"
        android:targetSdkVersion="26" />

    <instrumentation
        android:name="android.support.test.runner.AndroidJUnitRunner"
        android:functionalTest="false"
        android:handleProfiling="false"
        android:label="Tests for com.domain.appname"
        android:targetPackage="com.domain.appname" />

    <application>
        <uses-library android:name="android.test.runner" />
    </application>

</manifest>

现在一切正常,但是,请注意gradle 3.0.0 下自动生成的清单文件与gradle 2.3.2

下自动生成的清单文件之间的区别

我想我得等到有人找到解决方案才能在 gradle 3.0.0 下运行,同时使用 gradle 插件 2.3.2 in Android Studio 3.0(我现在正在做并且可以运行)。

所以问题出在新的 gradle 3.0.0-alpha9

您可能有一个依赖库 (aar),它在清单的应用程序标记内有一个 <uses-sdk>。因此,当合并时,您的应用程序也会有不正确的用法。

我在 Android.

的旧本地 vlc 构建中发生了这种情况

我的 Manifest 文件中有一个类别元素位于常规 activity 中,这导致构建失败。更新到 as3-rc1 和构建工具 26+ 后将其删除我的问题已解决。希望这对某人有所帮助。

    <activity
        android:name=".AboutUsActivity"
        android:label="@string/title_activity_about_us"
        android:parentActivityName=".MainActivity"
        android:theme="@style/AppTheme.NoActionBar">
        <category android:name="android.intent.category.DEFAULT" />

        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.example.MainActivity" />
    </activity>

如果问题仍然存在,请检查 this official tutorial 迁移到 Gragle plugin v. 3.0.0.

遇到了同样的错误,在我的例子中,Manifest 文件中的 meta_data 中有拼写错误,而不是 meta-data,从而阻止了构建。