在更新到Android 3.0.0并将gradle更新到4.1之后,我陷入了困境。我的应用程序没有构建,清单包含很多错误。我尝试在Build
下清理项目,使Files
下的缓存/重启无效,但没有成功。
我收到的错误如下:
错误:(52)错误:找到未知元素。
错误:(52)找到未知元素。
错误:java.util.concurrent.ExecutionException:java.util.concurrent.ExecutionException:com.android.tools.aapt2.Aapt2Exception:AAPT2错误:检查日志以获取详细信息
错误:java.util.concurrent.ExecutionException:com.android.tools.aapt2.Aapt2Exception:AAPT2错误:检查日志以获取详细信息
错误:com.android.tools.aapt2.Aapt2Exception:AAPT2错误:检查日志以获取详细信息
错误:任务':app:processDebugResources'的执行失败 无法执行aapt
所有错误都在debug\AndroidManifest
中。当我删除或评论标记的活动时,它们会被重新添加到gradle构建中,
我也使用android="http://schemas.android.com/apk/res/android"
'
清单:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="sample.app"
android:installLocation="auto"
android:versionCode="48"
android:versionName="4.8" >
<uses-sdk
android:minSdkVersion="19"
android:targetSdkVersion="25" />
//Hardware Constraints for Application
<uses-feature android:name="android.hardware.location.gps" />
<!-- <uses-feature android:name="android.hardware.location.network" /> -->
//Required App Permissions
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.READ_CALL_LOG" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
<uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.CAPTURE_AUDIO_OUTPUT" />
<uses-permission-sdk-23 android:name="android.permission.MODIFY_PHONE_STATE" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<meta-data
android:name="android.support.VERSION"
android:value="25.3.1" />
<activity android:name="com.box.androidsdk.content.auth.OAuthActivity" />
<uses-feature
android:name="android.hardware.sensor.accelerometer"
android:required="true" /> <!-- Permissions required for GCM -->
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />
<permission
android:name="sample.app.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="sample.app.permission.C2D_MESSAGE" />
<!--
<uses-feature
android:name="android.hardware.camera2.full"
android:required="true" />
-->
<!--
<uses-feature
android:name="android.hardware.sensor.accelerometer"
android:required="true" />
-->
<application
android:name="sample.app.dailymotion.volleyapp.AppController"
android:allowBackup="true"
android:debuggable="true"
android:hardwareAccelerated="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:largeHeap="true"
android:supportsRtl="true"
android:theme="@style/AppTheme" >
<!--
<meta-data
android:name="com.google.android.gms.vision.DEPENDENCIES"
android:value="barcode"/>
-->
<activity android:name="sample.app.SplashScreen" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="sample.app.ClrInfo"
android:exported="false"
android:theme="@style/MyDialogTheme" />
</application>
</manifest>
答案 0 :(得分:6)
Android文档提到了迁移指南:https://developer.android.com/studio/build/gradle-plugin-3-0-0-migration.html
Android清单中的元素层次结构
在以前版本的AAPT中,元素嵌套在不正确的节点中 Android清单被忽略或导致警告。对于 例如,请考虑以下示例:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.myname.myapplication"> <application ... <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <action android:name="android.intent.action.CUSTOM" /> </activity> </application> </manifest>
请注意,如果您确实遵守他们提供的特定嵌套规则,则必须检查您的清单,否则您的应用程序将无法编译。
清单文件结构
下面的代码片段显示了清单的一般结构 文件及其可包含的每个元素。每个元素,以及 它的所有属性都在一个单独的文件中完整记录。
<manifest> <uses-permission /> <permission /> <permission-tree /> <permission-group /> <instrumentation /> <uses-sdk /> <uses-configuration /> <uses-feature /> <supports-screens /> <compatible-screens /> <supports-gl-texture /> <application> <activity> <intent-filter> <action /> <category /> <data /> </intent-filter> <meta-data /> </activity> <activity-alias> <intent-filter> . . . </intent-filter> <meta-data /> </activity-alias> <service> <intent-filter> . . . </intent-filter> <meta-data/> </service> <receiver> <intent-filter> . . . </intent-filter> <meta-data /> </receiver> <provider> <grant-uri-permission /> <meta-data /> <path-permission /> </provider> <uses-library /> </application> </manifest>
在您的情况下,您必须转移
<activity android:name="com.box.androidsdk.content.auth.OAuthActivity" />
在<application>
内,以便编译。
禁用AAPT2只是一种解决方法,但不是真正的答案。
答案 1 :(得分:1)
无需禁用AAPT2。 :)在AndroidManifest.xml的第56行中,您定义了一个活动:
<activity android:name="com.box.androidsdk.content.auth.OAuthActivity" />
&#39;活动&#39;标签只能嵌套在&#39;应用程序&#39;元件。有关详细信息,请查看Android Manifest structure documentation。