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

自动化检测 Android APP 非 SDK 接口使用,防止非预期异常发生

点击小卡片,回复 “合集” 获取系统性的学习笔记和测试开发技能图谱 背景 从 Android 9(API 级别 28)开始,Android 平台对应用能使用的非 SDK 接口实施了限制,只要应用引用非...区分 SDK 接口和非 SDK 接口 一般而言,公共 SDK 接口是在 Android 框架软件包索引中记录的那些接口,非 SDK 接口的处理是 API 抽象出来的实现细节,因此这些接口可能会在不另行通知的情况下随时发生更改...为了避免发生崩溃和意外行为,应用应仅使用 SDK 中经过正式记录的类,这也意味着当您的应用通过反射等机制与类互动,不应访问 SDK 中未列出的方法或字段。...级别): greylist 无限制,可以正常使用 blacklist 无论什么版本的手机系统,使用这些api,系统将会抛出异常 greylist-max-o 受限制的灰名单,APP运行在 版本10.0且运行在>10.0的手机会抛出异常 测试你的应用是否使用了非 SDK 接口 这里我们通过veridex工具进行测试,veridex

89510

ProGuardAndroid 上的使用姿势

虽然有些错误会在构建应用时发生,您能及时发现,但是也有些错误您只能在运行时发现,所以请确保您的应用经过彻底的测试。 如何使用 ProGuard?...当您只从 XML 资源引用您的代码会(通常使用底层的反射),这个情况也会发生。 在一次 Android 典型的构建过程中,AAPT(处理资源的工具)会生成一个额外的 ProGuard 规则文件。...这会在下面的场景中发生: 当 ProGuard 移除过多的类 在某些情况下,ProGuard 并不知道一个类或者方法被使用了,例如这个类仅在反射使用或者仅在 XML 中被引用。...当运行时发生了 ClassNotFoundException 或 MethodNotFoundException 异常意味着您肯定缺失了某些类或者方法,也许是 ProGuard 移除了他们,又或者是因为错误配置依赖而导致无法找到他们...这在许多情况下可以您的应用避免崩溃的发生,但是这些配置并不是 100% 适合您的应用。您可以移除掉默认的 ProGuard 文件而使用您自己的。

2.5K40
您找到你想要的搜索结果了吗?
是的
没有找到

Android Instant App(安卓即时应用程序)中启用 ProGuard (混淆)

ProGuard(混淆)集成到 Android 构建,新的 com.android.feature Gradle 插件(用于构建 AIA (安卓即时应用程序)模块)根本不存在,并且 ProGuard...例如:base feature 编译,代码缩减和打包发生无需查看 feature 1 和 2 中包含的任何代码。...在你构建你的可安装程序中启用 ProGuard(混淆)并修复所有的运行时异常 这是最困难的部分,也是唯一不容易复现的部分,因为每个项目所需的 ProGuard(混淆)配置规则会有所不同。...为你所有的即时应用功能启用 ProGuard(混淆) 在可安装的应用程序版本构建过程中,ProGuard(混淆)只运行一次:在使用 com.android.application 插件的模块中。...android.app.AlertDialog$Builder android.app.Notification$InboxStyle 最后使用[comm](https://linux.die.net

2.5K30

安卓应用安全指南 4.8 输出到 LogCat

ProGuardActivity.java package org.jssec.android.log.proguard; import android.app.Activity; import android.os.Bundle...为了在构建发行版,确实删除了输出开发日志信息的代码,应该构建系统,使用某些工具自动执行代码删除。 “4.8.1 示例代码”中介绍的 ProGuard 可以用于此方法。...另一方面,为了使开发者输出程序异常的细节来记录,当异常发生,在某些情况下,堆栈踪迹通过Log.e(..., Throwable tr)/w(..., Throwable tr)/i(..., Throwable...为了减少上述错误发生的风险,建议仅使用android.util.Log类的方法。 4.8.3 高级话题 4.8.3.1 发布版应用中日志输出的两种思路 发布版应用中有两种思考日志输出的方式。...使用Exception#printStackTrace() 隐式输出到System.err(当异常没有被应用捕获,它会由系统提供给Exception#printStackTrace()。)

39310

【移动开发】基于MobileLine的零代码快速集成崩溃监控服务(Android

腾讯云移动开发平台 MobileLine 简介 移动开发平台(MobileLine)提供各种服务帮助您快速构建移动应用并推动业务增长。...优点 免费使用 零代码集成 闭环开发体验 高质量服务 崩溃监控服务(bugly) 专业、全面的异常监控解决方案。...接入后自动上报异常,支持崩溃分析/卡顿分析/错误分析等,按类型查看上报问题的列表;24小实时监控和告警,让您及时发现异常问题,不错过每一次异常;丰富的现场出错数据,辅助您快速定位异常问题,提升解决效率...只要简单几步,设置完成后,就可以在控制台查看APP发生异常信息。 [控制台] 如何集成到自己的APP呢?...一、首先我们在Android Studio创建一个APP [app] 包名为com.example.admin.myapplication 二、在 MobileLine 控制台上创建项目和应用 创建项目和应用

82770

学(kao)习(bei)官方关于64k异常处理 ^_^

预计阅读时间: 18分钟 前言 随着APP的一次又一次迭代,APP的体积也越来越大,这时候,会引发这么一个问题,早期的错误异常如下: Conversion to Dalvik format failed...通过 ProGuard 移除未使用的代码 为版本构建启用代码压缩以运行 ProGuard。启用压缩可确保交付的 APK 不含有未使用的代码。...Dalvik 可执行文件分包支持库的局限性 Dalvik 可执行文件分包支持库具有一些已知的局限性,将其纳入APP应用构建配置之中,我们应该注意这些局限性并进行针对性的测试: 启动期间在设备数据分区中安装...如果APP目标 API 级别低于 14,请务必针对这些版本的平台进行测试,因为应用可能会在启动时或加载特定类群出现问题。...则可能会在运行期间发生崩溃。

94120

Android 混淆那些事儿

Android Studio 默认的混淆方案及字段解读 开启混淆 参见google官方文档压缩代码和资源 要通过Proguard启动代码压缩,在build.gradle文件内相应的构建类型中添加minifyEnabled...通过试验,gradle 2.2之后,defaultProguardFile没有使用sdk目录下的proguard-android.txt,而是使用了gradle自带的proguard-android.txt...构建输出 构建Proguard都会输出下列文件: (1)dump.txt —- 说明APK中所有类文件的内部结构 (2)mapping.txt —- 提供原始与混淆过的类、方法和字段名称之间的转换...中手动添加抛出异常保留代码行号,并且重命名抛出异常的文件名称,这样能方便定位问题: 抛出异常保留代码行号 -keepattributes SourceFile,LineNumberTable 重命名抛出异常的文件名称...-keep public class * extends android.app.Activity -keep public class * extends android.app.Appliction

3.2K50

Android Study 之学(kao)习(bei)官方关于64k异常处理 ^_^

前言 随着APP的一次又一次迭代,APP的体积也越来越大,这时候,会引发这么一个问题,早期的错误异常如下: ? 较新版本的 Android 构建系统虽然显示的错误不同,但指示的是同一问题: ?...通过ProGuard移除未使用的代码 为版本构建启用代码压缩以运行 ProGuard。启用压缩可确保交付的 APK 不含有未使用的代码。...Dalvik 可执行文件分包支持库的局限性 Dalvik 可执行文件分包支持库具有一些已知的局限性,将其纳入APP应用构建配置之中,我们应该注意这些局限性并进行针对性的测试: 启动期间在设备数据分区中安装...如果APP目标 API 级别低于 14,请务必针对这些版本的平台进行测试,因为应用可能会在启动时或加载特定类群出现问题。...则可能会在运行期间发生崩溃。

80710

通过Gradle为APK瘦身

除了缩减Java 代码外,还可以缩减使用过的资源。 缩减资源 当给App 打包,Gradle 和Gradle 的Android 插件可以在构建期间删除所有未使用的资源。...自动缩减 最简单的方式是在你的构建中设置shrinkResources 属性。如果设置该属性为true,则Android 构建工具将自动判定哪些资源没有被使用,并将它们排除在APK 外。...使用此功能有一个要求,即必须同时启动ProGuard。这是因为缩减资源的工作方式是,直到代码引用这些资源被删除之前,Android 构建工具不能指出哪些资源没有被用到。...–nfo 当你使用该标志,Gradle 会打印出许多关于构建过程的额外信息,包括最终构建不会输出的每个资源。...自动资源缩减有一个问题,即它可能移除了过多的资源,特别是那些被动态使用的资源可能被意外删除。为了防止这种情况的发生,你可以在res/raw/ 下的一个叫作keep.xml的文件中定义这些例外。

71920

Android 代码混淆规则

ProGuard是一个免费的Java类文件收缩,优化,混淆和预校验器。它可以检测并删除未使用的类,字段,方法和属性。它可以优化字节码,并删除未使用的指令。...Proguard作用 Android中的“混淆”可以分为两部分,一部分是 Java 代码的优化与混淆,依靠 proguard 混淆器来实现;另一部分是资源压缩,将移除项目及依赖的库中未被使用的资源(资源压缩严格意义上跟混淆没啥关系...gradle 在四处地方寻找重复资源: src/main/res/ 路径 不同的构建类型(debug、release等等) 不同的构建渠道 项目依赖的第三方库 合并资源按照如下优先级顺序: 依赖 ->...-keepattributes InnerClasses:保持内部类不被混淆 -keepattributes SourceFile,LineNumberTable:抛出异常保留代码行号 3.2 保留选项...-keepattributes Exceptions #保持内部类不被混淆 -keepattributes Exceptions,InnerClasses #抛出异常保留代码行号 -keepattributes

2.4K10

一篇文章带你领略Android混淆的魅力

必要,我们可以使用 Android Gradle 插件的 resConfigs 属性来移除您的应用不需要的备用资源文件(常见的有用于国际化支持的 strings.xml,适配用的 layout.xml...其实,我们在使用代码混淆ProGuard 对我们项目中大部分代码进行了混淆操作,为了防止编译出错,我们应该通过 keep 命令保留一些元素不被混淆。...其他应用程序访问组件可能会用到类的包名加类名,如果经过混淆,可能会无法找到对应组件或者产生异常。...幸运的是,ProGuard 为我们提供了补救的措施,在着手进行之前,我们先来看一下 ProGuard 每次构建后生成了哪些内容。...ProGuard 创建发布构建都都会覆盖之前版本的 mapping.txt 文件,因此我们每次发布新版本都必须小心地保存一个副本。

93420

Android开发:请你吃一顿史上最全的Android混淆大餐

Android 日常开发过程中,混淆是我们开发 App 的一项必不可少的技能。只要是我们亲身经历过 App 打包上线的过程,或多或少都需要了解一些代码混淆的基本操作。那么,混淆到底是什么?...其实,我们在使用代码混淆ProGuard 对我们项目中大部分代码进行了混淆操作,为了防止编译出错,我们应该通过 keep 命令保留一些元素不被混淆。...其他应用程序访问组件可能会用到类的包名加类名,如果经过混淆,可能会无法找到对应组件或者产生异常。...幸运的是,ProGuard 为我们提供了补救的措施,在着手进行之前,我们先来看一下 ProGuard 每次构建后生成了哪些内容。...ProGuard 创建发布构建都都会覆盖之前版本的 mapping.txt 文件,因此我们每次发布新版本都必须小心地保存一个副本。

4K30

android混淆那些坑

class/merging/* # 混淆所采用的算法 -keep public class * extends android.app.Activity # 保持哪些类不被混淆 -keep...retrace.jar主要在debug使用。...混淆之后的jar文件执行过程如果出现异常,生成的异常信息将很难被解读,方法调用的堆栈都是一些混淆之后的名字,通过retrace.jar可以将异常的堆栈信息中的方法名还原成混淆前的名字,方便程序解决bug...避免混淆泛型 # 这在JSON实体映射非常重要,比如fastJson -keepattributes Signature # 抛出异常保留代码行号 -keepattributes SourceFile...打包忽略警告 当在导出,发现很多could not reference class之类的warning信息,如果确认app运行中和那些引用没有什么关系的话,就可以添加-dontwarn标签,就不会在提示这些

3.1K60

Android 开发的17个建议,紧跟Google官方,进阶必看!

避免在客户端做处理,当心内存泄露 使用Robolectric单元测试,Robotium 做UI测试 使用Genymotion 作为你的模拟器 总是使用ProGuard 和 DexGuard混淆来项目...使用Gradle,完成以下工作很方便: 构建APP不同版本的变种 制作简单类似脚本的任务 管理和下载依赖 自定义秘钥 更多 同时,Android Gradle插件作为新标准的构建系统正在被Google...你是否使用ProGuard取决你项目的配置,当你构建一个release版本的apk,通常你应该配置gradle文件。...更多例子请参考Proguard。 在构建项目之初,发布一个版本 来检查ProGuard规则是否正确的保持了重要的部分。...不要等到你的app要发布 "1.0"版本了才做版本发布,那时候你可能会碰到好多意想不到的异常,需要一些时间去修复他们。 Tips每次发布新版本都要写 mapping.txt。

54310

提高APP安全性的必备加固手段——深度解析代码混淆技术

使用方式:在 build.gradle 文件中配置 proguard-rules.pro 文件,然后在项目构建执行混淆。...iOS APP加固代码实现 以下是使用 ProGuard 工具对 iOSAPP 进行代码混淆的示例: 在项目 build.gradle 文件中添加以下代码: buildTypes {     release...在构建 release 版本,自动启用混淆并将混淆后的 APK 文件输出到 app/build/outputs/apk/release 文件夹中。...在使用加固技术,需要注意以下几点: 加固技术不能完全杜绝破解行为,只能增加攻击者的难度,在应用程序开发过程中需从多个方面提高应用程序的安全性。...加固需要经过充分测试与验证,确保应用程序没有异常,预期功能都正常运行。 在使用加固技术,需要保护用户的隐私和数据安全,确保应用程序遵守安全规范和法律规定。 ​

28520

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

官方流程.png 虚线方框是打包APK的操作,现在开发Android都是使用Android Studio基于gradle来构建项目,所有打包操作都是执行gradle脚本来完成,gradle编译脚本具有强大的功能...retrace.jar主要是在debug使用。...,任何APP都要使用,可以作为模板使用,具体如下: # 代码混淆压缩比,在0和7之间,默认为5,一般不需要改 -optimizationpasses 5 # 混淆使用大小写混合,混淆后的类名为小写...避免混淆泛型,这在JSON实体映射非常重要,比如fastJson -keepattributes Signature //抛出异常保留代码行号,在异常分析中可以方便定位 -keepattributes...针对第三方jar包的解决方案 我们在Android项目中不可避免要使用很多第三方提供的SDK,一般而言,这些SDK是经过ProGuard混淆的,而我们所需要做的就是避免这些SDK的类和方法在我们APP

2K22

Android混淆你了解多少?

Android 日常开发过程中,混淆是我们开发 App 的一项必不可少的技能。只要是我们亲身经历过 App 打包上线的过程,或多或少都需要了解一些代码混淆的基本操作。那么,混淆到底是什么?...其实,我们在使用代码混淆ProGuard 对我们项目中大部分代码进行了混淆操作,为了防止编译出错,我们应该通过 keep 命令保留一些元素不被混淆。...其他应用程序访问组件可能会用到类的包名加类名,如果经过混淆,可能会无法找到对应组件或者产生异常。...幸运的是,ProGuard 为我们提供了补救的措施,在着手进行之前,我们先来看一下 ProGuard 每次构建后生成了哪些内容。...ProGuard 创建发布构建都都会覆盖之前版本的 mapping.txt 文件,因此我们每次发布新版本都必须小心地保存一个副本。

1.7K00

详解Android代码混淆实战

什么是代码混淆: Android SDK 自带了混淆工具Proguard。它位于SDK根目录\tools\proguard下面。...防止app被反编译之后能够很容易的看懂代码 怎样使用混淆 在app下面的build.gradle添加使用混淆 buildTypes { release { //开启混淆,删除无用代码...# 抛出异常保留代码行号 -keepattributes SourceFile,LineNumberTable -keepattributes Deprecated,Synthetic,EnclosingMethod...# 重命名抛出异常的文件名称 -renamesourcefileattribute SourceFile # 指定混淆是采用的算法,后面的参数是一个过滤器 # 这个过滤器是谷歌推荐的算法,一般不做更改...{ public void *(android.webkit.webView, jav.lang.String); 保留自己的项目部分代码不能被混淆(需要更具自己项目) 网络请求(如果混淆,就会发生字段的错乱

1.4K51

创建Android库的方法及Android .aar文件用法小结

您的应用模块现在可以访问 Android 库中的任何代码和资源,库 AAR 文件在构建已捆绑到您的 APK 中。...如果多个 AAR 库之间发生冲突,将使用依赖项列表首先列出(位于 dependencies块顶部)的库中的资源。...构建工具会为库模块将此文件嵌入到生成的 AAR 文件中。在您将库添加到应用模块,库的 ProGuard 文件将附加至应用模块的 ProGuard 配置文件 (proguard.txt)。...'lib-proguard-rules.txt' } ... } 默认情况下,应用模块会使用库的发布构建,即使在使用应用模块的调试构建类型亦是如此。...例如,您应用的 build.gradle文件中的以下代码段会使应用在应用模块于调试模式下构建使用库的调试构建类型,以及在应用模块于发布模式下构建使用库的发布构建类型: dependencies {

2.9K10
领券