zoukankan      html  css  js  c++  java
  • dhroid

    大家应该已经看过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);
    }
  • 相关阅读:
    vue的动画组件(transition)
    vue组件的那些事($children,$refs,$parent)的使用
    vue怎么自定义指令??
    组件之间的通信:父子组件之间的通讯(子组件-改变父组件的值)
    vue的路由初识01
    总结css的使用技巧
    crontab 定时任务
    Linux crontab 命令详解
    python-面向对象
    /var/spool/postfix/maildrop 占用inode索引及磁盘空间解决办法
  • 原文地址:https://www.cnblogs.com/niray/p/4650385.html
Copyright © 2011-2022 走看看