=("img_%1d",+1);res=()(name,"",());

我们可以设置为来开启严格模式,使只有确实被使用的资源被保留。

以上就是自定义资源保持规则相关的配置,举个例子:

?xmlversion="1.0"encoding="utf-8"?resourcesxmlns:tools="http://schemas.android.com/tools"tools:keep="@layout/l_used*_c,@layout/l_used_a,@layout/l_used_b*"tools:discard="@layout/unused2"tools:shrinkMode="strict"/

移除替代资源

一些替代资源,例如多语言支持的strings.xml,多分辨率支持的layout.xml等,在我们不需要使用又不想删除掉时,可以使用资源压缩将它们移除。

我们使用resConfig属性来指定需要支持的属性,例如

一些替代资源,例如多语言支持的strings.xml,多分辨率支持的layout.xml等,在我们不需要使用又不想删除掉时,可以使用资源压缩将它们移除。

我们使用resConfig属性来指定需要支持的属性,例如

android{defaultConfig{...resConfigs"en","fr"}}

其他未显式声明的语言资源将被移除。

最后附上一个我在实际项目中的混淆方案

proguard-android.txt

文件内容

#代码混淆压缩比,在0~7之间-optimizationpasses5#混合时不使用大小写混合,混合后的类名为小写-dontusemixedcaseclassnames#指定不去忽略非公共库的类-dontskipnonpubliclibraryclasses#不做预校验,preverify是proguard的四个步骤之一,Android不需要preverify,去掉这一步能够加快混淆速度。-dontpreverify-verbose#避免混淆泛型-keepattributesSignature#保留Annotation不混淆-keepattributes*Annotation*,InnerClasses#google推荐算法-optimizations!code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/*#避免混淆Annotation、内部类、泛型、匿名类-keepattributes*Annotation*,InnerClasses,Signature,EnclosingMethod#重命名抛出异常时的文件名称-renamesourcefileattributeSourceFile#抛出异常时保留代码行号-keepattributesSourceFile,LineNumberTable#处理support包-dontnoteandroid.support.**-dontwarnandroid.support.**#保留继承的-keeppublicclass*extendsandroid.support.v4.**-keeppublicclass*extendsandroid.support.v7.**-keeppublicclass*extendsandroid.support.annotation.**#保留R下面的资源-keepclass**.R$*{*;}#保留四大组件,自定义的Application等这些类不被混淆-keeppublicclass*extendsandroid.app.Activity-keeppublicclass*extendsandroid.app.Appliction-keeppublicclass*extendsandroid.app.Service-keeppublicclass*extendsandroid.content.BroadcastReceiver-keeppublicclass*extendsandroid.content.ContentProvider-keeppublicclass*extendsandroid.preference.Preference-keeppublicclasscom.android.vending.licensing.ILicensingService#保留在Activity中的方法参数是view的方法,#这样以来我们在layout中写的onClick就不会被影响-keepclassmembersclass*extendsandroid.app.Activity{publicvoid*(android.view.View);}#对于带有回调函数的onXXEvent、**On*Listener的,不能被混淆-keepclassmembersclass*{void*(**On*Event);void*(**On*Listener);}#保留本地native方法不被混淆-keepclasseswithmembernamesclass*{nativemethods}#保留枚举类不被混淆-keepclassmembersenum*{publicstatic**[]values();publicstatic**valueOf(java.lang.String);}#保留Parcelable序列化类不被混淆-keepclass*implementsandroid.os.Parcelable{publicstaticfinalandroid.os.Parcelable$Creator*;}-keepclassmembersclass*implementsjava.io.Serializable{staticfinallongserialVersionUID;privatestaticfinaljava.io.ObjectStreamField[]serialPersistentFields;privatevoidwriteObject(java.io.ObjectOutputStream);privatevoidreadObject(java.io.ObjectInputStream);java.lang.ObjectwriteReplace();java.lang.ObjectreadResolve();}#assumenosideeffects:删除android.util.Log输出的日志-assumenosideeffectsclassandroid.util.Log{publicstatic***v(...);publicstatic***d(...);publicstatic***i(...);publicstatic***w(...);publicstatic***e(...);}#保留Keep注解的类名和方法-keep,allowobfuscation@interfaceandroid.support.annotation.Keep-keep@android.support.annotation.Keepclass*-keepclassmembersclass*{@android.support.annotation.Keep*;}#3D地图V5.0.0之前:-dontwarncom.amap.api.**-dontwarncom.autonavi.**-keepclasscom.amap.api.**{*;}-keepclasscom.autonavi.**{*;}-keepclasscom.amap.api.maps.**{*;}-keepclasscom.autonavi.amap.mapcore.*{*;}-keepclasscom.amap.api.trace.**{*;}#3D地图V5.0.0之后:-keepclasscom.amap.api.maps.**{*;}-keepclasscom.autonavi.**{*;}-keepclasscom.amap.api.trace.**{*;}#定位-keepclasscom.amap.api.location.**{*;}-keepclasscom.amap.api.fence.**{*;}-keepclasscom.autonavi.aps.amapapi.model.**{*;}#搜索-keepclasscom.amap.api.services.**{*;}#2D地图-keepclasscom.amap.api.maps2d.**{*;}-keepclasscom.amap.api.mapcore2d.**{*;}#导航-keepclasscom.amap.api.navi.**{*;}-keepclasscom.autonavi.**{*;}#Retaingenerictypeinformationforusebyreflectionbyconvertersandadapters.-keepattributesSignature#Retainservicemethodparameterswhenoptimizing.-keepclassmembers,allowshrinking,allowobfuscationinterface*{@retrofit2.http.*methods}#Ignoreannotationusedforbuildtooling.-dontwarnorg.codehaus.mojo.animal_sniffer.IgnoreJRERequirement#IgnoreJSR305annotationsforembeddingnullabilityinformation.-dontwarnjavax.annotation.**#JSR305annotationsareforembeddingnullabilityinformation.-dontwarnjavax.annotation.**#Aresourceisloadedwitharelativepathsothepackageofthisclassmustbepreserved.-keepnamesclassokhttp3.internal.publicsuffix.PublicSuffixDatabase#AnimalSniffercompileOnlydependencytoensureAPIsarecompatiblewitholderversionsofJava.-dontwarnorg.codehaus.mojo.animal_sniffer.*#OkHttpplatformusedonlyonJVMandwhenConscryptdependencyisavailable.-dontwarnokhttp3.internal.platform.ConscryptPlatform#fastjson混淆-keepattributesSignature-dontwarncom.alibaba.fastjson.**-keepclasscom.alibaba.**{*;}-keepclasscom.alibaba.fastjson.**{*;}-keeppublicclasscom.ninstarscf.ld.model.entity.**{*;}

所有文章参考

android官方素材,android Studio 中文社区相关推荐

  1. Android Studio 中文社区

    本篇博文主要是方便博主在电脑不方便翻墙的情况下快速找到下载Android Studio 软件的链接. 提供Android开发中文教程以及各版本Android Studio开发工具的下载 http:// ...

  2. android官方下载,android studio2.2下载

    android studio2.2版是款专门为安卓开发的程序员们打造的编程环境配置工具.他可以帮助用户轻松打造一个安卓的友好编程环境,同时还提供布局编辑器.图像捕捉工具.Gradle的构建支持等多项辅 ...

  3. android官方wifidemo,Android应用开发:连接指定Wifi的Demo分享

    本文主要向大家介绍Android应用开发,给定App相应SSID及密码,连接指定WIFI,希望对大家学习Android应用开发有所帮助. 1.MainActivity.java包含工具类WifiAdm ...

  4. android官方文档翻译,Android API Guide:Search 中文翻译

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 搜索,是安卓的一个核心功能.用户可以搜索他们所有能获得的数据,无论这些内容在设备上或者在网络上. Search Over ...

  5. android room 线程,Android协程——RoomCoroutines-Go语言中文社区

    在Room2.1版本中提供了对协程的支持.Dao层的方法可以被suspend标记来确保他们在主线程中被执行.接下来,我们就来看看如何使用并为它写一个简单的单元测试. 为你的数据库加点suspendin ...

  6. android官方wifidemo,Android连接指定Wifi的Demo

    给定App相应SSID及密码,连接指定WIFI. 1.MainActivity.java包含工具类WifiAdmin package com.example.connectwifi; import j ...

  7. MongoDB中文社区年终盛典

    2017年, Mongoing中文社区携手海量数据学院走进了8座城市, 从花香四溢的暖春走到了寒意凛然的初冬. 2018年的1月, 我们将在帝都举办Mongoing中文社区的年终盛会. 届时 众多技术 ...

  8. android studio 驼峰,android studio 高级设置--驼峰选择,命名前缀,快速导包,Log 颜色等等-Go语言中文社区...

    本文主要内容来自 Dmytro Danylyk 在 Medium 的文章Configuring Android Studio.在此感谢!虽然使用Android Studio 的朋友有一点帮助. 前面的 ...

  9. Android Studio中文语言包失效

    Android Studio中文语言包失效[2022/5/4] 1-版本 2-解决方案 1-版本 Android Studio Bumblebee | 2021.1.1 Patch 2-解决方案 下载 ...

  10. Android Studio重构之路,我们重新来了解一下Google官方的Android开发工具

    Android Studio重构之路,我们重新来了解一下Google官方的Android开发工具 记得我的第一篇博客就是写Android Studio,但是现在看来还是有些粗糙了,所有重构了一下思路, ...

最新文章

  1. okhttp面试: Socket
  2. 算法--腾讯面试:单词游戏,谁会赢?
  3. 个人博客系统的设计与实现_一款小而美的博客系统,专为程序员设计
  4. 2021年兰州师大附中高考成绩查询,2021年兰州重点高中名单及排名,兰州高中高考成绩排名榜...
  5. InputStream和Reader,FileInputStream和 FileReader的区别
  6. python图片分类毕业设计成果报告书_毕业设计成果报告书模板.doc
  7. 机器学习--线性回归4(线性拟合、局部线性拟合实战)
  8. 获取cookies的简单代码(总结待续)
  9. 融云server sdk java_开源项目索引
  10. 【Tableau Server 企业日常问题 21】Tableau Mobile 安卓apk 下载 (可以手机预览)
  11. Python逻辑判断顺序
  12. 路飞学城-Python开发-第一章
  13. Python将txt数据写入excel【分列】
  14. an tu tu html5 test,2016年中考英语试题感叹句专项练习题
  15. 企业为什么要通过直播来做营销呢?
  16. 背景图片和颜色混合叠加多种混合模式
  17. 【验证码功能合集】vue简单实现验证码功能,纯前端实现验证码,拿来即用【输入,滑动,拼图】
  18. mtk8735 mtk8163 mtk8127 mtk6735量产方案 核心板方案 mtk系列平台
  19. vb 打开sdf数据_VB中的ComboBox你真的会用吗?
  20. 关于公司奖惩制度的想法

热门文章

  1. 入职后发现公司有这5种情况,别留恋,果断离职
  2. 再见Navicat! IDEA的这个兄弟真的很香!我粉了...
  3. 简述负载均衡CDN技术
  4. 计算机“复制粘贴”之父去世
  5. 阿里云10 PB+/天的日志系统设计和实现
  6. 运维工程师姓什么很重要!请别叫我“X工”
  7. 前端 如何获取response headers 中的set-cookie:_如何使用moco框架搭建接口mock服务
  8. Python天天学_03_基础三
  9. 海洋工作室成立啦!!
  10. 快速浏览Silverlight3 beta:鸡肋一样的WritableBitmap