Android应用签名与防止反编译(一)

本文介绍如何为Android应用进行签名并发布,同时提供防止应用被反编译的方法,包括使用ProGuard进行代码混淆。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  最近一直想发布应用到Android应用市场,但对Android应用的签名与打包不是很理解,就百度了许多,以下是我的总结。

  Android签名:

       1.首先创建一个应用SignDemo

        

        2.点击工程右键,Android Tools-->Export Signed Android  Application Package...

弹出以下对话框

     Next--->输入保存的位置密码与确认密码。

点击Next.

      3.输入相关信息。

  4.输入apk的保存位置

 

 点击完成,这样带有签名的apk就生成了。

     、Android 防止反编译

     由于Android应用容易被反编译,利用apktool,dex,jd-gui等工具,可以很容易获取到开发者的图片语音等资源。如果不加以防护,我们的代码也有可能被别人轻易获取。想想自己辛苦写的代码,被别人窃取,很不是滋味。下面我们来聊一下,怎样防止反编译自己的代码,因为图片与相关的语音资源无法避免。

  下面我们不加防护,来反编译我们的代码。

  1.不加防护,反编译

  我们在上面的工程里,添加一个类Demo.java,

public class Demo {

	private String name;
	private String password;

	public Demo(String name, String password) {
		super();
		this.name = name;
		this.password = password;
	}

}

MainActivity的代码如下

 

public class MainActivity extends Activity {

	private Demo mDemo;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        mDemo = new Demo("hello", "hello");
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}
接着我重新用签名生成apk文件,解压apk文件,获取classes.dex文件复制到dex工具的目录下。编译生成classes_dex2jar.jar文件。

生成的classes_dex2jar.jar文件如下。

我们用jd-gui打开classes_dex2jar.jar文件,我们所写的代码全部呈现。

  2.防止反编译

  (1)首先看下工程下面是否有proguard.cfg文件,没有的话,复制一个。proguard.cfg内容如下:


-optimizationpasses 5 
-dontusemixedcaseclassnames 
-dontskipnonpubliclibraryclasses 
-dontpreverify 
-verbose 
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* 
-libraryjars /home/huang/myworkspace/SignDemo/libs/android-support-v4.jar
-dontwarn android.support.v4.**
-keep class android.support.v4.** { *; }
-keep public class * extends android.support.v4.**
-keep public class * extends android.app.Fragment
-keep public class * extends android.app.Activity 
-keep public class * extends android.app.Application 
-keep public class * extends android.app.Service 
-keep public class * extends android.content.BroadcastReceiver 
-keep public class * extends android.content.ContentProvider 
-keep public class * extends android.app.backup.BackupAgentHelper 
-keep public class * extends android.preference.Preference 
-keep public class com.android.vending.licensing.ILicensingService 
-keepclasseswithmembernames class * { 
native <methods>; 
} 
-keepclasseswithmembernames class * { 
public <init>(android.content.Context, android.util.AttributeSet); 
} 
-keepclasseswithmembernames class * { 
public <init>(android.content.Context, android.util.AttributeSet, int); 
} 
-keepclassmembers enum * { 
public static **[] values(); 
public static ** valueOf(java.lang.String); 
} 
-keep class * implements android.os.Parcelable { 
public static final android.os.Parcelable$Creator *; 
} 

project.properties文件最后加上proguard.config=proguard.cfg



  (2)重复以上的1中的步骤,生成新的apk文件,获取classes.dex,dex编译classes.dex生成classes_dex2jar.jar文件。再用jd-gui工具打开,如图我们发现Demo变成了a

由于我们写的只是小部分代码,效果不是很明显。代码越多时,混淆得越厉害。防止别人轻易获取自己的代码。





  
  f


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值