Android Studio 3.1添加mysql-connector依赖后运行报错:找不到指定字节码
解决Android添加mysql-connector-java依赖后运行报错
java.io.IOException: Failed to find byte code for javax/naming/Referenceable的问题 嘿,这个问题我之前也碰到过,其实核心原因很清晰:Android的SDK并没有包含Java SE标准库里的javax.naming包,而你用的mysql-connector-java-3.0.17-ga-bin驱动刚好依赖了这个包里的Referenceable接口。构建的时候,因为驱动包本身带着这些引用,所以Android Studio不会报错,但到了运行时,Android系统找不到这个类,自然就抛出异常了。
为啥构建没问题,运行就炸了?
Android Studio的构建过程只会检查你的依赖链里有没有这些引用,不会去验证这些类是不是Android运行时能提供的。驱动包里确实有对Referenceable的调用,但Android系统根本没这个类,所以只有当代码运行到需要加载这个类的时候,才会触发错误。
该怎么解决?
1. 最靠谱的方案:别在Android端直接用JDBC连MySQL
真的不推荐在Android app里直接连数据库,理由有这几个:
- 安全隐患:你得把数据库的账号密码硬写到代码里,很容易被反编译扒出来,数据库直接暴露风险极高。
- 适配问题:移动端网络忽好忽坏,JDBC的长连接很容易断,而且这种方式在移动场景下性能很差。
- 架构不合理:正确的姿势是搭个中间服务(比如写个简单的REST API后端),Android app通过调用接口来操作数据库,后端负责和数据库打交道,这样既安全又稳定。
2. 非要硬上的话(仅限测试,别用于生产)
如果你只是做个测试或者有特殊需求必须这么干,可以试试这两个办法:
- 找适配Android的MySQL驱动:有些第三方修改过的JDBC驱动删掉了
javax.naming这类Android没有的依赖,你可以找找这类精简版的驱动。 - 手动补全缺失的类:把
javax.naming相关的必要类打包到项目里,但这会增大包体积,还可能引发其他兼容性问题,生产环境绝对别用。
最后再提一句:你移除依赖后app能正常运行,也刚好验证了问题就出在这个驱动的依赖上,所以优先考虑调整架构,别在Android端直接操作数据库哦。
内容的提问来源于stack exchange,提问作者Rob
相关产品推荐
相关产品推荐

