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

添加了外部库后,Proguard构建失败

是因为Proguard在混淆代码时可能会将外部库中的一些类或方法误认为无用代码而进行删除,导致构建失败。为了解决这个问题,可以通过配置Proguard规则来排除外部库的混淆,确保它们不会被删除。

首先,需要在项目的Proguard配置文件(通常是proguard-rules.pro)中添加以下规则:

-keep class com.example.library.** { *; }

这个规则的作用是保持外部库com.example.library及其子包下的所有类和方法不被混淆。

另外,如果外部库使用了反射或动态加载等特性,还需要添加相应的规则来保持相关类和方法的完整性。例如:

-keep class com.example.library.SomeClass { *; }

这个规则的作用是保持外部库中的SomeClass类及其所有成员不被混淆。

如果你使用的是Android Studio,可以在项目的build.gradle文件中找到Proguard配置的相关部分,将上述规则添加到其中。

完成以上配置后,重新构建项目即可解决Proguard构建失败的问题。

关于Proguard的更多信息,你可以参考腾讯云的文档:Proguard 混淆配置

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

ProGuard 在 Android 上的使用姿势

在您可以测试是否开启 ProGuard 所有代码在运行时都能正常工作前,您需要先构建您的应用。...不幸的是,ProGuard 可能会发现一些引用的类缺失,并给予告警,导致您的构建失败。 修复这个问题的关键是仔细观察构建时输出的消息,理解这些警告的内容并定位他们。...一个项目依赖 OkHttp 3.8.0 构建时的消息。 OkHttp 在 3.8.0 版本的类中添加了新的注解(javax.annotation.Nullable)。...关于 ProGuard 和 第三方 就像您有责任为您自己的代码提供 keep 规则一样,那些第三方的作者们也有义务向您提供必要的混淆规则配置来避免开启 Proguard 导致的构建失败或者应用崩溃。...不过有个更好的方法,第三方的维护者们如果发布的是 AAR ,那么可以指定规则打包在 AAR 中并会在应用构建时自动暴露给构建系统,通过添加下面几行代码到模块的 build.gradle 文件中:

2.6K40

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

模块可以依赖外部 JAR 您可以开发一个依赖于外部(例如 Maps 外部)的模块。在这种情况下,相关应用必须针对包含外部(例如 Google API 插件)的目标构建。...另外也要注意,模块和相关应用都必须在其清单文件的 <uses- library 元素中声明外部模块不得包含原始资源 工具不支持在库模块中使用原始资源文件(保存在 assets/目录中)。...模块可能包含自己的 ProGuard 配置文件 通过将 ProGuard 配置文件添加到包含其 ProGuard 指令的,您可以在自己的上启用代码压缩。...构建工具会为模块将此文件嵌入到生成的 AAR 文件中。在您将添加到应用模块时,ProGuard 文件将附加至应用模块的 ProGuard 配置文件 (proguard.txt)。...'lib-proguard-rules.txt' } ... } 默认情况下,应用模块会使用的发布构建,即使在使用应用模块的调试构建类型时亦是如此。

3K10
  • Android 实现代码混淆的实例

    '), 'proguard-rules.pro' } 3、proguard又是什么呢 这是java官网给出的定义: ProGuard is a free Java Class file shrinker...作用: proguard是一个集文件压缩,优化,混淆和校验等功能的工具 检测并删除无用的类,变量,方法和属性 优化字节码并删除无用的指令 通过将类名,变量名和方法名重命名为无意义的名称实现混淆效果 还校验处理的代码...不去忽略非公共的的类 -dontskipnonpubliclibraryclassmembers 不去忽略非公共的的类的成员 -dontpreverify 不做预校验的操作 -verbose -printmapping...proguardMapping.txt 生成原类名和混淆的类名的映射文件 -optimizations !...第三方包 需到项目的build.gradle文件中找到所有的依赖,然后去官网或者github找到对应的混淆代码,添加到我们自己的混淆文件中。

    97241

    通过Gradle为APK瘦身

    一般来说,其原因如下:Android 开发者获取了更多的依赖,添加了更多的密度,Apps 增加了更多的功能。...'), 'proguard-rules.pro' } } } 当minifyEnabled 被设置为true ,在构建过程中,proguardRelease...另外一个使用案例是当你导入一个拥有很多资源的依赖,而你只使用了其中的一小部分时,你可以通过激活缩减资源来解决这个问题。缩减资源的方式有两种:自动和手动。 1....使用此功能有一个要求,即必须同时启动ProGuard。这是因为缩减资源的工作方式是,直到代码引用这些资源被删除之前,Android 构建工具不能指出哪些资源没有被用到。...一些依赖,例如Google Play Services,其包含了多种语言。如果你的应用只支持一两种语言,那么在最终的APK 中,包含所有语言的文件就会浪费许多资源。

    75520

    Gradle for Android简要指南

    该APK打包签署使用Debug或发布密钥您的APK: a. 如果您正在构建您的应用程序,这是一个调试版本,应用程序你打算仅用于测试和分析,打包签署您的应用程序与调试密钥。...Android Studio中自动配置与调试密钥的新项目。 b. 如果您正在构建您的应用程序,你要在外部释放的发行版中,打包签署您的应用程序一起发布密钥。...在构建过程的最后,您有一张调试APK或释放您的应用程序,你可以用它来部署,测试或释放到外部用户的APK。...ProGuard 构建系统使您可以指定每个构建变量不同ProGuard的规则文件。构建系统可以运行ProGuard构建过程中缩小和模糊处理的类。...假设你希望在构建失败时能够在开发阶段尽早得到反馈,给构建生命周期事件添加回调有两种方法:一是通过闭包,二是实现Gradle API的一个监听接口,Gradle并没有要求你监听生命周期事件,这完全决定于你

    80920

    史上最全的Android build.gradle配置教程

    buildscript {//这里是gradle脚本执行所需依赖,分别是对应的maven和插件 repositories { google()//从Android Studio3.0新增了google...dependencies{}闭包:配置构建工具 该闭包使用classpath声明了一个Gradle插件,由于Gradle并不只是用来构建Android项目,因此此处引入相关插件来构建Android项目,...,只能作为代码依附于别的应用程序模块来运行,打包得到的是.aar文件 2、android{}闭包: 这个闭包主要为了配置项目构建的各种属性: 2.1、添加signingConfigs{}闭包: signingConfigs...从Android Studio3.0compile引入库不在使用,而是通过api和implementation,api完全等同于以前的compile,用api引入的整个项目都可以使用,用implementation...加上这句声明后,Gradle在构建项目时会先检查一下本地是否已经缓存过该,若没有缓存则自动联网下载,下载自动添加到项目的构建路径中去。

    5K30

    史上最全Android build.gradle配置详解(小结)

    buildscript {//这里是gradle脚本执行所需依赖,分别是对应的maven和插件 repositories { google()//从Android Studio3.0新增了...dependencies{}闭包:配置构建工具 该闭包使用classpath声明了一个Gradle插件,由于Gradle并不只是用来构建Android项目,因此此处引入相关插件来构建Android项目,...,只能作为代码依附于别的应用程序模块来运行,打包得到的是.aar文件 2、android{}闭包: 这个闭包主要为了配置项目构建的各种属性: 2.1、添加signingConfigs{}闭包: signingConfigs...从Android Studio3.0compile引入库不在使用,而是通过api和implementation,api完全等同于以前的compile,用api引入的整个项目都可以使用,用implementation...加上这句声明后,Gradle在构建项目时会先检查一下本地是否已经缓存过该,若没有缓存则自动联网下载,下载自动添加到项目的构建路径中去。

    2.2K20

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

    ,包含 SDK,图像加载,公共网络代码等等。...即使对于常规项目配置 ProGuard(混淆)也是很有挑战性的,更何况是 Instant App(即时应用),当你启动的时候,你几乎肯定会遇到构建失败或者程序崩溃的情况。...问题剖析 - 两种不同的构建方式 在一个典型的场景中,在模块化应用程序并使用新的 Gradle 插件,您的项目结构将如下所示: ? 一个典型的多功能安装 + 即时应用程序项目。...在这种情况下,ProGuard(混淆)能够分析你的整个代码,找出哪些类被使用,哪些可以被安全地删除。 **在即时应用程序构建中,每个功能模块都会生成自己的 APK。...现在我们明白了为什么 ProGuard(混淆)会失败了,是时候解决这个问题了:确保我们为项目配置添加必要的保留规则,以防止在不同模块(在一个模块中定义,在另一个中使用)之间的类被移除或混淆。

    2.6K30

    配置Android项目 - 一些重要的事情

    flavors Flavours用于创建具有不同设置的构建。...使用本地调试keystore时有几个问题: 到期日365天 从多台计算机安装应用程序需要先卸载 google服务需要密钥SHA-1指纹 这就是为什么我通常生成调试密钥并提交到版本控制系统。 ?...proguard Android proguard用来做三件事: 压缩未使用的代码 — 帮助你不超出64k限制 优化代码和apk 混淆代码 — 使你的APK难以做逆向工程 问题是混淆和代码优化显着增加了编译时间...用于调试构建Proguard规则必须具有以下行以强制proguard忽略警告,跳过代码混淆和优化: ? 对于发布版本,设置proguard规则将会更加困难,因为几乎每个都有自己的特定规则。...幸运的是,有一个开源代码 —  android-proguard-snippets,它包含所有主要proguard规则。 ?

    66520

    【Android 安装包优化】使用 lib7zr.so 动态处理压缩文件 ( 拷贝 lib7zr.so 动态到 Android Studio 工程 | 配置 build.gradle 构建脚本 )

    文章目录 一、拷贝 lib7zr.so 动态到 Android Studio 工程 二、配置 Module 下的 build.gradle 构建脚本 三、参考资料 一、拷贝 lib7zr.so 动态到...defaultConfig 内部的 externalNativeBuild 配置的是配置 AS 工程的 C/C++ 源文件编译参数 // defaultConfig 外部的...// 其提供了 "armeabi-v7a" , "arm64-v8a", "x86", "x86_64" 等指令集的动态 // 那么为了控制打包的应用大小...// defaultConfig 内部的 externalNativeBuild 配置的是配置 AS 工程的 C/C++ 源文件编译参数 // defaultConfig 外部的.../ndk/guides/application_mk 博客资源 : 源码 , 编译的可执行文件, 在 7zip\p7zip_16.02\CPP\ANDROID\7zr\libs\ 目录下 ; 下载地址

    34930

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

    混淆: ? 从上面两张图可以看出:经过混淆处理之后,我们的 APK 中包名、类名、成员名等都被替换为随机、无意义的名称,增加了代码阅读和理解的困难程度,提高了反编译的成本。...4.6 其他不应该被混淆的 自定义控件不需要被混淆 JavaScript 调用 Java 的方法不应混淆 Java 的 native 方法不应该被混淆 项目中引用的第三方也不建议混淆 5 混淆的堆栈跟踪...代码经过 ProGuard 混淆处理,想要读取 StackTrace(堆栈追踪)信息就会变得很困难。...幸运的是,ProGuard 为我们提供了补救的措施,在着手进行之前,我们先来看一下 ProGuard 每次构建后生成了哪些内容。...5.2 恢复堆栈跟踪 了解完混淆构建完毕输出的内容之后,我们现在就来看一下之前的问题:混淆处理,StackTrace 定位困难。如何来恢复 StackTrace 的定位能力呢?

    97020

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

    从上面两张图可以看出:经过混淆处理之后,我们的 APK 中包名、类名、成员名等都被替换为随机、无意义的名称,增加了代码阅读和理解的困难程度,提高了反编译的成本。...其他不应该被混淆的 自定义控件不需要被混淆 JavaScript 调用 Java 的方法不应混淆 Java 的 native 方法不应该被混淆 项目中引用的第三方也不建议混淆 混淆的堆栈跟踪 代码经过...ProGuard 混淆处理,想要读取 StackTrace(堆栈追踪)信息就会变得很困难。...幸运的是,ProGuard 为我们提供了补救的措施,在着手进行之前,我们先来看一下 ProGuard 每次构建后生成了哪些内容。...恢复堆栈跟踪 了解完混淆构建完毕输出的内容之后,我们现在就来看一下之前的问题:混淆处理,StackTrace 定位困难。如何来恢复 StackTrace 的定位能力呢?

    4.8K30

    Android 代码混淆规则

    最后,预校验的Java6或针对Java MicroEdition的所述处理的码。...Proguard作用 Android中的“混淆”可以分为两部分,一部分是 Java 代码的优化与混淆,依靠 proguard 混淆器来实现;另一部分是资源压缩,将移除项目及依赖的中未被使用的资源(资源压缩严格意义上跟混淆没啥关系...混淆默认会在工程目录app/build/outputs/mapping/release下生成一个mapping.txt文件,这就是混淆规则,我们可以根据这个文件把混淆的代码反推回源本的代码,所以这个文件很重要...gradle 在四处地方寻找重复资源: src/main/res/ 路径 不同的构建类型(debug、release等等) 不同的构建渠道 项目依赖的第三方 合并资源时按照如下优先级顺序: 依赖 ->...main -> 渠道 -> 构建类型 举个例子,假如重复资源同时存在于main文件夹和不同渠道中,gradle 会选择保留渠道中的资源。

    2.5K10

    Android开发笔记(七十三)代码混淆与反破解

    /proguard/proguard-android.txt:proguard-project.txt 下面是proguard-project.txt的一个例子: #指定代码的压缩级别 -optimizationpasses...keep class org.bouncycastle.** -dontwarn org.bouncycastle.** 下面是进行代码混淆时的注意事项: 1、jni的方法要屏蔽混淆,因为so要求包名...具体说来,首先开发者在打包前记下签名证书的MD码,然后在代码中获取app安装的签名,对比两个签名的MD值是否一致,如果不一致就退出app,这样就能防止被二次打包了。...有个办法就是通过让反编译程序出错,使得代码破解失败,花指令便是这样一种思想。...下面是花指令的一段示例代码(在jd-gui 0.3.6和1.4.0版本上都测试过,加了花指令的函数就无法正常破解): //花指令开始 BufferedReader br = null; try

    1.8K40

    【Android 安装包优化】动态打包配置 ( “armeabi-v7a“, “arm64-v8a“, “x86“, “x86_64“ APK 打包 CPU 指令集配置 | NDK 完整配置参考 )

    文章目录 一、动态打包配置 二、NDK 完整配置参考 三、参考资料 一、动态打包配置 ---- 在 build.gradle 构建脚本中 , 配置 ndk 编译的动态 CPU 架构类型 ; 在 "...// 其提供了 "armeabi-v7a" , "arm64-v8a", "x86", "x86_64" 等指令集的动态 // 那么为了控制打包的应用大小...// 其提供了 "armeabi-v7a" , "arm64-v8a", "x86", "x86_64" 等指令集的动态 // 那么为了控制打包的应用大小..."armeabi-v7a"/*, "arm64-v8a", "x86", "x86_64"*/ } } } 配置完毕 , 编译新的 APK 文件 ; 打包的结果如下 ,...// 其提供了 "armeabi-v7a" , "arm64-v8a", "x86", "x86_64" 等指令集的动态 // 那么为了控制打包的应用大小

    2.3K30

    Android Studio 3.6 新特性一览(推荐)

    这些差异意味着布局和代码之间的不兼容将导致编译时而不是运行时的构建失败。...Android Gradle 插件为应用程序或模块中的每一个 build variant 创建一个组件,我们可以使用该组件将构建产物发布到自定义的 Maven 仓库中。...In-place updates for imported APKs Android Studio 允许我们导入外部构建的 APKs 来调试和分析它们。...优化 在内存分析器中检测内存泄漏 根据反馈,Android Studio 开发团队在内存分析器中添加了检测可能泄漏的活动和片段实例的功能。...在 DEX 文件查看器中,加载正在分析的 APK 的 ProGuard 映射文件。 加载,就可以通过右键单击要检查的类或方法,然后选择 Show Bytecode 来去除混淆。 ?

    2.4K20
    领券