我想知道这个错误是否是由于库重复造成的

问题描述 投票:0回答:1

我的应用程序中有两个库。

一个是加密库(A),一个是虚拟键盘库(B)。

我直接使用A库,

虚拟键盘库也在内部使用A并包含在aar中。

B只使用A的2个函数,转换为Dex Jar时只能看到2个函数。 (BA功能,BB功能)

但是,当我构建我的应用程序时,我得到一个与B无法调用的函数相关错误。

Caused by: java.lang.NoSuchMethodError: No static method BC()
[B in class Lcom/Encryption/Encrypt/API; or its super classes
 (declaration of 'com.Encryption.Encrypt.API'
 appears in /data/app/kr.co.MyApp-1/base.apk:classes8.dex)

这与将B转换为Dex Jar时只有2个函数有关吗?

android jar java-native-interface aar
1个回答
1
投票

是的,似乎是这样。它可能发生,因为当这里是依赖项重复时选择一个版本的库,并选择最大的版本用于构建apk,例如想象一下你的应用程序直接使用“super-log:log:2.0”,以及“super-downloader:downloader:1.0。”,在它自己的上下文中,它使用“super-log:log:1.0”。因此,在构建gradle期间寻找重复项并选择它们的最大版本以包含在构建中,在我们的例子中它是“super-log 2.0”。所以,apk创建成功,但在运行时,如果这里是“superlog 1.0”和“superlog 2.0”之间的接口不匹配,将发生错误(它完全取决于哪一个,但通常是与ClassDefNotFoundError相关的NoSuchMethodError(效果相同)可以用raw java实现:只需编译两个类,当A类依赖于B类,调用B的一个函数,编译后只需删除B.class和ClassDefNotFoundError))。

© www.soinside.com 2019 - 2024. All rights reserved.