--------Error executing aapt: Return code -1073741819

http://blog.youkuaiyun.com/w7849516230/article/details/9751675

 总会有让人喷血的事情勾起写博客的欲望,希望能坚持。
    折腾了两天的是个小问题,就是标题上的Error executing aapt: Return code -1073741819。解决的方法也很简单参考1中所述,只是去掉项目styles.xml中的@+id项就好了。我在下面记录解决问题的悲惨过程。
    1.出现问题
    环境是win7系统下eclipse3.7(最新的android打包下载的SDK也类似)。项目比较繁杂,简单介绍下情况:由多个工程构成整个项目,其中主工程依赖于其他工程,而其他工程作为库(勾选了isLibrary)相互也有依赖。独立编译库工程或者加上依赖库编译都是没有问题。自己在此次折腾前,出现过一次R.java文件无法生成导致主工程无法编译,后来不知删了什么又奇怪的好了,就没在意,结果一次update让主工程再也没有能顺利编译通过。
    2.查找原因
   (1)工程编码格式
    原来都能编译通过,那么问题应该出在变化的地方。我修改的工程原来是GBK编码的,而为了统一,后面修改为UTF-8编码,。会不会问题在这上面。先将项目改回GBK编码,能够发现R.java文件会重新生成,当然,主工程没有变化,问题依旧。为了确认确实完成了编码,可以通过工程属性查看,还可以到工程所在目录下的.setting文件夹中查看org.eclipse.core.resources.prefs文件,如果是UTF-8,会有如下:encoding/<project>=UTF-8,而且单独某个文件会有encoding//src/XXX.java=UTF-8的记录;为了确认,故意将一文件中用两种编码方式都写了汉字,结果没有错误信息提示,放弃。但是要注意的是,如源文件编码格式不对,会直接编译不通过的。
   (2)aapt
    R.java文件是由aapt.exe产生的,查看下它的错误信息(编译环境里就是R文件没生成,没啥提示。默认的build output是slient的),于是windos->preferences--android-build,选择verbose,然后clean工程,在console中选择android查看编译过程,居然每次new resource id时出现类似 'aapt' error. Pre Compiler Build aborted的错误,但是也没有失败的提示信息,而且开始出现了aapt已停止运行的对话框,提示你发送信息。在网上搜索了下,据说是当aapt打开-v开关(verbose模式下)会有这种问题。尝试的在停止的xml资源文件附近删除或者修改,问题依旧,再次放弃。但是换个思路,直接自己通过命令行尝试,而且在eclipse中已经给出了使用的命令。在命令行中问题依旧,也没有错误提示信息。
   (3)资源冲突
    期间发现了个strings.xml文件中资源冲突却没报错的问题,想着会不会是资源过多有冲突,还是直接溢出了。从网上说的貌似每种资源下都可以达到65536,没去细想。但是把资源文件往一处合了下,确实出现了命名冲突的资源。但是据网上查阅,和前期查看,主工程的R文件是每个工程下都会有一个,也就是说每一个工程都有一个包名,那么对应的会有一个R.java,那么即使两个工程的资源命名冲突了也会因为在不同的包中而不会造成冲突的。不死心的专门写了重名的资源,依然无果。
    3.解决问题
    有直接查看aapt源码的冲动,搜了下居然没有多少人分析,想起自己改adb限制的时候,觉得没错误提示找原因那是大海捞针呢。然后决定下载新环境重新编译。新环境的好处是给了好多Error executing aapt: Return code的提示,赶紧搜索,发现很多提示styles.xml文件下+id的影响,但是没当会事,因为如果真有问题,为什么之前都能编译通过呢?应该不会,没有在意。最后实在无法,才尝试下居然解决。当真的让人想不通。有时间了看看源码,而且真的有人都报过bug,难道一直没改?就像打开-v的aapt编译错误的问题,优先级太低了,不影响使用?不得而知了。

    R.java文件还得从资源文件上找错误原因,别扯远,希望以后能找到问题到底出在哪里。。。

参考:
1.http://stackoverflow.com/questions/10699439/aapt-filing-with-error-code-1073741819

这里写图片描述 
欢迎您扫一扫上面的微信公众号,订阅我的个人公众号!本公众号将以推送Android各种碎片化小知识或小技巧,以及整理Android网络,架构,面试等方面的知识点为主,也会不定期将开发老司机日常工作中踩过的坑,平时自学的一些知识总结出来进行分享。每天一点干货小知识把你的碎片时间充分利用起来。
<think>好的,我现在需要帮助用户解决“ERROR runtime:60 - Error executing FreeMarker template”这个问题。首先,我得回忆一下常见的FreeMarker错误原因。FreeMarker是一个模板引擎,通常用于生成文本输出,比如HTML或邮件内容。这类错误通常和模板语法、数据模型或配置有关。 用户可能遇到的问题可能包括语法错误,比如未闭合的标签、错误的指令,或者变量引用不正确。比如,如果用户用了<#if>但没有闭合,或者变量名拼写错误,就会报错。另外,数据模型的问题,比如访问了一个不存在的变量或者null值而没有处理,也会导致错误。还有可能是配置问题,比如模板路径设置不正确,或者编码问题。 我应该先建议用户检查错误日志,看看具体的错误信息是什么。通常,FreeMarker的错误信息会指出出错的行和原因,比如“Expecting 'else' here”或者“Variable xxx not found”。然后根据具体信息定位问题。 接下来,分步骤思考可能的解决方案。第一步,检查模板语法,确保所有指令正确闭合,标签匹配,比如<#list>有对应的</#list>,变量使用${variable}格式。第二步,确认数据模型中是否存在所需的变量,变量名是否正确,避免null值。第三步,检查配置,比如模板加载路径是否正确,是否有权限访问模板文件。第四步,处理可能的null值,使用默认值或者??操作符进行判断,比如${variable!}或${variable!'default'}。第五步,检查特殊字符是否需要转义,尤其是在HTML中使用FreeMarker时,避免注入问题。第六步,确认FreeMarker版本,有时候不同版本的语法可能有差异,升级或降级版本可能解决问题。 还要提醒用户查看错误堆栈的详细信息,通常会给出模板中的具体行号,帮助快速定位问题。例如,如果错误提到第30行有问题,用户可以直接查看该行的代码。另外,建议用户简化模板,如果模板复杂,可以尝试逐步注释部分代码,排除法找到错误点。 可能还需要考虑用户是否在模板中使用了自定义指令或宏,这些是否正确注册和调用。还有日期、数字格式的处理是否正确,比如使用了不支持的格式字符串。此外,资源管理问题,比如模板文件被其他进程占用无法读取,或者文件编码不一致导致解析错误。 总结下来,解决问题的步骤应该是:1. 查看详细错误信息定位问题位置;2. 检查模板语法;3. 验证数据模型变量;4. 处理可能的null值;5. 检查配置和路径;6. 处理特殊字符和格式;7. 考虑版本兼容性。同时,建议用户提供具体的错误信息,以便更精确地诊断问题。</think>遇到`ERROR runtime:60 - Error executing FreeMarker Template`时,通常表示FreeMarker模板引擎在解析或渲染模板时发生错误。以下是逐步排查和解决的思路: --- ### **1. 查看详细错误信息** FreeMarker的错误日志会明确提示**错误类型**和**出错位置**,例如: ``` Encountered ">" at line 5, column 12 in template.ftl. Was expecting one of: "}"... ``` - **关键点**:定位到具体行号、列号和错误描述。 --- ### **2. 常见错误类型及解决方法** #### **(1) 语法错误** - **问题**:标签未闭合、指令格式错误、符号不匹配等。 - **示例**: ```ftl <#if condition> <#-- 缺少闭合的</#if> --> ``` - **解决**: - 检查`<#if>`、`<#list>`等指令是否配对闭合。 - 确保变量引用格式为`${variable}`,且无多余字符。 #### **(2) 变量未定义或为null** - **问题**:引用了数据模型中不存在的变量,或变量值为`null`且未处理。 - **示例**: ```ftl ${user.name} <#-- 若user为null,会报错 --> ``` - **解决**: - 使用默认值:`${user.name!}` - 条件判断:`<#if user??>${user.name}</#if>` #### **(3) 数据类型不兼容** - **问题**:对非集合类型使用`<#list>`,或对非布尔值使用`<#if>`。 - **示例**: ```ftl <#list 123 as num> <#-- 123不是集合 --> ``` - **解决**:确保操作对象类型正确(如集合、布尔值等)。 #### **(4) 模板路径或编码问题** - **问题**:模板文件未找到,或文件编码与配置不一致。 - **解决**: - 检查模板路径配置(如`Configuration.setDirectoryForTemplateLoading`)。 - 确认模板文件编码(如UTF-8)与FreeMarker配置一致: ```java configuration.setDefaultEncoding("UTF-8"); ``` --- ### **3. 调试技巧** - **简化模板**:逐步注释代码块,定位出错位置。 - **打印变量**:使用`<#assign debug = "变量值:${variable?c}">`临时输出变量值。 - **启用异常处理**: ```java try { Template template = configuration.getTemplate("template.ftl"); template.process(dataModel, writer); } catch (TemplateException e) { e.printStackTrace(); // 输出详细堆栈信息 } ``` --- ### **4. 示例修复过程** 假设错误日志显示: ``` Caused by: freemarker.core.ParseException: Syntax error in template "template.ftl" at line 3, column 10: Unexpected character: '@' ``` - **分析**:在模板第3行第10列出现非法字符`@`。 - **修复**:检查该位置是否符合FreeMarker语法(如是否误用`@`代替`#`)。 --- ### **5. 扩展工具** - **FreeMarker在线验证工具**:[https://try.freemarker.apache.org](https://try.freemarker.apache.org) 可快速测试模板片段。 - **IDE插件**:使用IntelliJ IDEA或Eclipse的FreeMarker插件,支持语法高亮和实时检查。 --- 通过以上步骤,可系统性定位并解决FreeMarker模板错误。若仍无法解决,请提供完整的错误日志和模板片段,以便进一步分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值