AndFix icon indicating copy to clipboard operation
AndFix copied to clipboard

NoClassDefFoundError,再Patch之后,会在原本的类后添加了_CF后缀,然后就找不到了。

Open ding102992 opened this issue 9 years ago • 10 comments

异常的打印信息如下:

java.lang.NoClassDefFoundError: Failed resolution of: Lcom/jingcai/apps/demo/andfix/Calculate_CF;
                                                       at com.jingcai.apps.demo.andfix.MainActivity_CF.process(MainActivity.java:23)
                                                       at com.jingcai.apps.demo.andfix.MainActivity.onClick(MainActivity.java:42)
                                                       at android.view.View.performClick(View.java:4787)
                                                       at android.view.View$PerformClick.run(View.java:19880)
                                                       at android.os.Handler.handleCallback(Handler.java:739)
                                                       at android.os.Handler.dispatchMessage(Handler.java:95)
                                                       at android.os.Looper.loop(Looper.java:139)
                                                       at android.app.ActivityThread.main(ActivityThread.java:5259)
                                                       at java.lang.reflect.Method.invoke(Native Method)
                                                       at java.lang.reflect.Method.invoke(Method.java:372)
                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:950)
                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:745)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.jingcai.apps.demo.andfix.Calculate_CF" on path: DexPathList[[zip file "/data/app/com.jingcai.apps.demo.andfix-1/base.apk"],nativeLibraryDirectories=[/data/app/com.jingcai.apps.demo.andfix-1/lib/arm, /vendor/lib, /system/lib]]
                                                       at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
                                                       at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
                                                       at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
                                                       at com.jingcai.apps.demo.andfix.MainActivity_CF.process(MainActivity.java:23) 
                                                       at com.jingcai.apps.demo.andfix.MainActivity.onClick(MainActivity.java:42) 
                                                       at android.view.View.performClick(View.java:4787) 
                                                       at android.view.View$PerformClick.run(View.java:19880) 
                                                       at android.os.Handler.handleCallback(Handler.java:739) 
                                                       at android.os.Handler.dispatchMessage(Handler.java:95) 
                                                       at android.os.Looper.loop(Looper.java:139) 
                                                       at android.app.ActivityThread.main(ActivityThread.java:5259) 
                                                       at java.lang.reflect.Method.invoke(Native Method) 
                                                       at java.lang.reflect.Method.invoke(Method.java:372) 
                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:950) 
                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:745) 
                                                    Suppressed: java.lang.ClassNotFoundException: com.jingcai.apps.demo.andfix.Calculate_CF
                                                       at java.lang.Class.classForName(Native Method)
                                                       at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
                                                       at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
                                                       at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
                                                            ... 13 more
                                                    Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available

Calculate类

public class Calculate {
    public static int add(int x,int y){
        return x+y;
    }

    public static int multi(int x, int y){
        return x * y;
    }
}

MainActivity

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.btn_process).setOnClickListener(this);
        findViewById(R.id.btn_detect).setOnClickListener(this);
        findViewById(R.id.btn_update).setOnClickListener(this);
    }

    public void process() {
        Toast.makeText(MainActivity.this, "result:" + Calculate.multi(3, 3), Toast.LENGTH_SHORT).show();
    }

    public void updatePatch() {
        UpdateManager.getInstance().addPatch(Environment.getExternalStorageDirectory() + "/out.apatch");
    }

    public void detectFile() {
        File file = new File(Environment.getExternalStorageDirectory() + "/out.apatch");
        Toast.makeText(MainActivity.this, "file exists:" + file.exists(), Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn_detect:
                detectFile();
                break;
            case R.id.btn_process:
                process();
                break;
            case R.id.btn_update:
                updatePatch();
                break;

        }
    }
}

UpdateManager

public class UpdateManager {


    private static final String TAG = UpdateManager.class.getSimpleName();
    private static UpdateManager mInstance;
    private PatchManager mPatchManager;

    private UpdateManager(){}

    public static UpdateManager getInstance(){
        if(mInstance == null){
            synchronized (UpdateManager.class){
                if(mInstance == null){
                    mInstance = new UpdateManager();
                }
            }
        }
        return mInstance;
    }

    public void init(Context context,String appVersion){
        mPatchManager = new PatchManager(context);
        mPatchManager.init(appVersion);
        Log.d(TAG, "patch manager init,version:" + appVersion);
        mPatchManager.loadPatch();
        Log.d(TAG, "patch loaded");
    }

    public void addPatch(String path){
        // add patch at runtime
        try {
            mPatchManager.addPatch(path);
            Log.d(TAG, "apatch:" + path + " added.");
        } catch (IOException e) {
            Log.e(TAG, "", e);
        }
    }
}

最后一句:

Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available

会是造成异常的原因吗,求解。

ding102992 avatar Nov 16 '15 10:11 ding102992

你的手机型号、Android系统版本和CPU架构是什么?

THEONE10211024 avatar Nov 16 '15 15:11 THEONE10211024

一加one plus,版本5.1.1,arm。

ding102992 avatar Nov 16 '15 17:11 ding102992

好像暂时不支持armeabi-v7a架构的CPU,你可以换换手机试试看能不能用

THEONE10211024 avatar Nov 17 '15 02:11 THEONE10211024

AndFix supports Android 2.3 to 6.0, arm and x86 architecture, dalvik runtime and art runtime.

这是readme里面的内容。 行,我再换一个试试。

ding102992 avatar Nov 17 '15 02:11 ding102992

@supern 魅蓝1手机补丁addpatch加载成功,但是没有替换方法成功,没有报任何异常信息,该手机搭载Android4.4.4系统,其定制系统为Flyme 4.2.1.2Y(poweredYunOS )

zhy1905 avatar Nov 19 '15 08:11 zhy1905

系统是YunOS?貌似不支持YunOs的系统

THEONE10211024 avatar Nov 19 '15 10:11 THEONE10211024

我的也是类名最后被加了个_CF,用的是nexus 5

birdman2005 avatar Dec 08 '15 10:12 birdman2005

同问题,LG G2, AOSP 5.1.1

iwgang avatar Dec 21 '15 01:12 iwgang

同样的问题,Moto X Pro,5.0.2

fashare2015 avatar Jun 12 '16 08:06 fashare2015

请楼主解决了吗,我也遇到了

zhaobenbing avatar Feb 09 '17 06:02 zhaobenbing