AndFix
AndFix copied to clipboard
NoClassDefFoundError,再Patch之后,会在原本的类后添加了_CF后缀,然后就找不到了。
异常的打印信息如下:
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
会是造成异常的原因吗,求解。
你的手机型号、Android系统版本和CPU架构是什么?
一加one plus,版本5.1.1,arm。
好像暂时不支持armeabi-v7a架构的CPU,你可以换换手机试试看能不能用
AndFix supports Android 2.3 to 6.0, arm and x86 architecture, dalvik runtime and art runtime.
这是readme里面的内容。 行,我再换一个试试。
@supern 魅蓝1手机补丁addpatch加载成功,但是没有替换方法成功,没有报任何异常信息,该手机搭载Android4.4.4系统,其定制系统为Flyme 4.2.1.2Y(poweredYunOS )
系统是YunOS?貌似不支持YunOs的系统
我的也是类名最后被加了个_CF,用的是nexus 5
同问题,LG G2, AOSP 5.1.1
同样的问题,Moto X Pro,5.0.2
请楼主解决了吗,我也遇到了