package com.meituan.sample; import android.content.Intent; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; import com.meituan.robust.Patch; import com.meituan.robust.PatchExecutor; import com.meituan.robust.RobustCallBack; import com.meituan.sample.robusttest.ImageQualityUtil; import com.meituan.sample.robusttest.NoField; import com.meituan.sample.robusttest.SampleClass; import com.meituan.sample.robusttest.State; import com.meituan.sample.robusttest.Super; import com.meituan.sample.robusttest.other.Hll; import java.util.List; /** * For users of Robust you may only to use MainActivity or SecondActivity,other classes are used for test.<br> * <br> * If you just want to use Robust ,we recommend you just focus on MainActivity SecondActivity and PatchManipulateImp.Especially three buttons in MainActivity<br> * <br> * in the MainActivity have three buttons; "SHOW TEXT " Button will change the text in the MainActivity,you can patch the show text.<br> * <br> * "PATCH" button will load the patch ,the patch path can be configured in PatchManipulateImp.<br> * <br> * "JUMP_SECOND_ACTIVITY" button will jump to the second ACTIVITY,so you can patch a Activity.<br> * <br> * Attention to this ,We recommend that one patch is just for one built apk ,because every built apk has its unique mapping.txt and resource id<br> * * @author mivanzhang */ public class MainActivity extends AppCompatActivity { TextView textView; Button button; State<Integer> state; Hll hll = new Hll(false); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button) findViewById(R.id.button); textView = (TextView) findViewById(R.id.textView); state = new State<>(hll); Button patch = (Button) findViewById(R.id.patch); //beigin to patch patch.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (isGrantSDCardReadPermission()) { runRobust(); } else { requestPermission(); } } }); findViewById(R.id.jump_second_activity).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MainActivity.this, SecondActivity.class); startActivity(intent); Log.d("robusttest", (new NoField()).toString()); Log.d("robusttest", ImageQualityUtil.getDefaultSize("asdasdasd")); SampleClass sampleClass = new SampleClass(); sampleClass.multiple(-1); } }); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MainActivity.this, "arrived in ", Toast.LENGTH_SHORT).show(); state.setIndex(hll, 1, 1l, new Object()); Log.d("robust", "state.get() " + state.get().toString()); Log.d("robust", " state.getIndex() " + state.getIndex()); Super s = new Super(); Log.d("robust", "patch result before :" + s.check()); Log.d("robust", "patch result after:" + s.protextedMethod()); textView.setText(s.getText()); s.getinstance(); } }); //test situation, try { ImageQualityUtil.loadImage(null, null, null, 1, null); } catch (Exception e) { e.printStackTrace(); } } //patch data report class Callback implements RobustCallBack { @Override public void onPatchListFetched(boolean result, boolean isNet, List<Patch> patches) { System.out.println(" robust arrived in onPatchListFetched"); } @Override public void onPatchFetched(boolean result, boolean isNet, Patch patch) { System.out.println(" robust arrived in onPatchFetched"); } @Override public void onPatchApplied(boolean result, Patch patch) { System.out.println(" robust arrived in onPatchApplied "); } @Override public void logNotify(String log, String where) { System.out.println(" robust arrived in logNotify " + where); } @Override public void exceptionNotify(Throwable throwable, String where) { throwable.printStackTrace(); System.out.println(" robust arrived in exceptionNotify " + where); } } private boolean isGrantSDCardReadPermission() { return PermissionUtils.isGrantSDCardReadPermission(this); } private void requestPermission() { PermissionUtils.requestSDCardReadPermission(this, REQUEST_CODE_SDCARD_READ); } private static final int REQUEST_CODE_SDCARD_READ = 1; @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode) { case REQUEST_CODE_SDCARD_READ: handlePermissionResult(); break; default: break; } } private void handlePermissionResult() { if (isGrantSDCardReadPermission()) { runRobust(); } else { Toast.makeText(this, "failure because without sd card read permission", Toast.LENGTH_SHORT).show(); } } private void runRobust() { new PatchExecutor(getApplicationContext(), new PatchManipulateImp(), new Callback()).start(); } }