Android Studio 3.0中的AndroidManifest.xml问题

时间:2017-08-07 12:25:28

标签: android gradle manifest

我最近从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中的问题。关于如何解决这个问题的任何想法?我在这里读过一些类似的问题,但没有解决我的问题。顺便说一句 - 如果我将构建变量设置为调试或发布并不重要,它说同样的事情。此外,“R”类不起作用,如果我将鼠标悬停在manifest xmlns:android="http://schemas.android.com/apk/res/android声明上,则表示“URI未注册”。

同样,项目结构根本没有改变,我只升级到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>

以下是调试或发布自动生成的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下自动生成的Manifest文件与gradle 2.3.2下的文件之间的区别

我想我必须等到有人找到一个解决方案才能在gradle 3.0.0下工作,同时在Android Studio 3.0中使用gradle插件2.3.2(我现在正在做它,它作品)。

问题在于新的gradle 3.0.0-alpha9

3 个答案:

答案 0 :(得分:7)

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

这发生在我身上,因为Android有一个旧的本地vlc版本。

答案 1 :(得分:3)

我在常规活动中的Manifest文件中有一个类别元素导致构建失败。更新到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>

答案 2 :(得分:1)

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

得到了同样的错误,在我的情况下,meta_data文件中的meta-data而不是Manifest中出现了错误,阻止了构建。