首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏腾讯Bugly的专栏

    QFix探索之路——手Q热补丁轻量级方案

    QFix 是手Q团队近期推出的一种新的 Android 热补丁方案,在不影响 app 运行时性能(无需插桩去 preverify)的前提下有效地规避了 dalvik 下”unexpected DEX”的异常 性能无法提升,需要改变 插桩的解决方案会影响到运行时性能的原因在于:app 内的所有类都预埋引用一个独立 dex 的空类,导致安装 dexopt 阶段的 preverify 失败,运行时将再次 verify 可以看出,Qzone 的插桩方案是突破了条件2的限制(统一去掉了所有引用类的 preverify 标志),而微信 Tinker 的 dex 增量合成方案是突破了条件3的限制(将补丁和 app dex 合成后替换 preverify 的,这种情况条件2本来就是不满足的,就没有必要预先引用了,所以可以推断出只需要针对补丁类在原先 app 所对应的 dex 进行预先引用即可。 可以看出,新的方案是很轻量级的实现,只需一个很简单的 jni 方法调用就能解决问题,既不用构建时预先插桩去 preverify,也不用下载补丁后进行 dex 的全量合成。

    1.8K40发布于 2018-03-23
  • 来自专栏码客

    Android混淆设置

    这句话能够使我们的项目混淆后产生映射文件 # 包含有类名->混淆后类名的映射关系 -verbose # 指定不去忽略非公共库的类成员 -dontskipnonpubliclibraryclassmembers # 不做预校验,preverify 是proguard的四个步骤之一,Android不需要preverify,去掉这一步能够加快混淆速度。

    1.1K10发布于 2019-10-22
  • 来自专栏开发者技术前线

    Android Studio实现打渠道包,切换环境,混淆配置等

    Dex does not like code run # through the ProGuard optimize and preverify steps (and performs some # 不做预检验,preverify是proguard的四个步骤之一 # Android不需要preverify,去掉这一步可以加快混淆速度-dontpreverify# If you want to

    1.7K20发布于 2020-11-23
  • 来自专栏向治洪

    android混淆那些坑

    Proguard按如下流程进行打包: Input jars、Library jars-shrink->Shrunk code-optimize->Optim.code-obfuscate->Obfusc.code-preverify Proguard四项核心功能shrink,optimize,obfuscate和preverify的执行都是由proguard.jar来完成的,不过proguard.jar只能通过命令行方式来使用。 -dontskipnonpubliclibraryclasses # 指定不去忽略非公共的库的类的成员 -dontskipnonpubliclibraryclassmembers # 不做预检验,preverify 是proguard的四个步骤之一 # Android不需要preverify,去掉这一步可以加快混淆速度 -dontpreverify # 有了verbose这句话,混淆后就会生成映射文件 # 包含有类名

    3.6K60发布于 2018-02-05
  • 来自专栏向治洪

    android打包引用第三方jar出现的错误

    Dex does not like code run # through the ProGuard optimize and preverify steps (and performs some #

    1.1K60发布于 2018-01-30
  • 来自专栏腾讯Bugly的专栏

    Android 混淆那些事儿

    ProGuard由shrink、optimize、obfuscate和preverify四个步骤组成,每个步骤都是可选的,需要哪些步骤都可以在脚本中配置。 参见ProGuard官方介绍。 -dontoptimize -dontpreverify 默认optimize和preverify选项是关闭的,因为Android的dex并不像Java虚拟机需要optimize(优化)和previrify 混合时不使用大小写混合,混合后的类名为小写 -dontusemixedcaseclassnames # 指定不去忽略非公共库的类 -dontskipnonpubliclibraryclasses # 不做预校验,preverify 是proguard的四个步骤之一,Android不需要preverify,去掉这一步能够加快混淆速度。

    3.7K50发布于 2018-03-23
  • 来自专栏全栈程序员必看

    Android 代码混淆

    这句话能够使我们的项目混淆后产生映射文件 # 包含有类名->混淆后类名的映射关系 -verbose # 指定不去忽略非公共库的类成员 -dontskipnonpubliclibraryclassmembers # 不做预校验,preverify 是proguard的四个步骤之一,Android不需要preverify,去掉这一步能够加快混淆速度。

    1.8K30编辑于 2022-09-02
  • 来自专栏腾讯Bugly的专栏

    【Dev Club 分享】微信热补丁 Tinker 的实践演进之路

    它主要的面临问题有两个: 为了解决 unexpected DEX problem 异常,而采用插桩的方式给所有类插入不会真正运行的代码,防止类打上 preverify 标志。 ? 采用插桩导致所有类都非 preverify,导致上图中的 verify 与 optimize 操作会在加载类时触发。 事实上,有些人实现 hook preverify 标志来避免插桩。但是看过底层代码,就知道是不可行的。 我们要知道系统检查那个标志位的真正原因,即使 hook 了 preverify 标志,在真正运行过程中,由于 quck 指令以及 vtable 的优化,依然运行时会出问题。

    1.4K70发布于 2018-03-23
  • 来自专栏全栈程序员必看

    Android 代码混淆配置总结[通俗易懂]

    Dex does not like code run # through the ProGuard optimize and preverify steps (and performs some # of

    4.1K10编辑于 2022-09-07
  • 来自专栏Android 进阶

    Android 混淆打包

    Proguard 不要跳过对非公开类的处理,默认是跳过 -dontskipnonpubliclibraryclasses #如果应用程序引入的有jar包,并且混淆jar包里面的class #不做预校验,preverify 是proguard的4个功能之一 #android不需要preverify,去掉这一步加快混淆速度 -dontpreverify -verbose #混淆时记录日志(混淆后生产映射文件 map 类名 -

    1.8K30发布于 2019-12-26
  • 来自专栏Android 研究

    Android插件化基础3----Android的编译打包流程详解

    (三)、ProGuard工作原理 ProGuard 由shrink、optimize、obfuscate和preverify四个步骤组成,每个步骤都是可选的,需要那些步骤都可以在脚本中配置。 Input jars、Library jars——>shrink ——>Shrunk code——>optimize ——>Optim.code——>obfuscate——>Obfusc.code ——>preverify proguard.jar:Progurad的四项核心功能shrink.optimize,obfuscate和preverify的执行都是由progurad.jar来完成,不过proguard.jar只能通过领命行方式来使用 dontskipnonpubliclibraryclasses # 指定不去忽略非公共的库的类的成员 -dontskipnonpubliclibraryclassmembers # 不做预校验,preverify 是proguard的4个步骤之一 # Android不需要preverify,去掉这一步可加快混淆速度 -dontpreverify # 有了verbose这句话,混淆后就会生成映射文件 # 包含有类名

    2.6K22发布于 2018-08-30
  • 来自专栏小柔博客园

    热修复Class流派和Dex流派实现原理

    阶段标记的类)的时候虚拟机会检查Verfiy标记的结果进行反向做verfiy的校验 当校验的时候同时满足上面三个条件的话就不通过抛出unexceptDex异常,只有校验通过才会吧类加载上来 QZone插桩组织preverify 方案 这个方案肯定不满足第三个条件,所以只能从第一个或第二个条件下手 QZone从第二个条件入手通过插妆阻止preverify 解决思路:当上面那些特殊方法(构造函数,静态函数...)调用的是同一个dex 侧主动调用虚拟机解析class的方法(设置formUnverifedConstant参数为true代表这次的调用是以constantof或者是以instanceof的方式调用进来,这个为true就不会做preverify

    76330编辑于 2022-12-07
  • 来自专栏深入理解Android

    Tinker原理

    也就是说A类是在dex.loader配置中的,补丁后,A依然在oldDex1中,而A的直接引用类B却出现在了newDex1中,并且在之前A类已经被打上了preverify标志,所在A再去newDex1中加载 校验preverify的方法,正常的类加载会走到这里。

    91010编辑于 2022-06-22
  • 来自专栏Android-薛之涛

    Android-Proguard(混淆)

    preverify: 预校验代码是否符合Java1.6或者更高的规范.     除了proguard之外,还有一个DexGuard,是专门用来优化混淆Android应用的。

    1.6K40发布于 2018-09-12
  • 来自专栏全栈程序员必看

    Android 代码混淆 混淆方案

    混合时不使用大小写混合,混合后的类名为小写 -dontusemixedcaseclassnames # 指定不去忽略非公共库的类 -dontskipnonpubliclibraryclasses # 不做预校验,preverify 是proguard的四个步骤之一,Android不需要preverify,去掉这一步能够加快混淆速度。

    3.6K30编辑于 2022-09-02
  • 来自专栏Android群英传

    Android multidex 主dex是怎么来的?

    configuration.obfuscate = false; configuration.optimize = false; configuration.preverify

    2.1K20发布于 2018-06-06
  • 来自专栏ClericYi's Blog

    「万物生长」一个APK从诞生到活跃在Android手机上

    我们将整体分为4个部分: shrink —— 代码删减 optimize —— 指令优化 obfuscate —— 代码混淆 preverify —— 代码校验 Shrink 作为代码删减肯定是有删减的入口的 混淆部分一共会带来两部分的收益: 代码失去直观的语义(因为我们的方法或者函数命名时都会有一定的规则) 代码内容缩短,缩小整体的包体积 Preverify 对代码进行预校验。

    1.4K20发布于 2020-10-09
  • 来自专栏叽叽西

    ProGuard混淆

    dontskipnonpubliclibraryclasses # 指定不去忽略非公共的库的类的成员 -dontskipnonpubliclibraryclassmembers # Android不需要预校验preverify

    3.9K30编辑于 2022-05-17
  • 来自专栏Flutter入门到实战

    一键登录只需1秒,赶紧了解一下

    预登陆:提前调用预登录接口,可以加快免密登录过程,提高用户体验 SecVerify.preVerify(new OperationCallback() { @Override

    3.5K20发布于 2019-07-03
  • 来自专栏Android相关

    Gradle For Android(9)--自定义构建

    ProGuard ProGuard除了可以shrink(压缩),也可以进行optimize(优化),obfuscate(混淆),在编译时期进行preverify(预验证)。

    1K10发布于 2018-10-24
领券