关于android–Gradle执行失败,任务’Project:processDebugManifest’和androidgradleprojectsyncfailed的问题就给大家分享到这里,感谢你
关于android – Gradle执行失败,任务’Project:processDebugManifest’和android gradle project sync failed的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Android Gradle Plug 4.1.0 升级后gradle获取manifest位置失败问题解决、Android gradle执行失败、Android Studio Gradle - 任务':app:processDebugManifest' 的配置发现问题、Android Studio 一直显示 Building “project name” Gradle project info 问题详解等相关知识的信息别忘了在本站进行查找喔。
本文目录一览:- android – Gradle执行失败,任务’Project:processDebugManifest’(android gradle project sync failed)
- Android Gradle Plug 4.1.0 升级后gradle获取manifest位置失败问题解决
- Android gradle执行失败
- Android Studio Gradle - 任务':app:processDebugManifest' 的配置发现问题
- Android Studio 一直显示 Building “project name” Gradle project info 问题详解
android – Gradle执行失败,任务’Project:processDebugManifest’(android gradle project sync failed)
我开始在Android上使用谷歌播放服务API,并在阅读了几个教程并做了几个方法后,我总是有同样的错误.
Gradle: Execution Failed for task ':Teste:processDebugManifest'.
> java.lang.RuntimeException (no error message)
要导入google play库,我将goggle-play-service_lib的粘贴复制到我的项目中,包括jar文件到我的项目结构.(我正在使用Android Studio)
最后它看起来像这样:
App AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.teste"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="7"
android:targetSdkVersion="16" />
<permission
android:name="com.metyou1.permission.MAPS_RECEIVE"
android:protectionLevel="signature"/>
<uses-permission android:name="com.metyou1.permission.MAPS_RECEIVE"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-feature
android:glEsversion="0x00020000"
android:required="true"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.teste.FullscreenActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:label="@string/app_name"
android:theme="@style/FullscreenTheme" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<Meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="MYKEY"/>
</application>
</manifest>
App build.gradle:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.4'
}
}
apply plugin: 'android'
dependencies {
compile project(':google-play-services_lib')
compile files('libs/android-support-v4.jar')
}
android {
compileSdkVersion 17
buildToolsversion "17.0.0"
defaultConfig {
minSdkVersion 7
targetSdkVersion 16
}
}
google-play-services_lib build.gradle
buildscript {
repositories {
maven { url 'http://repo1.maven.org/maven2' }
}
dependencies {
classpath 'com.android.tools.build:gradle:0.4'
}
}
apply plugin: 'android-library'
dependencies {
compile files('libs/google-play-services.jar')
}
android {
compileSdkVersion 17
buildToolsversion "17.0.0"
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
res.srcDirs = ['res']
}
}
}
有人可以帮帮我吗?
谢谢
Android Gradle Plug 4.1.0 升级后gradle获取manifest位置失败问题解决
问题背景
项目编译过程中,使用了类似Android Gradle Plugin的gradle插件进行编译,在最终打包apk时,会动态修改manifest文件。
近期发现线上用户有反应升级到以下开发环境后,打包apk后manifest文件中没有应有的任何配置。
Android Gradle Plugin:4.1.0 Gradle:6.5 Android Studio:4.1
确认调查方向
首先要确认清楚到底是上述3个哪个的升级导致的问题。
在本地进行环境升级过程验证了以下结论:
Android Gradle Plugin:4.1.0 强制要求 Android Studio:4.1 + Gradle:6.5。然而 以下环境下打包过程是正常的:
Android Gradle Plugin:4.0.2 Gradle:6.5 Android Studio:4.1
Android Gradle Plugin:4.0.2 是 4.1 的前一个版本,至此可以确认是 Android Gradle Plugin:4.1.0 的升级导致的不兼容问题。
明确了调查的方向,接下来就可以有的放矢了。
调查分析
我们的gradle插件,是通过以下代码获取到manifest文件后做处理的:
new File(output.processManifestProvider.get().manifestOutputDirectory.get().getAsFile(), "AndroidManifest.xml")
其实并非如此简单,只是这一句是最关键的。在gradle插件中增加了一些关键打印语句后,编译过程中得到了以下错误提示:
Could not get unknown property ''manifestOutputDirectory'' for task '':app:processDebugManifest'' of type com.android.build.gradle.tasks.ProcessMultiApkApplicationManifest
百度了一下,没有任何相关记录,毕竟距离 Android Gradle Plugin:4.1.0 正式发布才过去2个月,只好自给自足。
很明显是读取manifest文件位置的属性失效了,那最直接的方法就是看源码。找到 Android Gradle Plugin:4.1.0 的jar包看看就行。
又是百度一下,很可惜,没有下载地址。
上JCenter找,结果JCenter仓库只更新到2.x版本。
也对,好像是从 Android Studio 3.0 开始,google就将 Android Gradle Plugin 转移至 google() 仓库了,那只能去 google() 仓库找了,一时半会也不知道具体地址,以前的编译过程中也没留意看studio的编译日志输出,当然如果是一个全新工程环境,编译一下,肯定能找到仓库地址的,不过我懒得搞。
先到AS的缓存路径下碰碰运气吧,不过碰运气也得先有个方向,别忘了Android Gradle Plugin的classpath配置:
classpath ''com.android.tools.build:gradle:4.1.0''
果不其然,在以下路径找到了:
/Users/jackie/.gradle/caches/modules-2/files-2.1/com.android.tools.build/gradle
加载过的各种版本都有,直接拿到 4.1.0 的jar包看源码,在 ProcessMultiApkApplicationManifest.class 中找到了以下代码:
File mergedManifestOutputFile = new File(((Directory)getMultiApkManifestOutputDirectory().get()).getAsFile(), FileUtils.join(new String[] { dirName, "AndroidManifest.xml" }));
同时还有一个抽象方法:
public abstract DirectoryProperty getMultiApkManifestOutputDirectory();
看来属性已经变成了 multiApkManifestOutputDirectory。
如果不确定,我们再看看 4.0.2 的源码,在 ProcessApplicationManifest.class 中找到了以下代码:
很明显,在 4.0.2 版本时,获取manifest文件路径的属性确实是 manifestOutputDirectory ,而task本质上是一个 ProcessApplicationManifest 实例,但从 4.1.0 版本开始, task变为 ProcessMultiApkApplicationManifest 的实例,属性变为 multiApkMnifestOutputDirectory 了。
好了,剩下的就是做一下版本兼容了,大功告成。