解决Caused by: java.lang.NoSuchMethodError: No static method isNoneEmpty(Ljava/lang/CharSequence;)Z...

先发日志

java.lang.NoSuchMethodError: No static method isNoneEmpty([Ljava/lang/CharSequence;)Z in class Lorg/apache/commons/lang3/StringUtils; or its super classes (declaration of 'org.apache.commons.lang3.StringUtils' appears in /system/framework/framework.jar:classes2.dex)

at com.xingheng.shell_basic.bean.OrderDoorBell.getData(OrderDoorBell.java)

at com.xinghengedu.shell3.view.NotVipTipsDialogFragment.toOraderAct(NotVipTipsDialogFragment.java)

at com.xinghengedu.shell3.view.NotVipTipsDialogFragment.onMTvPayClick(NotVipTipsDialogFragment.java)

at com.xinghengedu.shell3.view.NotVipTipsDialogFragment_ViewBinding$1.doClick(NotVipTipsDialogFragment_ViewBinding.java)

at butterknife.internal.DebouncingOnClickListener.onClick(DebouncingOnClickListener.java)

at android.view.View.performClick(View.java:5267)

at android.view.View$PerformClick.run(View.java:21540)

at android.os.Handler.handleCallback(Handler.java:815)

at android.os.Handler.dispatchMessage(Handler.java:104)

at android.os.Looper.loop(Looper.java:207)

at android.app.ActivityThread.main(ActivityThread.java:5710)

at java.lang.reflect.Method.invoke(Method.java)

at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:900)

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:761)


想了很久也没有明白是怎么会儿事,只出现在小米和红米的部分机型。
反编译了代码,StringUtils 这个类是存在的。
后来,突然想明白了,应该是小米的系统内置了这个类,然后有没有isNoneEmpty()这个方法,所以报错。
写个demo测试一下。

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void onTestClick(View view) {
        try {
            showStringUtils();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
            Toast.makeText(this, "没有找到org.apache.commons.lang3.StringUtils", Toast.LENGTH_SHORT).show();
        }
    }


    /**
     * 显示StringUtils 这个类
     *
     * @throws ClassNotFoundException
     */
    public void showStringUtils() throws ClassNotFoundException {
        Class stringUtilsClass = Class.forName("org.apache.commons.lang3.StringUtils");
        Method[] methods = stringUtilsClass.getMethods();
        List names = new ArrayList<>();
        for (Method method : methods) {
            names.add(method.getName());
        }
        String[] a = names.toArray(new String[0]);
        new AlertDialog.Builder(this)
                .setTitle("org.apache.commons.lang3.StringUtils")
                .setMultiChoiceItems(a, null, null)
                .show();
    }
}

在自己的没问题的测试机上试一下。


image.png

在testin 上找一个有问题的红米3试一下


image.png

果然,是系统内置了这个类,但是没有isNoneEmpty这个方法,
至此解决了这个问题,由于小米系统内置了org.apache.commons:commons-lang3:3.5,所以最好不要在apk中使用这个工具库。

简单的解决方案,混淆这个包,就可以了,这样就和系统内置的变成 了两个包

你可能感兴趣的:(解决Caused by: java.lang.NoSuchMethodError: No static method isNoneEmpty(Ljava/lang/CharSequence;)Z...)