【问题标题】:Issue with AndroidManifest.xml in Android Studio 3.0 [duplicate]Android Studio 3.0 中的 AndroidManifest.xml 问题 [重复]
【发布时间】:2017-08-07 12:25:28
【问题描述】:

我最近从 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>

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

<?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 下的 Manifest 文件之间的区别

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

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

【问题讨论】:

  • 请给我们看文件
  • 你去...
  • 现在如果你能告诉我们哪一行是 49 那就完美了
  • 这是第二个“截图”末尾的“uses-sdk”语句。但这几乎无关紧要,因为文件的开头,带有“xmlns:android =“schemas.android.com/apk/res/android””的部分带有红色下划线,并且在这个特定的自动生成的清单文件中几乎所有其他元素,因为它可以' t 加载 URI,说“URI 未注册”(请记住,“真正的”AndroidManifest 文件可以正常工作)。
  • 尝试删除中间体或所有构建文件夹并重建您的应用程序

标签: android gradle manifest


【解决方案1】:

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

这发生在我的旧本地 Android 版本的 vlc 上。

【讨论】:

  • 我的项目中确实有一个 aar 库。有趣的。我现在在家,无法检查,但很有可能您是对的。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-14
      • 2018-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-10
      相关资源
      最近更新 更多