titanium的 android 下 running dexer: 之后报错的解决方案
访问量: 2453
血泪原创。
这几天在集成高德地图时, 发现一旦使用了高德地图,ti build 时就会卡死在这里。
大约20分钟后,报错: java heap out of memory
两个思路:
1. 把完整的命令copy下来,看是否是需要dex的文件重复了。例如:
我在第一次使用module来编译的时候,修改了package的名字,没有把前一次的 module文件 都清理掉,导致libs下面有多个 相同内容的文件,命名确实 libcomgaodemap.jar, libcomtestmap.jar 出错。
2. 第二次,是昨天遇到,卡了大半天,dexer需要的JVM的 最大内存对不上。--Xmx512M是不够的。
经过查看 cli 源代码,Library/Application Support/Titanium/mobilesdk/osx/5.1.1.GA/android/cli/commands/_build.js
// get the javac params this.javacMaxMemory = cli.tiapp.properties['android.javac.maxmemory'] && cli.tiapp.properties['android.javac.maxmemory'].value || config.get('android.javac.maxMemory', '1024M'); this.javacSource = cli.tiapp.properties['android.javac.source'] && cli.tiapp.properties['android.javac.source'].value || config.get('android.javac.source', '1.6'); this.javacTarget = cli.tiapp.properties['android.javac.target'] && cli.tiapp.properties['android.javac.target'].value || config.get('android.javac.target', '1.6'); this.dxMaxMemory = cli.tiapp.properties['android.dx.maxmemory'] && cli.tiapp.properties['android.dx.maxmemory'].value || config.get('android.dx.maxMemory', '1024M');
可以看到,这里的配置,使用了 cli.tiapp.properties, 所以解决办法很简单:
修改 tiapp.xml, 在跟节点下加入::
<!-- 设置 jdk的编译参数, 在高德地图下 build 会 java heap out of memory -->
<property name="android.javac.maxmemory" type="string">2048M</property>
<property name="android.dx.maxmemory" type="string">2048M</property>
就可以了。