Conversion to Dalvik format failed with error 2

本文解决了Android项目中因方法数过多导致的构建失败问题,提供了调整项目配置的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章出处:http://blog.youkuaiyun.com/shift_wwx

请转载的朋友标明出处~~


前言:为了这个问题找了好长时间,网上复制的太多,没什么解决的办法,弄了半天才搞定,分享出来。


今天创建了一个项目,在运行的时候死活都不行,一直报错:

trouble writing output: Too many method references: 83462; max is 65536.
You may try using --multi-dex option.
References by package:
    27 android
   147 android.accessibilityservice
   598 android.accounts
    34 android.alsa
   714 android.animation
    11 android.annotation
  5560 android.app
   551 android.app.admin
   411 android.app.backup
   140 android.app.job
    60 android.app.trust
    89 android.app.usage
   134 android.appwidget
  1787 android.bluetooth
   222 android.bluetooth.le
  1886 android.content
  1550 android.content.pm
   568 android.content.res
   532 android.database
   498 android.database.sqlite
   117 android.ddm
   168 android.drm
    30 android.emoji
    23 android.filterfw
   817 android.filterfw.core
    26 android.filterfw.format
    42 android.filterfw.geometry
    46 android.filterfw.io
    83 android.filterpacks.base
   410 android.filterpacks.imageproc
     6 android.filterpacks.numeric
    17 android.filterpacks.performance
    18 android.filterpacks.text
    29 android.filterpacks.ui
    18 android.filterpacks.videoproc
    21 android.filterpacks.videosink
    86 android.filterpacks.videosrc
   223 android.gesture
  1461 android.graphics
  1404 android.graphics.drawable
    40 android.graphics.drawable.shapes
   107 android.graphics.pdf
   532 android.hardware
   277 android.hardware.camera2
    19 android.hardware.camera2.dispatch
   339 android.hardware.camera2.impl
   469 android.hardware.camera2.legacy
    25 android.hardware.camera2.marshal
   213 android.hardware.camera2.marshal.impl
   137 android.hardware.camera2.params
   153 android.hardware.camera2.utils
   247 android.hardware.display
   443 android.hardware.hdmi
   183 android.hardware.input

太多了,不贴了。

最后会提示:

Conversion to Dalvik format failed with error 2

从提示来看,是method太多了,这个我理解的,因为我从外面导入了一个jar 包。

http://stackoverflow.com/questions/15200286/android-error-conversion-to-dalvik-format-failed-with-error-2

这里有一些解释,还是很受用的。例如在项目中创建lib 目录的时候,千万不要叫libs,可以改成任何的,因为你会发现在Android private Libraries 里面直接默认包含libs这个目录里面的jars。


顺着这个方向继续找,最后找到了.classpath:

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
	<classpathentry kind="src" path="src"/>
	<classpathentry kind="src" path="gen"/>
	<classpathentry kind="lib" path="mylib/classes.jar"/>
	<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
	<classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
	<classpathentry kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
	<classpathentry kind="output" path="bin/classes"/>
</classpath>
如果在build path里面选择order and export就会在.classpath中变成:

<classpathentry exported="true" kind="lib" path="mylib/classes.jar"/>

试着取消掉这些export ,clean之后编译应该就过了。






<think>我们正在处理一个PostgreSQL错误:ERROR: failed to find conversion function from UNKNOWN to TEXT。这个错误通常发生在查询中涉及类型转换,但系统找不到合适的转换函数时。 首先,我们需要理解错误信息: - "UNKNOWN" 表示PostgreSQL无法确定表达式的数据类型。 - "TEXT" 是目标数据类型。 - 错误表明系统无法找到将未知类型转换为TEXT类型的函数。 常见原因: 1. 在表达式或条件中使用了NULL且没有指定类型,导致类型未知。 2. 在UNION、CASE、COALESCE等需要一致数据类型的上下文中,存在类型不匹配。 3. 函数或操作符的参数类型不明确。 解决方案: 1. **显式指定NULL的类型**:如果查询中使用了NULL,将其转换为具体类型。例如,将`NULL`改为`NULL::text`。 2. **检查UNION或CASE语句中的类型一致性**:确保每个分支返回相同或可转换的类型。例如: ```sql -- 错误示例 SELECT NULL UNION SELECT 'text'; -- 修正:显式转换NULL为TEXT SELECT NULL::text UNION SELECT 'text'; ``` 3. **使用CAST或::操作符进行显式转换**:明确指定表达式的类型。例如: ```sql -- 假设some_column是整数类型,但需要作为文本处理 SELECT CAST(some_column AS text) FROM table; -- 或者 SELECT some_column::text FROM table; ``` 4. **检查函数参数类型**:如果自定义函数被调用,确保参数类型匹配,或使用显式转换。 5. **检查操作符的使用**:某些操作符要求特定类型,如果操作数类型不匹配,可能导致此错误。 6. **使用COALESCE或NULLIF时的类型处理**:确保所有参数类型兼容。例如: ```sql -- 错误示例:如果column1是整数,而'text'是字符串,则类型不匹配 SELECT COALESCE(column1, 'text') FROM table; -- 修正:将整数转换为文本 SELECT COALESCE(column1::text, 'text') FROM table; ``` 7. **检查子查询中的类型**:子查询返回的列类型可能与外部查询期望的类型不匹配。 8. **检查视图定义**:如果错误发生在视图上,检查视图的SELECT语句中是否存在类型不明确的问题。 9. **更新系统目录(谨慎操作)**:如果系统目录损坏,可能需要重建系统目录。但这种情况很少见,通常先尝试上述方法。 示例修复: 假设有以下错误查询: ```sql SELECT NULL AS col1, 'text' AS col2; ``` 在需要类型确定的上下文中(例如与其他查询合并时),NULL的类型未知,可能导致错误。修正: ```sql SELECT NULL::text AS col1, 'text' AS col2; ``` 另一个常见场景是在WHERE子句中使用表达式: ```sql -- 假设id是整数列,但被与字符串比较 SELECT * FROM table WHERE id = '123'; -- 修正:将字符串转换为整数(或反之) SELECT * FROM table WHERE id = '123'::integer; -- 或者 SELECT * FROM table WHERE id::text = '123'; ``` 注意:在PostgreSQL中,如果字符串内容都是数字,通常可以自动转换为整数,但有时类型不明确会导致错误。显式转换可以避免此类问题。 如果问题仍然存在,请提供具体的查询语句,以便进一步分析。 相关问题: 1. 如何避免PostgreSQL中的类型转换错误? 2. PostgreSQL中常见的数据类型有哪些?它们之间如何转换? 3. 在PostgreSQL中,如何调试复杂的查询错误?</think>### PostgreSQL ERROR: failed to find conversion function from UNKNOWN to TEXT 分析 这个错误通常发生在 PostgreSQL 尝试执行隐式类型转换时,系统找不到将 `UNKNOWN` 类型(即未明确指定类型的值)转换为 `TEXT` 类型的函数。以下是详细分析和解决方案: #### 错误原因 1. **未指定类型的 NULL 值** 当使用 `NULL` 而未显式指定类型时(如 `NULL::text`),PostgreSQL 会将其视为 `UNKNOWN` 类型: ```sql -- 错误示例 SELECT NULL UNION SELECT 'text_value'; ``` 在需要类型一致的操作(如 `UNION`、`CASE`)中,系统无法自动推断类型。 2. **函数参数类型不匹配** 自定义函数或内置函数调用时,参数类型与函数签名不匹配: ```sql -- 假设 my_func(text) 存在,但传入未指定类型的值 SELECT my_func(NULL); -- 错误 ``` 3. **表达式类型推断失败** 在复杂表达式(如 `COALESCE()`)中,若分支类型不一致: ```sql COALESCE(int_column, 'text_value') -- 需要显式转换 ``` #### 解决方案 1. **显式指定 NULL 类型** 使用 `::` 或 `CAST()` 明确类型: ```sql -- 正确示例 SELECT NULL::text UNION SELECT 'text_value'; SELECT my_func(NULL::text); ``` 2. **统一表达式中的类型** 确保表达式所有分支类型兼容: ```sql -- 修正 COALESCE COALESCE(int_column::text, 'text_value') ``` 3. **检查自定义函数** 如果涉及自定义函数,验证参数和返回类型: ```sql CREATE FUNCTION my_func(arg text) RETURNS text ... ``` 4. **使用类型转换函数** 对不确定类型的位置强制转换: ```sql SELECT CAST(some_value AS text); ``` #### 示例修复 错误查询: ```sql SELECT id, NULL AS comment FROM items UNION SELECT id, description FROM products; -- 可能触发错误 ``` 修正后: ```sql SELECT id, NULL::text AS comment FROM items UNION SELECT id, description::text FROM products; -- 显式指定类型 ``` #### 技术原理 PostgreSQL 依赖系统表 `pg_cast` 存储类型转换规则。当出现 `UNKNOWN` 类型时,系统无法在 `pg_cast` 中找到匹配的转换函数(如 `unknown_out` 或 `textin`)[^1]。显式类型声明可帮助查询规划器正确选择转换路径。 --- ### 相关问题 1. PostgreSQL 中常见的数据类型转换错误有哪些? 2. 如何在 PostgreSQL 中创建自定义类型转换函数? 3. 使用 `UNION` 时如何避免类型不匹配错误? 4. PostgreSQL 的 `pg_cast` 系统表包含哪些关键信息? [^1]: 引用自 PostgreSQL 类型转换机制文档,详见 [pg_cast 系统表说明](https://www.postgresql.org/docs/current/catalog-pg-cast.html)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

私房菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值