我最近从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
答案 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
中出现了错误,阻止了构建。