最近接手一个软件,是别人写好的程序,需要让我在上面做一些修改或者是产品升级,在接到软件的时候,因为以前算是搞过一段时间的android studio+java的基于android的App程序,觉得只要环境搭好,程序应该不是问题。

好的,掉以轻心了,程序给到我手上,我把环境搭好,恩,可以了,下载可以运行,因为要和其他设备连接,当时没有那个设备可以连接,项目暂时不着急,就慢慢看程序吧。好的几天过去了,我觉得这样太无趣了,就找别人要连接的设备,找了好几个人总算设备找齐了,好吧来连接试试。没有改程序的情况下,程序正常下载,我点击第一个按钮,问题来了,界面白屏后退回上一个主界面,好的,调试,在非工程的文件中也不报错,就是出现一段红色的字:Source code does not match the byecode,写代码的说他那边没有这个问题,程序是正常执行了。

一直致力于找这个问题,在网上找了很多种方法,

1,最简单的clean-rebuild肯定自己第一个就试了,没有解决

,SDK,JDK的配置,在C:\Users\Administrator\.AndroidStudio3.5\config\options路径下有一个jdk.table.xml文件,对应项目工程中External Libraries下对应的Android API 26 platform(后面有路径,查看路径是否正确)和(JDK查看路径是否正确),查看文件设置是否正确,是否与工程目录下build.gradle中compileSdkVersion版本一致,这个其实很明确,一看就知道是不是一致。

但是网上的答案几乎都是说这个文件配置可能是错误的。就一直查找这个原因,查了两天,发现代码的跳转有问题,有时会在注释行跳转,就是代码是非正常跳转的。这个问题太奇怪,就找写代码的人问,他来看了一下,还是没有解决,他提议说把他的SDK文件夹全部拷给我,当时没有别的解决方式,就考了过来,但是考完后还是这个问题,我就把我这边的设备全部带到他那边是调试,发现他那边也显示Source code does not match the byecode,我才发现,这可能只是一个警告,不太会影响代码的执行,不过应该是哪里配置不合适才会报这个问题,希望以后有时间可以再研究。

3,那么问题来了,那是什么导致的程序白屏然后退出到主界面呢,调试代码,发现程序是在打开数据库时就没有正常打开,就觉得会不会是数据库的问题,他用的sqlcipher.jar,他说可能他的sqlcipher.jar版本太低了,但是我的所有的环境都是和他的是一样的,应该不存在这个问题吧,但是我还是试了一下,找了个sqlcipher.jar重新加载一下,问题还是没有解决,有点快要崩溃了,工作进行不下去了。

4,遇到周末,把老公拽到单位帮我看下,他调试了一下,发现,路径不对,数据库文件的路径,我连接上pad看到显示是在data/data/包名/database/下,但是我的程序调试路径在data/usr/0/包名/database,这个路径在pad中是没有的,好的,以为有惊喜了,强制把路径改成data/data/包名/database/下,等待奇迹发生,然而并没有,查后发现data/usr/0/包名/database是一个链接地址,他其实就是链接到data/data/包名/database/,好的,有一次失望了。

,感觉因为这个问题,好几天都没有睡好觉了,我又继续调试总感觉应该是在数据库这边有问题,我以前写过android数据库的程序,但是没有用过sqlcipher.jar包,想着要不然改成那种方式试一下,问了下领导必须要用加密的数据库吗,他说不用,我就改了。发现sqlcipher.jar引用的是net.sqlcipher.database.SQLiteDatabase,而我之前用的是android.database.sqlite.SQLiteDatabase,以前做过,很快,一会就改完了。调试,成功了,说什么好呢,饶了这么一大圈,弄了一周,我都没脸见人了。不过总算是解决了。中间下载了一个sqllite工具,试图想打开他的数据库文件,但是打不开,提示不是一个有效的数据库文件,然后打开之前项目的数据库文件是正常的,我问写代码的人,他说数据库时加密的,用工具是打不开的。才想着要不改一下,先推动工作。后面要是明白了再看看这里。