uccmawei / FingerprintIdentify

:+1: Android Fingerprint Verification SDK

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

如何兼容Android support库

mundane799699 opened this issue · comments

我们现在的项目没有迁移到AndroidX, 而且依赖的第三方库的方法里需要传入的参数也是android.support包下面的, 比如需要传入类型为android.support.v4.app.FragmentActivity的参数, 迁移成本太大.

现在我在gradle文件里是这样依赖的,

implementation ('com.wei.android.lib:fingerprintidentify:1.2.6') {
        exclude group: 'androidx.appcompat', module: 'appcompat'
}

但是在点击"开始验证"按钮的时候发生了异常, 代码如下

mFingerprintIdentify.setExceptionListener(new BaseFingerprint.ExceptionListener() {
            @Override
            public void onCatchException(Throwable exception) {
                Log.e("tag", "", exception);
                append("\nException:" + exception.getLocalizedMessage());
            }
        });

打印的日志如下

java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/core/os/CancellationSignal;
        at com.wei.android.lib.fingerprintidentify.impl.AndroidFingerprint.doIdentify(AndroidFingerprint.java:61)
        at com.wei.android.lib.fingerprintidentify.base.BaseFingerprint.startIdentify(BaseFingerprint.java:61)
        at com.wei.android.lib.fingerprintidentify.FingerprintIdentify.startIdentify(FingerprintIdentify.java:89)
        at com.crf.crfsample.module.finger.FingerActivity.start(FingerActivity.java:69)
        at java.lang.reflect.Method.invoke(Native Method)
        at skin.support.app.SkinCompatViewInflater$DeclaredOnClickListener.onClick(SkinCompatViewInflater.java:351)
        at android.view.View.performClick(View.java:6649)
        at android.view.View.performClickInternal(View.java:6621)
        at android.view.View.access$3100(View.java:786)
        at android.view.View$PerformClick.run(View.java:26177)
        at android.os.Handler.handleCallback(Handler.java:891)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:207)
        at android.app.ActivityThread.main(ActivityThread.java:7536)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:958)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.core.os.CancellationSignal" on path: DexPathList[[zip file "/data/app/com.qianhaishuliang.shop-eTJaFhvpFoxo7M-6EhVgRg==/base.apk"],nativeLibraryDirectories=[/data/app/com.qianhaishuliang.shop-eTJaFhvpFoxo7M-6EhVgRg==/lib/arm64, /data/app/com.qianhaishuliang.shop-eTJaFhvpFoxo7M-6EhVgRg==/base.apk!/lib/arm64-v8a, /system/lib64, /product/lib64]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
        at com.wei.android.lib.fingerprintidentify.impl.AndroidFingerprint.doIdentify(AndroidFingerprint.java:61) 
        at com.wei.android.lib.fingerprintidentify.base.BaseFingerprint.startIdentify(BaseFingerprint.java:61) 
        at com.wei.android.lib.fingerprintidentify.FingerprintIdentify.startIdentify(FingerprintIdentify.java:89) 
        at com.crf.crfsample.module.finger.FingerActivity.start(FingerActivity.java:69) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at skin.support.app.SkinCompatViewInflater$DeclaredOnClickListener.onClick(SkinCompatViewInflater.java:351) 
        at android.view.View.performClick(View.java:6649) 
        at android.view.View.performClickInternal(View.java:6621) 
        at android.view.View.access$3100(View.java:786) 
        at android.view.View$PerformClick.run(View.java:26177) 
        at android.os.Handler.handleCallback(Handler.java:891) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:207) 
        at android.app.ActivityThread.main(ActivityThread.java:7536) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:958)

有什么办法能解决这个问题吗?

commented

你们可以使用1.2.1版本即可

你们可以使用1.2.1版本即可

您好,我的问题跟他一样的,没有迁移到androidX,用他这中方式导入的1.2.6的版本,我需要兼容到5.x的android版本,并且我导入1.2.1的话我的 minSdkVersion是19,您的在1.2.1版本是21,导入不了,请问一下怎么解决?谢谢

commented

你们可以下载我的库源码回去改一下类的包名,也可以使用。从andoirdx改为support库的就可以了。

大佬,没操作过转androidx,更别说androidx转support了,请问能提示下么?谢谢

你们可以下载我的库源码回去改一下类的包名,也可以使用。从andoirdx改为support库的就可以了。

已经改好了 谢谢!

@ZuJunJun 请问你是改的1.2.1还是1.2.6, 我看到1.2.6里面FingerprintManagerCompatApi23 和FingerprintManagerCompat都依赖了androidx里的类, 不知道该如何改

@ZuJunJun 请问你是改的1.2.1还是1.2.6, 我看到1.2.6里面FingerprintManagerCompatApi23 和FingerprintManagerCompat都依赖了androidx里的类, 不知道该如何改

改的1.2.6,把lib里面的build.gradle的androidx引入删掉,lib里面报错逐一改掉包替换成support的,我的已经用起来了,加油。

@ZuJunJun 明白了,谢谢