在这里,我们将给大家分享关于AndroidStudio中的Gradle执行错误(Ubuntu)的知识,让您更了解androidstudiogradle报错的本质,同时也会涉及到如何更有效地Androi
在这里,我们将给大家分享关于Android Studio中的Gradle执行错误(Ubuntu)的知识,让您更了解androidstudio gradle报错的本质,同时也会涉及到如何更有效地Android Studio 3.0 Canary 5中的Gradle Sync失败、Android Studio 中的Gradle构建系统示例、Android Studio-无法完成gradle执行-打开zip文件时出错、Android studio中Gradle出现这样的错误怎么解决?的内容。
本文目录一览:- Android Studio中的Gradle执行错误(Ubuntu)(androidstudio gradle报错)
- Android Studio 3.0 Canary 5中的Gradle Sync失败
- Android Studio 中的Gradle构建系统示例
- Android Studio-无法完成gradle执行-打开zip文件时出错
- Android studio中Gradle出现这样的错误怎么解决?
Android Studio中的Gradle执行错误(Ubuntu)(androidstudio gradle报错)
然后我创建了一个空项目,现在我在窗口底部附近显示错误.我想这是一个Gradle错误(对AS来说很新)
Error:Execution Failed for task ':app:mergeDebugResources'. > /root/AndroidStudioProjects/HockeyGame/app/build/exploded-aar/com.android.support/appcompat-v7/19.1.0/res/drawable-xxhdpi/abc_ic_voice_search.png: Error: Cannot run program "/opt/android-studio/sdk/build-tools/android-4.4.2/aapt": error=2,No such file or directory
我想也许这是一个文件权限问题(因为aapt确实存在),所以我将权限设置为775递归.我也开始使用sudo(sudo sh studio.sh).
有任何想法吗?我在Android中部分尝试AS,因为我在使用杂乱的Windows安装(以及它的乐趣)下运行时遇到了问题,所以这是令人失望的.
编辑:事实证明,64位Ubuntu不适合运行32位可执行文件.
解决方法
sudo apt-get install lib32stdc 6
sudo apt-get install lib32z1
参考:https://code.google.com/p/android/issues/detail?id=67155
Android Studio 3.0 Canary 5中的Gradle Sync失败
// Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { ext.kotlin_version = "1.1.1" ext.supportLibVersion = "25.3.0" repositories { jcenter() } dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version" classpath ''com.android.tools.build:gradle:3.0.0-alpha5'' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { String osName = System.getProperty("os.name").toLowerCase(); if (osName.contains("windows")) { buildDir = "C:/tmp/${rootProject.name}/${project.name}" } repositories { jcenter() } } task clean(type: Delete) { delete rootProject.buildDir }
这是build.gradle(模块:app):
apply plugin: ''com.android.application'' apply plugin: ''kotlin-android'' apply plugin: ''kotlin-android-extensions'' android { compileSdkVersion 25 buildToolsversion "25.0.2" defaultConfig { applicationId "com.example.android.datafrominternet" minSdkVersion 10 targetSdkVersion 25 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false } } } dependencies { compile filetree(dir: ''libs'',include: [''*.jar'']) compile ''com.android.support:appcompat-v7:25.1.0'' // Todo (32) Remove the ConstraintLayout dependency as we aren''t using it for these simple projects compile ''com.android.support.constraint:constraint-layout:1.0.0-beta4'' implementation ''com.android.support.constraint:constraint-layout:1.0.2'' implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7: $kotlin_version" }
这个错误信息:
Error:Unable to find method ''com.android.build.gradle.internal.variant.BaseVariantData.getoutputs()Ljava/util/List;''.
此意外错误的可能原因包括:> Gradle的依赖性缓存可能已损坏(这有时会在网络连接超时后发生.)
重新下载依赖项和同步项目(需要网络)> Gradle构建过程(守护程序)的状态可能已损坏.停止所有Gradle守护进程可以解决此问题.
停止Gradle构建过程(需要重新启动)>您的项目可能正在使用第三方插件,该插件与项目中的其他插件或项目请求的Gradle版本不兼容.如果Gradle进程损坏,您可以还尝试关闭IDE然后杀死所有Java进程.
解决方法
检查你的app / gradle.也许你有块 – >
buildscript { repositories { mavenCentral() jcenter() } dependencies { classpath ''com.android.tools.build:gradle:3.0.0-beta5'' }
然后在ur app / gradle和project gradle中检查gradle插件的版本.或者尝试将此块添加到app / gradle顶部.
Android Studio 中的Gradle构建系统示例
相信有很多像我一样的朋友在使用Android Studio时,对 Gradle 和 Gradle Android 插件的版本号和作用不是很清楚,本篇文章的将对这些进行解释,最后通过一个实际的项目工程来说明其中的配置块的含义,并通过源代码的角度去剖析脚本的结构。
一.第一部分:Q&A
1.Gradle是什么?
Gradle 是一个JVM平台上的自动化的构建工具,支持多项目构建,强有力依赖管理(本地或者远程依赖),构建脚本使用Groovy语言编写。
在Android Studio的 project 视图下的 gradle/ wrapper/gradle-wrapper.properties 路径下声明了项目使用的Gradle版本号,这里使用的是 3.3版本
distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip
2.Gradle Android Plugin 是什么?
在项目根目录中的build.gradle文件中有如下设置:
dependencies { classpath 'com.android.tools.build:gradle:2.3.3' }
这里声明的是项目对 Gradle Android Plugin 的依赖,其版本号为2.3.3。Gradle的Android插件提供了许多专为构建Android的操作项。
classpath表明的是类路径,该Android Plugin for Gradle 的对应文件位置在Android Studio根目录下的:gradle/m2repository/com/android/tools/build/gradle/对应版本号/gradle-3.0.0.jar
附上我电脑上的路径
可以看到,我们依赖的仅仅就是jar文件,build.gradle的脚本是使用Groovy语言编写的,Groovy编写的程序可以运行在JVM虚拟机中。而Android Plugin for Gradle是专门为构建Android项目提供库文件。
平时我们经常使用的比如 buildToolsversion、compileSdkVersion,buildTypes{ }、sourceSets { }、defaultConfig{ }等方法函数(是的,就是方法,这是Groovy语言中的闭包和函数调用时的特性,现在无需关心,后面第三部分有讲到这个),都是Gradle Android Plugin 这个库提供的方法。可不要以为Gradle仅仅是用来构建Android项目。
3.Android Studio中的compileSdkVersion、buildToolsversion、minSdkVersion、targetSdkVersion这些配置项是什么?
- compileSdkVersion 26 :编译项目使用的Android SDK的版本号为26,可以使用对应版本号提供的API进行编程
- minSdkVersion 14 :定义最小可以运行app的android系统版本号为14
- targetSdkVersion 26 :指定测试app的android系统版本号为26
- buildToolsversion "26.0.2" :指定Android Studio中 sdk 构建工具的版本号、命令行工具等构建工具,在使用Android plugin 3.0.0版本或以上时,该属性可以不用设置,插件会提供默认版本号。
在导入github上面的工程时,如果该工程所需要的Gradle版本、Android Plugin版本、buildToolsversion版本,SDK 版本与你本地不符合时,往往会卡死,所以在导入之前可以更改为你本地的版本,在进行导入即可。
4. Gradle Wrapper是什么?
The Gradle Wrapper allows you to execute Gradle builds on machines where Gradle is not installed. This is useful for example for some continuous integration servers. It is also useful for an open source project to keep the barrier low for building it. The wrapper is also very interesting for the enterprise. It is a zero administration approach for the client machines. It also enforces the usage of a particular Gradle version thus minimizing support issues.
Gradle Wrapper 可以在没有安装Gradle的机器上执行Gradle 构建,经常在持续性构建平台上所使用,例如jenkis。同时对于客户端机器来说零成本管理。
Gradle User Guide
第二部分. 关于Android Studio 工程项目你需要知道的一些东西
- Android Studio项目工程包含一个Application module,包含若干个Library module。 Library module可以是Android library,也可以是java library。
- Android Library : 包含Android项目中的源代码、资源文件、manifest文件,被编译为AAR文件。AAR文件可做为Android 应用模块的依赖。
- java library : 仅包含java源文件,编译的结果为JAR文件,可作为Android 应用模块的依赖或者java 项目的依赖。
- 每个module都可以被单独的构建,测试与调试,同时moudle可用来作为其他工程使用的library。
第三部分 .实际工程分析
通过github上的timber项目分析各模块下的build.gradle配件文件的含义。可以直接到github上搜索找到该项目。
1.Timber项目结构
根目录的setting.gradle文件,告诉Gradle需要构建的模块包括那些
include ':timber',include ':timber-lint',include ':timber-sample'
a.其中timber-sample是Application 模块,对应声明为
apply plugin: 'com.android.application'
b.timber是android library 模块,对应声明为
apply plugin: 'com.android.library'
c.timber-lint是java library模块,对应声明为
apply plugin: 'java-library'
2. build.gradle 文件中结构解释,大招来了 :)
下面我将通过简单易懂的方式去让使用者理解build脚本文件的结构。
常见的模块下build.gradle文件格式如下:
apply plugin: 'com.android.application' android { compileSdkVersion 25 buildToolsversion "26.0.1" defaultConfig { } buildTypes { } } dependencies { }
2.1: “apply plugin: 'com.android.application'” 语句解释:
Gradle是使用Groovy所写,这里是调用了 apply方法,Groovy中方法调用时可以省略括号,在你按住Control + 左键(mac为command+左键)时,可以进入到对应的类中,之前上文也提到过,Android Plugin 仅仅是Jar文件,让我们进入看看其中的对应方法是什么?
public interface PluginAware { void apply(Map<String,?> options); }
在Grovvy中 a.b() 这种格式可以写为a b
所以呢 compileSdkVersion,apply 等语句都是在调用对应的函数
2.2 xxx { } 格式到底是什么?
def debugClosure(int num,String str,Closure closure){ //dosomething } debugClosure(1,"groovy",{ println"hello groovy!" })
首先"{ }" 在Groovy语言中是“闭包”,简单讲闭包就是用“{ }”扩起来的一段代码段 ,在Groovy中有调用方法的时候有这样一条规定:“在调用方法的时候,如果方法仅有一个参数是Closure类型(也就是闭包),调用的时候,可以把闭包中的执行的代码写到括号中,为xxx({ }),当把括号省略之后就变成了 xxx{ } 格式”。
最前面代码中的"android{ }"语句函数定义在Project类中,函数定义为:
AppExtension android(Closure configuration);
结论:build.gradle脚本文件在运行的其实就是在执行一系列的函数
3. 根目录下build.gradle文件分析
该文件定义的是整个项目的构建配置,该配置同样生效于其他module
3.1 extra 属性
我们可以在项目顶级build.gradle中声明ext 块,在其中定义的属性可以在其他各个模块中去使用,通过这种方式可以一次性更改项目的各个模块的构建配置。
ext { compileSdkVersion = 26、 supportLibVersion = "26.1.0" }
使用:在其他模块通过rootProject.ext.compileSdkVersion去使用该属性。
3.2 buildScript 块
buildscript { repositories { jcenter() google() } dependencies { classpath deps.androidplugin classpath 'com.github.ben-manes:gradle-versions-plugin:0.17.0' } }
其中repositories中声明的是远程仓库的类别,平时我们在dependencies块中使用的类似compile 'io.reactivex:rxjava:1.0.0'语句,它在jcenter仓库中都是唯一存在,在构建的时候,本地如果没有的话,会到jcenter中去进行下载对应的版本。
4. 模块下的build.gradle文件分析
1、defaultConfig 块:定义的是APK各种构建版本的默认设置,这里面的一些属性可在AndroidManifest.xml文件中重载配置
applicationId 'com.example.myapp' minSdkVersion 15 targetSdkVersion 26 versionCode 1 versionName "1.0" }
productFlavors 块: 可以配置多种产品类型,比如可以一个是free,另外一种类型是免费
productFlavors { free { applicationId 'com.example.myapp.free' } paid { applicationId 'com.example.myapp.paid' } }
buildTypes 块:可以配置多种构建类型的相应的配置项,比如debug、relase版本。
buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro' } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。
Android Studio-无法完成gradle执行-打开zip文件时出错
我是android开发和android studio IDE的新手。
我从bitbucket中签出了一个项目,当我尝试对其进行编译时,出现以下错误:
无法完成Gradle执行
原因:打开zip文件时出错。
我gradle-wrapper.properties
的如下:
distributionBase = GRADLE_USER_HOME
distributionPath =包装器/ dists
zipStoreBase = GRADLE_USER_HOME
zipStorePath =包装器/ dists
distributionUrl = http
\://services.gradle.org/distributions/gradle-1.11-all.zip
我无法从中获得太多信息,但是完整的日志指出:
2014-05-23 14:06:28,950 [32077]警告-nal.AbstractExternalSystemTask-
原因:打开zip文件时出错com.intellij.openapi.externalSystem.model.ExternalSystemException:原因:在org.jetbrains中打开zip文件时出错。
org.jetbrains.plugins.gradle处的plugins.gradle.service.project.GradleExecutionHelper.execute(GradleExecutionHelper.java:206)位于org.jetbrains.plugins.gradle.service.project.GradleProjectResolver.resolveProjectInfo(GradleProjectResolver.java:116)。
service.project.GradleProjectResolver.resolveProjectInfo(GradleProjectResolver.java:64)位于com.intellij.openapi.externalSystem.service.remote.RemoteExternalSystemProjectResolverImpl
$
1.produce(RemoteExternalSystemProjectResolverImpl.java:41),位于com.intellij.openapi.externalSystem。
.RemoteExternalSystemProjectResolverImpl $
1。在com.intellij.openapi.externalSystem.service.remote.RemoteExternalSystemProjectProject.solveIm.RemoteExternalSystemProjectResolver
com.intellij.openapi.externalSystem.service.remote.wrapper.ExternalSystemProjectResolverWrapper.resolveProjectInfo(ExternalSystemProjectResolverWrapper.java:49)处的com.intellij.openapi.externalSystem.service.internal.ExternalSystemResolveProjectTask.doExecute(java:37)
48)com.intellij.openapi上的com.intellij.openapi.externalSystem.service.internal.AbstractExternalSystemTask.execute(AbstractExternalSystemTask.java:137)。com.intellij.openapi.externalSystem.util.ExternalSystemUtil
$
3.execute(ExternalSystemUtil.java:467)处的externalSystem.service.internal.AbstractExternalSystemTask.execute(AbstractExternalSystemTask.java:123)在com.intellij.openapi.externalSystem.util.ExternalSystemUtil
$ 4 $
2.run(ExternalSystemUtil.java:546)在com.intellij.openapi.progress.impl.ProgressManagerImpl
$
TaskRunnable.run(ProgressManagerImpl.java:464)在com.intellij.openapi.progress.impl.ProgressManagerImpl
$ 2.run(
com.intellij.openapi.progress.ProgressManager.executeProcessUnderProgress(ProgressManager.java:209)处的com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:212)处的ProgressManagerImpl.java:178)
.openapi.progress.impl.ProgressManagerImpl.runProcess(ProgressManagerImpl.java:171)在com.intellij.openapi.progress.impl.ProgressManagerImpl
$
8.run(ProgressManagerImpl.java:373)在com.intellij.openapi.application.impl.ApplicationImpl
$ 8.run(ApplicationImpl.java:419)在java.util .concurrent.Executors $
RunnableAdapter.call(Executors.java:511)位于java.util.concurrent.FutureTask.run(FutureTask.java:266)位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
java.util.concurrent.ThreadPoolExecutor $
Worker.run(ThreadPoolExecutor.java:617)在java.lang.Thread.run(Thread.java:745)在com.intellij.openapi.application.impl.ApplicationImpl
$ 1 $ 1.run( ApplicationImpl.java:149)419)在java.util.concurrent.Executors $
RunnableAdapter.call(Executors.java:511)在java.util.concurrent.FutureTask.run(FutureTask.java:266)在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor)
.java:1142),位于com.intellij.openapi.application.impl的java.lang.Thread.run(Thread.java:745),位于java.util.concurrent.ThreadPoolExecutor
$ Worker.run(ThreadPoolExecutor.java:617)。 ApplicationImpl $ 1 $
1.run(ApplicationImpl.java:149)419)在java.util.concurrent.Executors $
RunnableAdapter.call(Executors.java:511)在java.util.concurrent.FutureTask.run(FutureTask.java:266)在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor)
.java:1142),位于com.intellij.openapi.application.impl的java.lang.Thread.run(Thread.java:745),位于java.util.concurrent.ThreadPoolExecutor
$ Worker.run(ThreadPoolExecutor.java:617)。 ApplicationImpl $ 1 $
1.run(ApplicationImpl.java:149)openapi.application.impl.ApplicationImpl $ 1
$ 1.run(ApplicationImpl.java:149)openapi.application.impl.ApplicationImpl $
1 $ 1.run(ApplicationImpl.java:149)2014-05-23 14:06:28,950 [32077]警告-.project.GradleProjectImporter-2014-05-23
14:06:28,951 [32078]
信息-.project.GradleProjectImporter- 原因:打开zip文件时出错
我正在使用Android Studio 0.5.2。
有人可以为我指出正确的解决方法吗?
答案1
小编典典“打开zip文件时出错”往往意味着Gradle下载的文件已以某种方式损坏-
这可能是Gradle本身的下载(包装程序所做的),或者是Gradle下载的依赖项以运行您的构建。
Gradle不会尝试检测或解决问题,因此您需要手动修复它。解决方案通常是清除Gradle的下载缓存,并让其获取所需内容的新副本。为此,请同时删除.gradle
主目录和项目的根目录中的目录,然后再次尝试构建。
Android studio中Gradle出现这样的错误怎么解决?

今天的关于Android Studio中的Gradle执行错误(Ubuntu)和androidstudio gradle报错的分享已经结束,谢谢您的关注,如果想了解更多关于Android Studio 3.0 Canary 5中的Gradle Sync失败、Android Studio 中的Gradle构建系统示例、Android Studio-无法完成gradle执行-打开zip文件时出错、Android studio中Gradle出现这样的错误怎么解决?的相关知识,请在本站进行查询。
本文标签: