android 4.0 签名并混淆

android 程序终于出来了,终于大功告成?万事具备了?no,no,no,你还有一段路要走,如果不注意可能在出版本的时候会让你忙的焦头烂额。

androidAPK出来之后,为了成功保障你个人及公司的权益,以及成功发布自己的程序,你需要对自己的程序进行签名认证还有代码混淆。这些都是很关键的,一名成熟的程序员应该考虑好这些内容。

为什么要签名和混淆我就不多说了,具体自己百度百科。下面说说签名及混淆中可能遇到的问题及解决方法。

eclipse封装了很好的签名混淆工具我们可以直接使用它们对我们的apk进行保护。具体操作是


之后会进入工程检测步骤


这个步骤会对工程进行初步的检测,在这一步要注意了,一般eclipse会对你的工程进行检测是否属于debug版本,如果你要生成的apk需要进行调试的话要在你的主配置文件里面进行AndroidManifest.xml的配置,主要是debug是否是true,如果你最后确定你生成的apk没有问题了,记得把它切换成false以备之后发布。

之后就是进行密码设置啊,信息填写之类的,如果有什么问题可以直接去百度搜下相关的东西,比较简单就不说了。如果要说的话,在程序年限上注意大家尽量写长点,因为google市场至少是要求2033年之后的,否则无法上传,写个100年也不碍事。

最终会生成一个release版本的apk也就是正式签名的apk注意这个时候你有了你要发布的apk和签名证书,一定要保管好自己的签名证书,这个对以后版本升级,有很大作用,丢了就无法正常升级,切记切记。

到了这里问题算完了么。为了确保自己的apk是正常运行的,一定要去尝试去对apk进行测试。最直接的方法就是,每次发送给测试组测试的都是经过签名的,虽然麻烦,但是确保质量。

为什么测试通过的,而签名后测试会出问题。好就说到混淆了。混淆是怎么一回事,其实在eclipse普通调试的时候是不会允许混淆文件的,只有经过签名的时候才会对混淆文件进行处理,所以,进过混淆的apk可能会存在一些类找不到的问题。我们要看看如何进行代码混淆。

混淆是在apk基本完成了,对代码进行保护时做的保护措施。在2.3之前的sdk会生成一个proguard.cfg,的文件,这个就是apk对代码进行混淆配置的文件,这个版本的我就不多说了,说说2.3之后的,2.3之后的版本会生成一个proguard-project.txt的文件,这个文件时跟project.properties搭配使用的。要让程序执行这个文件你要到project.properties里面配置一下,怎么配置呢,其实里面已经有说明,仔细看注释,其实只要加上这句话

target=android-11
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

就可以了。之后签名的时候就会去找这个文件然后找到配置文件进行配置。好到设置配置文件了,一般的简单的apk没什么特殊的直接就会进行混淆,但是如果你的程序很庞大设计到各种包的引用,那就要进行配置了,因为,第三方的包是不需要混淆的,具体怎么做呢。其实一般会用2.3之前的配置然后再对第三方的包进行保留。

-optimizationpasses 5  
-dontusemixedcaseclassnames  
-dontskipnonpubliclibraryclasses  
-dontpreverify  
-verbose  
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*  
-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 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 *;  

这是2.3之前的基本配置,会帮助你把一些不必要的混淆做保留处理,然后就是添加自己第三方的jar包的保留,也很简单

如果你工程里添加了

android-support-v4.jar

gcm.jar

之类的包那直接保留就是

-libraryjars /libs/android-support-v4.jar
-dontwarn android.support.v4.**
-keep class android.support.v4.** { *;}


-libraryjars /libs/gcm.jar
-dontwarn com.google.android.gcm.**
-keep class com.google.android.gcm.** { *;}

在这之前有的朋友就会提问关于jni生成的动态库so文件需要如何处理的问题。这个,其实可以不用对so文件进行保留。但是如果你的so文件里面有引用的java层的方法这个时候就要注意了,因为java层进行了混淆如果so文件里面去找可能会找不到。所以,为了保证能找到,在so文件中调用的类和方法,要进行保留,具体的保留方法同上,一个-dontwarn 一个-keep就可以。具体哪些地方需要保留,还记得之前设置的debug选项么,这个时候你可以通过设置进行调试,看看哪个地方找不到方法或者类。

好最后不要忘记把调试通过的apk把debug选项更正为false,这样混淆也做好了。谢谢大家的支持。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值