我看到一个非常奇怪的应用程序崩溃,因为我创建的构建是用R8和一些专业防护规则混淆的。代码在没有模糊处理的调试版本上编译和运行得很好。它可以编译,但对于模糊的构建会崩溃。
确切的错误是:
java.lang.NoSuchFieldError:没有类型为Ljava/util/ArrayList的字段myArrayList;在类Lorg/json/json数组中;或者它的超类( 'org.json.JSONArray‘的声明出现在/system/framework/core-libart.jar中)
据我所知,令人不快的代码行如下:
JSONArray array = new JSONArray();
看起来混淆的构建试图引用JSONArray类的org.json版本,而不是Android SDK提供的版本-但为什么会这样呢?这段代码过去也可以工作,但据我所知,唯一的变化是android gradle插件的版本凹凸。
我们知道这个问题的一个解决方案-添加pro防护规则,以避免混淆org.json类,但这似乎是解决实际问题的方法
任何建议或想法都将不胜感激!
发布于 2020-04-30 05:49:13
就像我的许多Stack Overflow问题一样,只要我发布一个问题,我就会解决它!
问题是最近我们升级了一个lib版本。这个新版本直接引入了对org.json的新依赖。我在查看应用依赖项列表时发现了新的依赖项。当我在gradle文件中使用exclude删除org.json依赖时,这个问题就解决了--不再崩溃,也不再让安卓困惑该引用哪个版本的JSONArray --安卓SDK版本还是org.json
exclude group: 'org.json', module: 'json'是所需要的魔法
https://stackoverflow.com/questions/61511033
复制相似问题