android eclipse 项目打成jar包及jar混淆

项目前段时间要抽取核心功能做成sdk版本,有jar包和apk。牵扯到将项目打包成jar和jar混淆2部分

在eclipse中右键你的项目,export


选择jar file


这个页面之后点击pos_sdk左边的大于号,只勾选src的对号,其他的全部去掉。右边方框里的对号也全部去掉。还要选择生成jar包的路径,之后点击next。

建议点项目前面的黑色框,,这样就会取消所有已勾选的选项,,只需要将src部分的代码进行打包就可以了

这个里面的关于errors的对勾去掉,下面的的关于warnings打上对勾。选择好路径之后next,再点击finish。

此时在刚选的路径处就可以看到对应的jar包了。然后开始混淆(我是用的jd-gui查看的jar包)。

混淆做起来很简单只需要2步,第一编写好pos_sdk.pro文件

-injars D:/dspread_android_sdk.jar

-outjars D:/dspread_android_sdk2.5.5.jar

-libraryjars C:/Program Files/Java/jdk1.7.0_80/jre/lib/rt.jar

-libraryjars D:/adtbundlewindows64/sdk/platforms/android-19/android.jar

第一行是准备混淆的jar的路径;第二行是输出的路径;第三行是jdk的路径,只需要找到jdk的路劲然后找到rt.jar文件就可以了;第四行是sdk的路径,和第三部一样找到android.jar的路径粘贴路径就好。

之后在.pro的文件夹下运行命令行,直接粘进去就行

D:\>java -jar D:/adtbundlewindows64/sdk/tools/proguard/lib/proguard.jar @pos_sdk.pro

以下附上pos_sdk.pro文件,和项目混淆的内容相似

-injars E:/sdk/***.jar

-outjars D:/***.jar

-libraryjars C:/Program Files/Java/jdk1.7.0_51/jre/lib/rt.jar

-libraryjars D:/SDK/android_sdk/platforms/android-19/android.jar

-dontskipnonpubliclibraryclassmembers

-dontshrink

-dontoptimize

-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

-optimizationpasses 5

-useuniqueclassmembernames

-dontusemixedcaseclassnames

-keeppackagenames

-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,LocalVariable*Table,Synthetic,EnclosingMethod

-keepparameternames

-dontpreverify

-dontnote

-dontwarn

-keep public class * extends android.app.Activity  #所有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 #指定具体类不要去混淆

#-keep,allowshrinking class *

-keep class com.handmark.pulltorefresh.library.** {*;}

####-keepclasseswithmembers class * {     

      public(android.content.Context, android.util.AttributeSet);  #保持自定义控件类不被混淆,指定格式的构造方法不去混淆  } 

-keepclasseswithmembers class * {      public * ;} 

-keepclasseswithmembers class * {      public(android.content.Context, android.util.AttributeSet, int);  }  #保护指定类的成员,如果此类受到保护他们会保护的更好

-keepclassmembers class * extends android.app.Activity {  public void *(android.view.View);}

#保持自定义控件指定规则的方法不被混淆 

-keep public class * extends android.view.View {    public(android.content.Context);      public(android.content.Context, android.util.AttributeSet);      public(android.content.Context, android.util.AttributeSet, int);      public void set*(...);  } 

-keepclassmembers enum * {    public static **[] values();    public static ** valueOf(java.lang.String);}

#保持 Parcelable 不被混淆(aidl文件不能去混淆) 

-keep class * implements android.os.Parcelable {  public static final android.os.Parcelable$Creator *;} #需要序列化和反序列化的类不能被混淆(注:Java反射用到的类也不能被混淆)

-keepnames class * implements java.io.Serializable

-keepattributes *Annotation*  #过滤注解-keepattributes Signature  #过滤泛型-keep class **.R$* { *; }  #保持R文件不被混淆 #bean类所在包

-keepclassmembernames class com.example.object.** { *; }  #转换JSON的JavaBean,类成员名称保护,使其不被混淆 

-keepclassmembers class * {  public(org.json.JSONObject);}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,892评论 25 709
  • 1.首先需要在app下的build.gradle下配置,true表示编译时会混淆代码\ 2.在proguard-r...
    Thomas_yy阅读 11,668评论 0 6
  • 在离职之际,也没有啥事可以做,就自己捣腾下代码混淆,言归正传。 为了防止自己的劳动成果被别人窃取,混淆代码能有效防...
    Orz013阅读 4,645评论 0 0
  • 5分钟搞定android混淆 前言 混淆是上线前挺重要的一个环节。android使用的ProGuard,可以起到压...
    garyhu1阅读 4,127评论 0 1
  • 现在,你已经了解了联盟营销型的网站,有没有打算尝试一下的冲动?网络营销新人可以从推广别人的产品开始,到哪里找这些产...
    维度学院阅读 3,935评论 0 0