【发布时间】: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 文件可以正常工作)。
-
尝试删除中间体或所有构建文件夹并重建您的应用程序