首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android 代码混淆规则

如果开启了混淆,Proguard默认情况下会对所有代码,包括第三方包都进行混淆,可是有些代码或者第三方包是不能混淆的,这就需要我们手动编写混淆规则来保持不能被混淆的部分。 2....同时,如果重复资源在同一层次出现,比如src/main/res/ 和 src/main/res2/,则 gradle 无法完成资源合并,这时会报资源合并错误。...“移除资源”流程则见名知意,需要注意的是,类似代码,混淆资源移除也可以定义哪些资源需要被保留,这点在下文给出。 3....该列表可用于验证是否真的找到了预期的类成员,特别是如果您使用通配符。 4....<init>(android.content.Context, android.util.AttributeSet, int); } #保留在Activity中的方法参数是view的方法

2.6K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Android 混淆打包

    Keep 关键字 有时候你是不是还想着,我不需要保持类名,我只需要把该类下的特定方法保持不被混淆就好,那你就不能用keep方法了,keep方法会保持类名,而需要用keepclassmembers ,如此类名就不会被保持...保留类和类中的成员防止被混淆,但成员如果没有被引用将被删除 keepclassmembers :只保留类中的成员,防止被混淆和移除。...keepclassmembernames:只保留类中的成员,但如果成员没有被引用将被删除。 keepclasseswithmembers:如果当前类中包含指定的方法,则保留类和类成员,否则将被混淆。...keepclasseswithmembernames:如果当前类中包含指定的方法,则保留类和类成员,如果类成员没有被引用,则会被移除。...(Android layout 布局文件中为控件配置的onClick方法不能混淆) -keepclassmembers class * extends android.app.Activity {

    1.5K30

    JetPack--Room数据库

    JetPack提供了Room数据库,和GreenDAO等开源库一样,在SQLite做了封装 Room主要使用三个注解: 1.Entity:实体类,对应一张表 2.Dao:包含操作表的一些列方法 3.Database...需要满足:定义的类是一个继承RoomDatabase的抽象类,注解中定义包含实体类列表,包含一个没有参数的抽象方法并返回Dao对象 一、Room上手 首先添加依赖: implementation...,还需要一个构造方法,Room会根据这个构造将表里的数据转化为实体类,对于其他我们代码里使用的构造方法,可以使用@Ignore注解表示Room将忽略它,属性也可以使用这个注解,表示这个属性将不会生成数据库字段...,注解中指定表的实体类、数据库版本、是否输出日志 使用单例模式时,构造方法不能私有化,因为Room内部会调用构造方法 定义获取Dao对象的抽象函数 package com.aruba.room;...效果: 不过每次我们做了操作后,还需要手动查询下,有没有可以自动刷新数据的方法呢?

    1.5K20

    Android的配置文件操作的完美封装(使用注解 反射让配置文件操作如此清晰和简单)

    Android提供了SharedPreference类方便的对配置文件进行操作。...和端口 ip = "218.28.111.121"; sp.putString("IP",ip) 如果参数少还无所谓,如果需要用到的参数很多,且到处都是。...如果参数很多,累死个人了,很容易漏了或忘了赋值导致参数没存储。且没有全局管理意识的人会到处使用。导致你甚至不知道到底存储了哪些东东,哪些是存储了,哪些是没存储的。...只能费劲儿的找,搜索,CTRL+F... 而我想要的效果是,所有参数都在一个类文件里定义,看起来很直观。需要存储时只要调用save()方法即可。...之前用了一个笨方法,也算是实现了。但是还是使用起来还是不够精简。

    52520

    基于Retrofit扩展一个统一处理网络请求的CallBack结尾

    思路 首先我们来思考几个场景: 场景一、 每次网络请求,都不能保证成功,如果你现在正在请求一段数据是为了加载一段网络列表,你在加载成功那里,把显示“正在加载”字样的View控件隐藏掉,那么如果请求失败...场景三、 有时候用户的手机网络卡,当他打开一个页面发现数据很久都没有刷新出来,等的不耐烦就关闭了界面,当他关闭界面之后网络突然好了,这时候如果还按照你设定的流程走,会不会出现难以预料的问题呢?...解决场景二的需求: 对于这种统一的网络出错提示,这里提供了一个统一处理方式。...* 如果是深圳市的地址,运行深圳市的方法,不拦截,继续执行onSuccess方法。...当为true的时候,则当调用完本方法,不再调用onSuccess方法。当为false,则会继续调用onSuccess方法。

    81150

    apt 与 JavaPoet 自动生成代码

    Annotation Processing Tool Annotation Processing Tool 是jdk5.0之后提供的用于编译期处理注解的api组件,简称apt。...failedView,则如果创建View发生异常时,返回failedView if(failedView !...如果在某轮process处理中,process生成了新的java文件,则apt编译器会将新生成的java文件作为输入,然后收集到新的被注解的元素,直到不再产生新的文件后,process循环调用结束。...注意,当没有新的文件生成后,process还会被再调用一次,此次输入是空的。...如果type是一个内部类,则其必须是一个静态类。其次,如果type是一个public类,则可以访问,否则,看type是否和mFileName指定的java文件是否在同一个包下。

    4.6K30

    Android 代码混淆机制

    原理 android平台的混淆原理是把代码中原来有具体含义的包名,类名,变量名,方法名等名称全部替换成按顺序排列的无意义的英文字母a、b、c….这样代码结构没有变化,还可以运行得到一样的结果,并且就算代码被反编译出来...具体方法 比较常用的方法有以下两种: 一、通过eclipse混淆代码 启用代码混淆 找到Android项目目录下的project.properties文件,如果需要对项目进行全局混码,只需要进行一步操作...但是如果有一些代码不能被混淆,比如引入了第三方jar文件或加入了so文件,需要调用里面的方法,那么调用JNI访问so文件的方法就不能被混码。在导出的时候,可能不会报错。...(Android layout 布局文件中为控件配置的onClick方法不能混淆) } -keep public class * extends android.view.View { #保持自定义控件指定规则的方法不被混淆...Ending 好了,至此已经把我所了解的Android混淆机制及使用方法介绍完毕,如果有错误的地方或者有不明了之处请大家留言指出。

    1.5K20

    Head First Android Testing 1

    深入浅出Android测试教程 (1) 最近想写一个自己的库项目,以后开发都基于这个库项目来开发,于是乎,为了保证库项目中的代码功能没有问题,简单学了一些Android测试的内容,对于没有搞过测试的我来说...,并采用了Android Annotation注解注入Context。...Android Annotation对EBean类的构造函数有个限制,要么不提供构造函数只用默认的构造函数,要么提供一个只包含参数Context的构造函数。...(最后一个测试方法的问题出在ObjectOutputStream对象创建的时候,因为当前处于Unit Test中,没有设备或者模拟器所以没法直接写文件,对于这类特殊的测试就不能使用Unit Test,而是使用第二节中的...,这就使得你的Unit Test不会依赖于Android系统的某些特定行为,但是也会带来其他的问题(如果你没有使用显式地Mock的话),如果遇到这类问题可以尝试在builde.gradle文件中加上上面的配置修改原有的抛出异常的行为

    63420

    Crack App | 【填坑】某 H5 app 的反调试绕过(Frida 与 Xposed 双版本)

    图源:极简壁纸 今日目标 这个 app 是之前文章的读者在评论区提供的样本 正好今天填一下之前的坑 所以我上网找了样本,研究一波 aHR0cHM6Ly93d3cud2FuZG91amlhLmNvbS9hcHBzLzgwOTg1NzM...,如果是反调试的话应该是false才对 这里是true,说明是可以接受反调试的 而我们测试的结果是无法调试的,那么这个 app 一定是在某个角落里做了修改 如果绕过反调试的话应该怎么搞?...然后再运行下hook脚本看看是否能够绕过反调试 运行成功,再试下chorme://inspect 就可以看到这个app显示出来了 点击inspect就可以调试了 Xposed 插件绕过反调试 在之前的文章里面我提供了...xposed插件用于绕过H5 的反调试,我们测试一下能不能绕过这个app的反调试 安装好插件之后,记得勾选一下 然后打开目标app,然后再访问chrome://inspect 也是可以inspect...以上就是全部的内容了,咱们下次再会~ 我是没有更新就在摸鱼的咸鱼 收到请回复~ 我们下次再见。 对了,看完记得一键三连,这个对我真的很重要。

    2.1K50

    Android配置文件操作模块封装,全互联网最简单好用的封装

    Android中虽然提供了SharedPreference类方便的对配置文件进行操作。但是好用吗? 假如有成百上千的参数需要存储,这样一个个分散的写法累死个人啊。...和端口 ip = "218.28.111.121"; sp.putString("IP",ip) 如果参数少还无所谓,如果需要用到的参数很多,且到处都是。...即便不使用SharedPreferences,使用文件的方式存为json或xml或ini或yaml,哪个都不是那么简单好用。 ? ? 如果参数很多,累死个人了,很容易漏了或忘了赋值导致参数没存储。...且没有全局管理意识的人会到处使用。导致你甚至不知道到底存储了哪些东东,哪些是存储了,哪些是没存储的。只能费劲儿的找,搜索,CTRL+F......,使用注解+反射让配置文件操作如此清晰和简单。

    53820

    android混淆那些坑

    再压缩的步骤中,ProGuard或从上述的EntryPoint开始递归遍历,搜索那些类和类成员在使用。对于没有被使用的类和类的成员,就会在压缩阶段丢弃。...proguardgui.jar是Proguard提供的一个图形界面工具,通过proguardgui.jar可以方便的查看和编辑Proguard配置,以及调用proguard.jar来执行一次优化过程。...混淆之后的jar文件执行过程如果出现异常,生成的异常信息将很难被解读,方法调用的堆栈都是一些混淆之后的名字,通过retrace.jar可以将异常的堆栈信息中的方法名还原成混淆前的名字,方便程序解决bug...,都不能被混淆 -keepclassmembers class **.R$* { *; } # 对于带有回调函数onXXEvent的,不能混淆 -keepclassmembers class...打包时忽略警告 当在导出时,发现很多could not reference class之类的warning信息,如果确认app运行中和那些引用没有什么关系的话,就可以添加-dontwarn标签,就不会在提示这些

    3.3K60

    CoordinatorLayout使用(一):Behavior简单理解

    CoordinatorLayout介绍 CoordinatorLayout出来很久了,时间关系,一直没有怎么弄过 看见简友的描述 r17171709 的 http://www.jianshu.com...当然,如果是和固定关联,也可以用注解去操作。...true的时候 可以设置对应 位置 和 大小 自己返回true, 则改变, 返回false, 自己不改变 位置和大小 对应的实现,也挺简单 对应的判断在这里,肯定是true 后面的位置,设置x为...android:background="#666666" /> 我们来看一下效果: 如果我们简单把右边的固定一下...比之前的事件分发要容易很多 可以直接关联View和View的事件 重要的是理解 Behavior 和 CoordinatorLayout的关系 以及 Behavior 的一些方法 其他的内容,

    1.2K40

    Android的room数据库使用小结(kotlin)

    Room是Google官方推荐使用的数据库,相比较某些优秀数据库框架来说,不用过于担心某天库会停止维护,且访问数据库非常流畅,并且提供了与常规的ORM框架一样,通过添加编译期注解来进行表和字段的配置,譬如...简单的使用: 第一步,在entiy包中增加实体类的定义,每个实体类对应一个表,,类前面加@Entity注解,默认类名就是最终生成的表名,如果不想让一致,可以指定表名(@Entity (tableName...更改字段名使用@ColumnInfo(name = "xxx")注解,如果不指定,默认就是属性名。...如果只增加version没有对应的Migration,同样会crash, 虽然有不提供自定义Migration,又不想引发crash的fallbackToDestructiveMigration方法,但非常不建议这么搞...如果仅是测试,清空数据或删除掉db文件就可以从新来过了。 如果有正式的数据,在进行表结构的更改前,需做好安全测试保证数据不丢失。

    3.3K50

    Android中的Proguard使用

    不常用的可以在官网中查询如何使用。 java -jar proguard.jar @myconfig.pro Filter 每一个类、属性、方法都会有一个全名,例如java.lang.String。...默认ProGuard会读取public以及non-public的类。然而,non-public的类通常没有关联的。可以忽略他们,提升ProGuard速度,而且也不会影响output。...但是有一些lib,例如JSE run-time,包含了non-public的类,但是它还可以被public的library继承。所以你不能使用这个option。...但是有可能程序会有MyClass.class.getResource("")这种代码出现,如果没有指定一个Directory Filter的话,那么所有的目录都会被Keep住。...如果它们没有在Shrink阶段被移除的话 -keepclassmembernames class scala.concurrent.forkjoin.ForkJoinPool { long eventCount

    98030

    MVVM的数据持久化(一)——ROOM的集成

    用@Database注解的类应满足以下条件: 是一个继承RoomDatabase的抽象类。 在注释中包含与数据库相关联的实体列表。 包含一个具有0个参数的抽象方法,并返回用@Dao注释的类。...Entity: 表示数据库内的表。 DAO: 包含用于访问数据库的方法。 以及这三者之间的关系图: ?...如果你的entity有一个组合主键,你可以使用@Entity注解的primaryKeys属性。 2.tableName Room默认把类名作为数据库的表名。...如果你想用其它的名称,使用@Entity注解的tableName属性。 3.ColumnInfo Room默认把field名称作为数据库表的column名。...Dao负责操作数据库的方法,也就是说我们一些操作数据库的动作都是在这里完成的。不同的是我们不需要这些都用Dao类当中的注解来定义查询。

    1.5K20
    领券