dhroid - dhroid ioc模块对 加密混淆问题

 

大家应该已经看过ioc的知识
在ioc基础中中
视图事件都是通过注解实现的
问题1
如果有某个属性只声明了一下,其他代码没有引用由于混淆时会进行属性优化,将没用的属性去掉,这时需要处理

处理方法:在混淆配置文件中保留属性

问题2
混合代码时方法名都会变成a,b,c等,这样ioc事件可能就找不到方法
如下面的注解

InjectView(id=R.id.listView,itemClick="toEditStudent",itemLongClick="toDeleteStudent")

 

处理方法
在写代码时要有规范所有方法 所有事件方法都是以 on或to开头
在配置 混淆配置文件 对以on 和to的方法名保留

事件总线OnEvent 注解的方法也需要这样处理 ,不然方法可能被注释掉

 

当然现在还有更好的选择 使用第三方工具进行加密
爱加密的加密功能还是很牛的
http://www.ijiami.cn/treg?regCode=1003705
爱加密最后生成的classe.dex只有2k
我和他们客服聊了下
他说
原本的DEX文件被隐藏了的
现在这里的只是它们做的一个壳
这个基础版做了两部分处理,一是对apk内部每一个文件进行唯一值验证,只要apk内部的任何一个文件被修改 此文件的唯一值必定变化。运行时检测到变化程序将卡死。另一个就是DEX加壳隐藏


有点像帮他们做广告的嫌疑啊 当然你也可以先混淆后在让爱加密的加密

 


附上我的混淆配置文件

-optimizationpasses 5

-dontusemixedcaseclassnames

-dontskipnonpubliclibraryclasses

-dontoptimize

-ignorewarnings

#工程中用到的第三方包

-libraryjars libs/android-support-v13.jar

#工程中用到的第三方包

-libraryjars libs/baidu_moni.jar



#不混淆第三方包

-keep class android.support.v13.**

#忽略第三方包导致的异常

-dontwarn android.support.v4.**

#忽略第三方包导致的异常

-dontwarn android.support.v13.**

-verbose

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

-keep public class * extends android.app.Activity

-keep public class * extends android.support.v4.app.Fragment



-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 * implements android.os.Parcelable

-keep public class * extends OrmLiteSqliteOpenHelper

-keep public class net.duohuo.dhroid.net.cache.Cache

-keep public class net.duohuo.dhroid.net.cache.CacheManager

-keep public class * extends net.duohuo.dhroid.util.Perference



-keep public class com.android.vending.licensing.ILicensingService



-keep class net.duohuo.dhroid.net.cache.CacheManager{ *; }

-keep class net.duohuo.dhroid.net.cache.Cache{ *; }

-keep class com.j256.ormlite.dao.*{ *; }

-keep class com.j256.ormlite.db.*{ *; }

-keep class com.j256.ormlite.table.*{ *; }

-keep class com.j256.ormlite.stmt.*{ *; }

-keep class com.j256.ormlite.support.*{ *; }

-keep class com.j256.ormlite.misc.*{ *; }

-keep class com.j256.ormlite.field.*{ *; }

-keep class com.j256.ormlite.logger.*{ *; }

-keep class com.j256.ormlite.android.*{ *; }

-keep class com.j256.ormlite.android.apptools.*{ *; }



-keep class com.google.gson.*{ *; }

-keep class com.google.gson.stream.*{ *; }

-keep class com.google.gson.reflect.*{ *; }

-keep class com.google.gson.internal.*{ *; }

-keep class com.google.gson.annotations.*{ *; }

-keep class com.google.gson.internal.bind.*{ *; }

-keep class net.duohuo.dhroid.util.*{ *; }

-keep class net.duohuo.ivory.util.*{ *; }

-keep public class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper{ *; }







-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);

}



#保存itemclick的回调

-keepclassmembers class *{

      public void on*(android.widget.AdapterView, android.view.View,int,long);

         public void to*(android.widget.AdapterView, android.view.View,int,long);

      public void on*( android.view.View);

      public void to*( android.view.View);

      public void on*();

      public void to*();



}

#保存所有的属性

-keepclassmembers class * {

    <fields>;

     

}







-keepclassmembers enum * {

    public static **[] values();

    public static ** valueOf(java.lang.String);

}

 

你可能感兴趣的:(IOC)