Q:android2.3以上版本如何保护源码?
- eclipse新建2.3版本以上的项目时,工程已经没有了default.properties文件,已被Google合并成project.properties文件,文件内容如下:
# This file is automatically generated by Android Tools.# Do not modify this file -- YOUR CHANGES WILL BE ERASED!## This file must be checked in Version Control Systems.## To customize properties used by the Ant build system edit# "ant.properties", and override values to adapt the script to your# project structure.## To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):# proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt# Project target.target=android-17此处为你新建项目时配置的target
- 如何让project.properties起作用,将# proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt前面的#号去掉,${sdk.dir}就是sdk配置的目录,请注意proguard-android.txt文件里面的内容,如下所示:
# This is a configuration file for ProGuard. # http://proguard.sourceforge.net/index.html#manual/usage.html -dontusemixedcaseclassnames -dontskipnonpubliclibraryclasses -verbose # Optimization is turned off by default. Dex does not like code run # through the ProGuard optimize and preverify steps (and performs some # of these optimizations on its own). -dontoptimize -dontpreverify # Note that if you want to enable optimization, you cannot just # include optimization flags in your own project configuration file; # instead you will need to point to the # "proguard-android-optimize.txt" file instead of this one from your # project.properties file. -keepattributes *Annotation* -keep public class com.google.vending.licensing.ILicensingService -keep public class com.android.vending.licensing.ILicensingService # For native methods, see http://proguard.sourceforge.net/manual/examples.html#native -keepclasseswithmembernames class * { native <methods>; } # keep setters in Views so that animations can still work. # see http://proguard.sourceforge.net/manual/examples.html#beans -keepclassmembers public class * extends android.view.View { void set*(***); *** get*(); } # We want to keep methods in Activity that could be used in the XML attribute onClick -keepclassmembers class * extends android.app.Activity { public void *(android.view.View); } # For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); } -keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *; } -keepclassmembers class **.R$* { public static <fields>; } # The support library contains references to newer platform versions. # Don't warn about those in case this app is linking against an older # platform version. We know about them, and they are safe. -dontwarn android.support.**
- 我们从脚本中可以看出,默认的情况下,混淆默认情况是保留com.google.vending.licensing.ILicensingService、com.android.vending.licensing.ILicensingService、View、Activityandroid.os.Parcelable等等
- 在项目开发中,会引用第三方架包,此时利用android tools导出项目时,会出现一系列的错误。这里就ksoap2-android-assembly-3.0.0-RC.1-jar-with-dependencies.jar为例子,在上述文件末端加上如下脚本:(为什么要加这些脚本,就是混淆时保留这些类,以免出现其他架包的引用问题)
- -dontwarn org.kobjects.**
-dontwarn org.ksoap2.**
-dontwarn org.kxml2.**
-dontwarn org.xmlpull.** - 最后按照步骤导出apk,大功告成。
看看效果