• 混淆Android JAR包的方法


    http://blog.csdn.net/vurtne_ye/article/details/35599491

    1)导出jar包

      如何在eclipse上Android工程中导出jar包?google,baidu.bing

      2)混淆jar包,打乱代码

      android的jar包跟普通的Java的jar包不一样,我们不想打乱一些activity或者server等跟系统打交道的代码,这是因为如果把这些也混淆了,那你还需要搞清楚混淆后这些activity变成了什么名字,然后告诉使用你这个jar包的人androidmanifest.xml中增加这些打乱了名字的activity。

      混淆jar包用到的工具是proguard,可以在android SDK里面找到,如我的是在...adt-bundle-windows-x86-20130219sdk oolsproguard。

      运行sdk oolsproguardinproguardgui.bat,运行界面如下,如果点击next,会发现这些配置很难配(全英文,又很杂)。

      其实这里直接导入一个cfg文件就可以了,单击下图右下角的Load Configuration,然后选择配置文件。

      配置文件又要怎么写?找到android工程里面的proguard.cfg文件,这个文件是用来混淆apk代码的配置文件,我们现在是要混淆jar包的代码,当然不能直接用。看下面是proguard.cfg的配置,配置会保留activity和server等一些类。这些配置都是不用改的,可以直接拿来用。

    -optimizationpasses5
    -dontusemixedcaseclassnames
    -dontskipnonpubliclibraryclasses
    -dontpreverify
    -verbose
    -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
     
    -keeppublic class *extends android.app.Activity
    -keeppublic class *extends android.app.Application
    -keeppublic class *extends android.app.Service
    -keeppublic class *extends android.content.BroadcastReceiver
    -keeppublic class *extends android.content.ContentProvider
    -keeppublic class *extends android.app.backup.BackupAgentHelper
    -keeppublic class *extends android.preference.Preference
    -keeppublic class com.android.vending.licensing.ILicensingService
     
    -keepclasseswithmembernamesclass * {
        native <methods>;
    }
     
    -keepclasseswithmembersclass * {
        public <init>(android.content.Context, android.util.AttributeSet);
    }
     
    -keepclasseswithmembersclass * {
        public <init>(android.content.Context, android.util.AttributeSet, int);
    }
     
    -keepclassmembersclass *extends android.app.Activity {
       public void *(android.view.View);
    }
     
    -keepclassmembersenum * {
        public static **[] values();
        public static ** valueOf(java.lang.String);
    }
     
    -keepclass *implements android.os.Parcelable {
      public static final android.os.Parcelable$Creator *;
    }

      将上面的配置增加几行改成如下,并重新命名文件为:test.pro

    -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
     
    //...begin
    #混淆后的导出jar包的位置和jar包名
    -outjars'E: est_after.jar'
     
    #原始jar包的位置和jar包名
    -injars'E: est.jar'
     
    #jar包依赖的其他库的位置和名称
    -libraryjars'E:workspaceeautytilepuzzlelibsalipay_msp.jar'
    -libraryjars'E:workspaceeautytilepuzzlelibsandroid-support-v4.jar'
    -libraryjars'E:androidadt-bundle-windows-x86-20130219sdkplatformsandroid-10android.jar'
     
    #下面的Test类将不会被混淆,这样的类是需要被jar包使用者直接调用的
    -keeppublic class com.example.Test {
        public <fields>;
        public <methods>;
    }
    //...end
     
    -keeppublic class *extends android.app.Activity

      现在Load Configuration里选择上面test.pro,一直next,最后混淆后的jar包就是E://test_after.jar。

    用winrar打开jar包,会发现除了Test.class,一些继承自activity等的class外,其他的类都被abcdefg这样的字母给混淆了。

    提醒:如果你把上面配置直接拷贝过去,是会失败的,请将文件里的#号后的中文注释去掉,或者改成英文的。

  • 相关阅读:
    著名的sql注入问题-问题的原因分析及总结
    带你玩转JavaWeb开发之四 -如何用JS做登录注册页面校验
    带你玩转JavaWeb开发之三 -JS插件实战开发
    JSON.toJSONStringWithDateFormat 部分字段无法序列化
    The forked VM terminated without saying properly goodbye. VM crash or System.exit called
    Referenced file contains errors (http://java.sun.com/xml/ns/javaee/web-app_3_1.xsd)
    Referenced file contains errors (http://java.sun.com/xml/ns/javaee/web-app_3_1.xsd)
    Spring使用运行测试文件的时候报 The matching wildcard is strict, but no declaration can be found for element 'tx:advice'
    org.springframework.http.converter.json.MappingJacksonHttpMessageConverter
    poi导出xlsx(Excel2007),分多个sheet
  • 原文地址:https://www.cnblogs.com/jukan/p/6420866.html
Copyright © 2020-2023  润新知