如果不混淆,反编译后清单文件、png文件、xml文件及JAVA代码几乎和你的源码完全一样!
虽说现在的Android工程都是混淆过的,但是我们希望借鉴的如drawable下的图片、XML布局文件基本还是可以完好无缺的破解出来
即使JAVA代码破解后阅读起来比较吃力,但是某个具体的方法逻辑还是基本完好的。
混淆前后的区别--实例
源码
public class PhoneActivity extends Activity {
private EditText dt_number = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);//加载指定的布局
Button bt_dail = (Button) findViewById(R.id.bt_dail);
dt_number = (EditText) findViewById(R.id.et_number);
bt_dail.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String number = dt_number.getText().toString().trim();//获取号码
if (TextUtils.isEmpty(number)) {//如果号码为空
Toast.makeText(PhoneActivity.this, "号码不能为空!", Toast.LENGTH_SHORT).show();//土司
return;//结束方法
}
Intent intent = new Intent();//意图
intent.setAction(Intent.ACTION_CALL);//为意图设置事件,注意要在清单文件中注册权限
intent.setData(Uri.parse("tel:" + number));//事件的数据
startActivity(intent);//执行
}
});
}
}
未混淆,从APK中提取出的源码
和源码的区别:①注释全去掉了;②结构基本不会变;③变量名可能会被更改;
public class PhoneActivity extends Activity {
private EditText dt_number = null;
public void onCreate(Bundle paramBundle) {
super.onCreate(paramBundle);
setContentView(2130903040);
Button localButton = (Button) findViewById(2131034113);
this.dt_number = ((EditText) findViewById(2131034112));
localButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View paramView) {
String str = PhoneActivity.this.dt_number.getText().toString().trim();
if (TextUtils.isEmpty(str)) {
Toast.makeText(PhoneActivity.this, "号码不能为空!", 0).show();
return;
}
Intent localIntent = new Intent();
localIntent.setAction("android.intent.action.CALL");
localIntent.setData(Uri.parse("tel:" + str));
PhoneActivity.this.startActivity(localIntent);
}
});
}
}
混淆后,从APK中提取出的源码
和没混淆的区别:①结构会有很大变化;②变量名会被更改;
public class PhoneActivity extends Activity {
private EditText a = null;
public void onCreate(Bundle paramBundle) {
super.onCreate(paramBundle);
setContentView(2130903040);
Button localButton = (Button) findViewById(2131034113);
this.a = ((EditText) findViewById(2131034112));
localButton.setOnClickListener(new a(this));
}
}
这是衍生出来的一个类
final class a implements View.OnClickListener {
a(PhoneActivity paramPhoneActivity) {
}
public final void onClick(View paramView) {
String str = PhoneActivity.a(this.a).getText().toString().trim();
if (TextUtils.isEmpty(str)) {
Toast.makeText(this.a, "号码不能为空!", 0).show();
return;
}
Intent localIntent = new Intent();
localIntent.setAction("android.intent.action.CALL");
localIntent.setData(Uri.parse("tel:" + str));
this.a.startActivity(localIntent);
}
}