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

如何在android中排除外部第三方依赖的ProGuard

在Android中,可以使用ProGuard工具来排除外部第三方依赖。ProGuard是一个Java字节码优化和混淆工具,可以帮助减小APK文件的大小并提高应用的安全性。

要在Android中排除外部第三方依赖的ProGuard,可以按照以下步骤进行操作:

  1. 配置ProGuard:在项目的根目录下的build.gradle文件中,找到android闭包,并在其中添加以下代码:
代码语言:txt
复制
buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    }
}

这将启用ProGuard并指定了ProGuard配置文件的位置。

  1. 创建ProGuard配置文件:在项目的app目录下,创建一个名为proguard-rules.pro的文件。
  2. 配置ProGuard规则:在proguard-rules.pro文件中,添加以下规则来排除外部第三方依赖:
代码语言:txt
复制
# 保留Android Support库
-keep class android.support.** { *; }
-keep interface android.support.** { *; }

# 保留Gson库
-keep class com.google.gson.** { *; }
-keep interface com.google.gson.** { *; }

# 保留其他第三方库
-keep class com.example.library.** { *; }
-keep interface com.example.library.** { *; }

在这个例子中,我们保留了Android Support库、Gson库和一个名为com.example.library的第三方库。你需要根据你的项目中使用的第三方库来添加相应的保留规则。

  1. 运行ProGuard:在Android Studio中,选择Build -> Build APK或Build -> Generate Signed Bundle来构建你的应用。ProGuard将在构建过程中自动运行,并根据配置文件中的规则来排除外部第三方依赖。

通过以上步骤,你可以在Android中使用ProGuard来排除外部第三方依赖。这样可以减小APK文件的大小,并且提高应用的安全性。请注意,你需要根据你的项目中使用的第三方库来配置相应的保留规则,以确保应用的正常运行。

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

相关·内容

ProGuardAndroid使用姿势

在您读 ProGuard 手册时,您没必要看那些 输入 / 输出部分,因为这些 Android Gradle 打包插件会替您指定输入源(您和第三方代码) 和 Android jar 库(您构建应用时用到...通常途径是修正您依赖或者在您 ProGuard 配置中添加 -dontwarn 规则。...这些警告一个原因就是,您构建路径中没有加入需要依赖 JARs,使用了 provided (仅编译时)依赖。而有时候,在 Android 上这些代码依赖在运行时并不会被真正调用。...当 ProGuard 移除过少类 所有应用都可以使用 Android 内置 ProGuard 一些安全默认规则,保留 View getter 和 setter 方法,因为他们通常会被反射来访问...关于 ProGuard第三方库 就像您有责任为您自己代码提供 keep 规则一样,那些第三方作者们也有义务向您提供必要混淆规则配置来避免开启 Proguard 导致构建失败或者应用崩溃。

2.6K40
  • Android 代码混淆规则

    大家好,又见面了,我是你们朋友全栈君。 1. Proguard介绍 Android SDK自带了混淆工具Proguard。它位于SDK根目录\tools\proguard下面。...如果开启了混淆,Proguard默认情况下会对所有代码,包括第三方包都进行混淆,可是有些代码或者第三方包是不能混淆,这就需要我们手动编写混淆规则来保持不能被混淆部分。 2....Proguard作用 Android“混淆”可以分为两部分,一部分是 Java 代码优化与混淆,依靠 proguard 混淆器来实现;另一部分是资源压缩,将移除项目及依赖库中未被使用资源(资源压缩严格意义上跟混淆没啥关系...gradle 在四处地方寻找重复资源: src/main/res/ 路径 不同构建类型(debug、release等等) 不同构建渠道 项目依赖第三方库 合并资源时按照如下优先级顺序: 依赖 ->...--------------------------------------------------------------- #---------------------------------2.第三方依赖

    2.5K10

    android开发笔记之 Android代码混淆打包

    一, 我们用到反射地方。 二, 我们代码依赖于系统接口,比如被系统代码调用回调方法,这种情况最复杂。...proguard 配置 最常用配置选项 -dontwarn 缺省proguard 会检查每一个引用是否正确,但是第三方库里面往往有些不会用到类,没有正确引用。如果不配置的话,系统就会报错。...proguard 问题和风险 代码混淆后虽然有混淆优化好处,但是它往往也会带来如下几点问题 1,混淆错误,用到第三方时候,必须告诉 proguard 不要检查,否则proguard...其他Anroid 官方建议 不混淆 android.app.backup.BackupAgentHelper android.preference.Preference...告诉我来修改配置文件(已经保留就不需要了) 目前系统不检查第三方库为 -dontwarn android.support.** -dontwarn com.tencent.** -dontwarn

    81920

    详解Android代码混淆实战

    什么是代码混淆: Android SDK 自带了混淆工具Proguard。它位于SDK根目录\tools\proguard下面。...如果开启了混淆,Proguard默认情况下会对所有代码,包括第三方包都进行混淆,可是有些代码或者第三方包是不能混淆,这就需要我们手动编写混淆规则来保持不能被混淆部分。...### # 保留我们使用四大组件,自定义Application等等这些类不被混淆 # 因为这些子类都有可能被外部调用 -keep public class * extends android.app.Activity...,无法正常解析) 加密类 数据库实体类 工具类 项目中应用到第三方工具类(okhttp,eventbus,rxjava等),需要根据具体工具介绍进行操作 保留lib和compile引用第三方jar...:保留引用科大讯飞第三方jar包不被混淆 java -keep class com.iflytek.** { *; } #网络请求等与外界通信不能混淆 -keep class com.xxxxx.function

    1.6K51

    AndroidStudio Gradle第三依赖统一管理实现方法

    在很多时候我们使用AndroidStudio开发安卓App时候都会引入第三方库,在一个project下我们可以有很多module,每一个module就是一个app,但是每个module在进行第依赖第三方时候...,有可能依赖第三方版本不同,记住每次使用版本号也不太可能,所以统一管理第三方依赖就尤其重要。...我们可以将依赖第三方集中放入到一个gradle中,然后在需要使用module中将其引入即可,这样很方便进行了不同版本管理了。...首先我们在project下新建一个叫“config.gradle”文件(名字随便起),然后将要所有第三方依赖库进行配置。...rootProject.ext.dependencies.gson // log打印工具 compile rootProject.ext.dependencies.logger } 这样是不是很方便管理依赖第三方

    87440

    android代码混淆

    二, 我们代码依赖于系统接口,比如被系统代码调用回调方法,这种情况最复杂。 三, 是我们java 元素名称是在配置文件中配置好。...proguard 配置 最常用配置选项 -dontwarn 缺省proguard 会检查每一个引用是否正确,但是第三方库里面往往有些不会用到类,没有正确引用。如果不配置的话,系统就会报错。...proguard 问题和风险 代码混淆后虽然有混淆优化好处,但是它往往也会带来如下几点问题 1,混淆错误,用到第三方时候,必须告诉 proguard 不要检查,否则proguard 会报错。...其他Anroid 官方建议 不混淆 android.app.backup.BackupAgentHelper android.preference.Preference com.android.vending.licensing.ILicensingService...告诉我来修改配置文件(已经保留就不需要了) 目前系统部检查第三方库为 -dontwarn android.support.** -dontwarn com.tencent.** -dontwarn

    1.6K80

    Android 构建过程分析

    资源合并 如果项目引入了android support包,又或许依赖于其它第三方aar库,那构建前会将aar解压并与本地资源合并,这里资源主要包括assets目录,res目录及Androidmanifest.xml...当第三方依赖assets或res文件与本地文件有冲突时,会优先选用本地文件。...但res/values略有不同,此目录下strings.xml、color.xml、styles.xml等文件会被整合到一个叫values.xml文件中去,后与各第三方依赖values.xml进行内容上合并...Androidmanifest.xml合并相比来说则要复杂一些,除了第三方依赖manifest,项目还可以在不同目录下分别拥有manifest文件。...打包签名 此时万事俱备,只要把资源包app.ap_、可执行文件classes.dex及项目(包含第三方依赖)中非源码文件一起添加到压缩包中去,我们安装包(.apk文件)也就生成了。

    3.2K40

    Gradle 之 Task 使用

    release {               minifyEnabled false               proguardFiles getDefaultProguardFile('proguard-android-optimize.txt...,分别是: repositories:配置我们仓库地址,闭包内部属性是RepositoryHandler dependencies:配置工程插件依赖地址,gradle本身需要引入第三方库   /*...      scriptHandler.dependencies {           //gradle本身需要引入第三方库           classpath 'com.android.tools.build...:gradle:3.3.2'       }   }   appbuild.gradle   //应用程序所需要第三方库   dependencies {   //添加文件树或者文件夹依赖...比如:工程A依赖于工程B,工程B依赖于工程C,工程A传递依赖于工程C,不能进行传递依赖,是不确定,可能B升级后就不需要依赖于C,那么A不会在C找到所需东西 Gradle 执行外部命令进行拷贝文件到磁盘下

    90010

    Groovy 基本类型与闭包

    release {               minifyEnabled false               proguardFiles getDefaultProguardFile('proguard-android-optimize.txt...,分别是: repositories:配置我们仓库地址,闭包内部属性是RepositoryHandler dependencies:配置工程插件依赖地址,gradle本身需要引入第三方库   /*...      scriptHandler.dependencies {           //gradle本身需要引入第三方库           classpath 'com.android.tools.build...:gradle:3.3.2'       }   }   appbuild.gradle   //应用程序所需要第三方库   dependencies {   //添加文件树或者文件夹依赖...比如:工程A依赖于工程B,工程B依赖于工程C,工程A传递依赖于工程C,不能进行传递依赖,是不确定,可能B升级后就不需要依赖于C,那么A不会在C找到所需东西 Gradle 执行外部命令进行拷贝文件到磁盘下

    61620

    Gradle之Project Api 使用

    release {               minifyEnabled false               proguardFiles getDefaultProguardFile('proguard-android-optimize.txt...,分别是: repositories:配置我们仓库地址,闭包内部属性是RepositoryHandler dependencies:配置工程插件依赖地址,gradle本身需要引入第三方库   /*...      scriptHandler.dependencies {           //gradle本身需要引入第三方库           classpath 'com.android.tools.build...:gradle:3.3.2'       }   }   appbuild.gradle   //应用程序所需要第三方库   dependencies {   //添加文件树或者文件夹依赖...比如:工程A依赖于工程B,工程B依赖于工程C,工程A传递依赖于工程C,不能进行传递依赖,是不确定,可能B升级后就不需要依赖于C,那么A不会在C找到所需东西 Gradle 执行外部命令进行拷贝文件到磁盘下

    1.1K20

    Android 代码混淆机制

    :将project.properties文件中“# proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt...编写混淆脚本 找到Android项目目录下proguard-project.txt”文件,在proguard-project.txt文件中,你需要做就是指定混淆规则,还有指明要过滤那些文件或代码块...5.过滤引入第三方jar包,so文件和外部lib等 //过滤第三方jar包,com.google.gson替换成要想要过滤包名 -dontwarn com.google.gson.** -keep...二、通过ProGuard工具混淆代码 如果你想把你Android项目打包成jar文件然后再混淆,那这种方法比较适合 下载运行ProGuard工具 1.首先到http://proguard.sourceforge.net.../下载proguard,目前我下载并使用proguard5.1 2.解压proguard5.1,执行 bin目录下proguardgui.bat文件打开ProGuard工具 从Android项目到处

    1.5K20

    Android代码混淆之混淆规则

    请尊重他人劳动成果,转载请注明出处:《Android代码混淆技巧》 因为Android是使用Java开发,所以开发者可以使用ProGuard对代码进行混淆。...ProGuard默认会对第三方库也进行混淆,而第三方库有的已经混淆过了,有的使用了Java反射技术,所以我们在进行代码混淆时候要排除这些第三方库。...排除对第三方混淆需要在混淆规则文件(通常是:proguard-project.txt或proguard.cfg或proguard-rules.pro或proguard-rules.txt也可以是其它文件名只要在配置文件中将含有混淆规则文件名配置进去就行了...4.对第三方库中类不进行混淆 a.混淆时保护引用第三方jar包 :-libraryjars libs/baidumapapi_v3_2_0.jar #保护引用第三方jar包不被混淆 注意:在使用...b.混淆时保护第三方jar包中类不被混淆 :-keep class com.baidu.** { *; } #让ProGuard不要警告找不到com.baidu.

    1.5K20

    Groovy高级用法

    release {               minifyEnabled false               proguardFiles getDefaultProguardFile('proguard-android-optimize.txt...,分别是: repositories:配置我们仓库地址,闭包内部属性是RepositoryHandler dependencies:配置工程插件依赖地址,gradle本身需要引入第三方库   /*...      scriptHandler.dependencies {           //gradle本身需要引入第三方库           classpath 'com.android.tools.build...:gradle:3.3.2'       }   }   appbuild.gradle   //应用程序所需要第三方库   dependencies {   //添加文件树或者文件夹依赖...比如:工程A依赖于工程B,工程B依赖于工程C,工程A传递依赖于工程C,不能进行传递依赖,是不确定,可能B升级后就不需要依赖于C,那么A不会在C找到所需东西 Gradle 执行外部命令进行拷贝文件到磁盘下

    89820

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

    以 *.arsc.flat 作为扩展名资源表。 其他所有资源文件 res/values/ 目录下文件以外其他所有文件都将转换为扩展名为 *.flat 二进制 XML 文件。...其实Gradle其中一项能力就是为我们提供不同三方库之间依赖关系,而基础就是Java,所以在Build这样过程中我们经常会看到类似这样一个Task。...很简单,不想让第三者轻易获得我们开发app源码,那他第一个优势就出来了,让代码失去直观语义,让一部分想窃取公司机密外部业余黑客望而却步。...使用特殊key签名可以获取到一些不同权限 验证数据保证不被篡改,防止应用被恶意第三方覆盖 通过Android StudioGenerate Signed Bundle or APK方法可以看到上述两种签名方法...而ART是如何在保持着Stop The World观念同时又提高了性能呢?ART需要垃圾收集器做工作,拆分给应用程序本身完成,这一项任务其实就是标记了。

    97720
    领券