android gradle打包常见问题及解决方案

背景:

问题:

Q1:
UNEXPECTED TOP-LEVEL ERROR:
java.lang.OutOfMemoryError: Java heap space
	at com.android.dx.cf.direct.MethodListParser.set(MethodListParser.java:80)
	at com.android.dx.cf.direct.MemberListParser.parse(MemberListParser.java:217)
	at com.android.dx.cf.direct.MemberListParser.parseIfNecessary(MemberListParser.java:108)
	at com.android.dx.cf.direct.MethodListParser.getList(MethodListParser.java:54)
	at com.android.dx.cf.direct.DirectClassFile.parse0(DirectClassFile.java:542)
	at com.android.dx.cf.direct.DirectClassFile.parse(DirectClassFile.java:406)
	at com.android.dx.cf.direct.DirectClassFile.parseToInterfacesIfNecessary(DirectClassFile.java:388)
	at com.android.dx.cf.direct.DirectClassFile.getMagic(DirectClassFile.java:251)
	at com.android.dx.command.dexer.Main.parseClass(Main.java:764)
	at com.android.dx.command.dexer.Main.access$1500(Main.java:85)
	at com.android.dx.command.dexer.Main$ClassParserTask.call(Main.java:1684)
	at com.android.dx.command.dexer.Main.processClass(Main.java:749)
	at com.android.dx.command.dexer.Main.processFileBytes(Main.java:718)
	at com.android.dx.command.dexer.Main.access$1200(Main.java:85)
	at com.android.dx.command.dexer.Main$FileBytesConsumer.processFileBytes(Main.java:1645)
	at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284)
	at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)
	at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)
	at com.android.dx.command.dexer.Main.processOne(Main.java:672)
	at com.android.dx.command.dexer.Main.processAllFiles(Main.java:569)
	at com.android.dx.command.dexer.Main.runMultiDex(Main.java:366)
	at com.android.dx.command.dexer.Main.run(Main.java:275)
	at com.android.dx.command.dexer.Main.main(Main.java:245)
	at com.android.dx.command.Main.main(Main.java:106)

:transformClassesWithDexForDebug FAILED
:transformClassesWithDexForDebug (Thread[main,5,main]) completed. Took 5 mins 2.571 secs.

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ‘:transformClassesWithDexForDebug‘.
> com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process ‘command ‘/g3an/ci/jdk1.7.0_79/bin/java‘‘ finished with non-zero exit value 3

* Try:
Run with --stacktrace option to get the stack trace. Run with --debug option to get more log output.
 
原因:gradle在编译过程中栈内存溢出
解决方案:在build.gradle配置文件中增加
dexOptions {
        javaMaxHeapSize "2g"
    } 

//2g表示内存大小,32位的jdk最大好像不能超过3g,超过最大允许内存大小时会报下面这个错误

Successfully started process ‘command ‘/g3an/ci/jdk1.7.0_79/bin/java‘‘
Invalid maximum heap size: -Xmx4g
The specified size exceeds the maximum representable size.
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

Q2:

UNEXPECTED TOP-LEVEL ERROR:
java.lang.OutOfMemoryError: GC overhead limit exceeded

:transformClassesWithDexForDebug FAILED
:transformClassesWithDexForDebug (Thread[main,5,main]) completed. Took 1 mins 58.823 secs.

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ‘:transformClassesWithDexForDebug‘.
> com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process ‘command ‘/g3an/ci/jdk1.7.0_79/bin/java‘‘ finished with non-zero exit value 3

* Try:
Run with --stacktrace option to get the stack trace. Run with --debug option to get more log output.
原因:JVM虚拟机的内存空间太小
解决方案:在用户目录下的gradle.properties文件中指定gradle编译时使用的jvm空间大小

文件路径:/home/[user]/.gradle/wrapper/gradle.properties

在文件中增加:org.gradle.jvmargs=-Xmx2048m

 
时间: 2024-10-21 22:51:41

android gradle打包常见问题及解决方案的相关文章

Android Studio使用过程中常见问题及解决方案

熟悉Android的童鞋应该对Android Studio都不陌生.Android编程有两个常用的开发环境,分别是Android Studio和Eclipse,之前使用比较多的是Eclipse,而现在呢,由于Android Studio的优越性,越来越多的人转而使用它了. 随着Android Studio使用人数的增加,使用过程中的问题也日益凸显,本文小编就整理了一些Windows系统下使用Android Studio的常见问题及解决方案,大家可以围观围观,遇到类似问题,不妨可以试试小编下面分享

Android Ant 和 Gradle 打包流程和效率对照

一.Ant 打包:(下载ant.配置环境变量就不说了) 1.进入命令行模式,并切换到项目文件夹.运行例如以下命令为ADT创建的项目加入ant build支持: android update project -p . -t  "android-17" 2.build脚本默认target是help.所以会显示如上信息,改动target为debug或release就能够像无ant时一样编译.生成以及调试了. 3.使用release时  在local.properties加入签名信息 #key

Android Studio中使用Gradle打包

首先要注意一点,Android Studio中把proguard.txt已经命名为proguard-rules.pro,由此可见,采用Gradle打包,混淆规则文件的名称是不重要的,可以自己随便命名.混淆规则跟原来一样,没有变化.不懂可以搜一下别人怎么写的. 加入签名文件,在Build->Generate Signed APK- 就会看到下面的弹出框 如果没有签名文件就创建新的签名文件,如果已经有签名文件,那么选择签名文件的位置,并填写好密码就可以点Next了.创建签名文件的方式跟老版本(Ecl

[原]Android打包之Gradle打包

最近尝试了一下Android的Gradle打包,发现确实比Ant打包会方便很多,特此记录下来. 注:android的gradle现在插件的版本已经是0.14.3了,对于一些老的方法和api,有一些已经被移除,无法使用(http://tools.android.com/tech-docs/new-build-system/migrating-to-1-0-0),以下这些属性改名,原先的不能用: runProguard -> minifyEnabled (是否混淆) zipAlign -> zip

Android Gradle 指定 Module 打包

Android Gradle 指定 Module 打包 项目中有许多的可以直接独立运行的 Module ,如何在 Gradle 中将签名文件配置好了,那么就不需要普通的手动点击 Generate Signed APK,使用 Terminal更加方便. 指定Module打包命令 输入: ./gradlew :<ModuleName>:assembleRelease 示例: ./gradlew :sampleApp:assembleRelease [error]command not found

使用构建工具gradle打包时,遇到的中文问题和解决方案

1.使用gradle  clean  war 命令将项目打成war包,这一过程gradle没有提示报错. 2.将得到的myapp.war拷贝到tomcat下webapps(部署war包) 3.启动tomcat的时候,发现加载myapp.war失败,错误信息如下: java.lang.IllegalArgumentException: MALFORMED at java.util.zip.ZipCoder.toString(Unknown Source) at java.util.zip.ZipI

Android Ant 和 Gradle 打包流程和效率对比

一.Ant 打包:(下载ant.配置环境变量就不说了) 1.进入命令行模式,并切换到项目目录,执行如下命令为ADT创建的项目添加ant build支持: android update project -p . -t  "android-17" 2.build脚本默认target是help,所以会显示如上信息,修改target为debug或release就可以像无ant时一样编译.生成以及调试了. 3.使用release时  在local.properties添加签名信息 #keysto

Gradle实战:Android多渠道打包方案汇总

查看原文:http://blog.csdn.net/u010818425/article/details/52319382 Gradle实战系列文章: <Gradle基本知识点与常用配置> <Gradle实战:不同编译类型的包同设备共存> <Gradle实战:发布aar包到maven仓库> <Gradle实战:执行sql操作hive数据库> 本文将延续之前几篇博客的风格,先从基本概念入手,这有助于我们对后文的理解: 在后续的代码中如果忘了某个概念的具体意义,

如何在Android Gradle中添加原生so文件依赖

@author ASCE1885的 Github 简书 微博 CSDN 原文链接 背景 几个月前,基于Google的LevelDB,我为Android平台写了一个名为SnappyDB的键值数据库(NoSQL). 由于它使用到了原生C++代码,因此最终生成的文件除了Jars包还有so文件. 通过Maven仓库发布我们的函数库没有什么问题(只要你通过繁琐的发布流程),maven-android-plugin可以帮助我们包含共享库.Maven依赖规则使得我们可以指定想要获取的ABI(不同的CPU架构)