android官方素材,android Studio 中文社区
=("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 中文社区相关推荐
- Android Studio 中文社区
本篇博文主要是方便博主在电脑不方便翻墙的情况下快速找到下载Android Studio 软件的链接. 提供Android开发中文教程以及各版本Android Studio开发工具的下载 http:// ...
- android官方下载,android studio2.2下载
android studio2.2版是款专门为安卓开发的程序员们打造的编程环境配置工具.他可以帮助用户轻松打造一个安卓的友好编程环境,同时还提供布局编辑器.图像捕捉工具.Gradle的构建支持等多项辅 ...
- android官方wifidemo,Android应用开发:连接指定Wifi的Demo分享
本文主要向大家介绍Android应用开发,给定App相应SSID及密码,连接指定WIFI,希望对大家学习Android应用开发有所帮助. 1.MainActivity.java包含工具类WifiAdm ...
- android官方文档翻译,Android API Guide:Search 中文翻译
8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 搜索,是安卓的一个核心功能.用户可以搜索他们所有能获得的数据,无论这些内容在设备上或者在网络上. Search Over ...
- android room 线程,Android协程——RoomCoroutines-Go语言中文社区
在Room2.1版本中提供了对协程的支持.Dao层的方法可以被suspend标记来确保他们在主线程中被执行.接下来,我们就来看看如何使用并为它写一个简单的单元测试. 为你的数据库加点suspendin ...
- android官方wifidemo,Android连接指定Wifi的Demo
给定App相应SSID及密码,连接指定WIFI. 1.MainActivity.java包含工具类WifiAdmin package com.example.connectwifi; import j ...
- MongoDB中文社区年终盛典
2017年, Mongoing中文社区携手海量数据学院走进了8座城市, 从花香四溢的暖春走到了寒意凛然的初冬. 2018年的1月, 我们将在帝都举办Mongoing中文社区的年终盛会. 届时 众多技术 ...
- android studio 驼峰,android studio 高级设置--驼峰选择,命名前缀,快速导包,Log 颜色等等-Go语言中文社区...
本文主要内容来自 Dmytro Danylyk 在 Medium 的文章Configuring Android Studio.在此感谢!虽然使用Android Studio 的朋友有一点帮助. 前面的 ...
- Android Studio中文语言包失效
Android Studio中文语言包失效[2022/5/4] 1-版本 2-解决方案 1-版本 Android Studio Bumblebee | 2021.1.1 Patch 2-解决方案 下载 ...
- Android Studio重构之路,我们重新来了解一下Google官方的Android开发工具
Android Studio重构之路,我们重新来了解一下Google官方的Android开发工具 记得我的第一篇博客就是写Android Studio,但是现在看来还是有些粗糙了,所有重构了一下思路, ...
最新文章
- okhttp面试: Socket
- 算法--腾讯面试:单词游戏,谁会赢?
- 个人博客系统的设计与实现_一款小而美的博客系统,专为程序员设计
- 2021年兰州师大附中高考成绩查询,2021年兰州重点高中名单及排名,兰州高中高考成绩排名榜...
- InputStream和Reader,FileInputStream和 FileReader的区别
- python图片分类毕业设计成果报告书_毕业设计成果报告书模板.doc
- 机器学习--线性回归4(线性拟合、局部线性拟合实战)
- 获取cookies的简单代码(总结待续)
- 融云server sdk java_开源项目索引
- 【Tableau Server 企业日常问题 21】Tableau Mobile 安卓apk 下载 (可以手机预览)
- Python逻辑判断顺序
- 路飞学城-Python开发-第一章
- Python将txt数据写入excel【分列】
- an tu tu html5 test,2016年中考英语试题感叹句专项练习题
- 企业为什么要通过直播来做营销呢?
- 背景图片和颜色混合叠加多种混合模式
- 【验证码功能合集】vue简单实现验证码功能,纯前端实现验证码,拿来即用【输入,滑动,拼图】
- mtk8735 mtk8163 mtk8127 mtk6735量产方案 核心板方案 mtk系列平台
- vb 打开sdf数据_VB中的ComboBox你真的会用吗?
- 关于公司奖惩制度的想法
热门文章
- 入职后发现公司有这5种情况,别留恋,果断离职
- 再见Navicat! IDEA的这个兄弟真的很香!我粉了...
- 简述负载均衡CDN技术
- 计算机“复制粘贴”之父去世
- 阿里云10 PB+/天的日志系统设计和实现
- 运维工程师姓什么很重要!请别叫我“X工”
- 前端 如何获取response headers 中的set-cookie:_如何使用moco框架搭建接口mock服务
- Python天天学_03_基础三
- 海洋工作室成立啦!!
- 快速浏览Silverlight3 beta:鸡肋一样的WritableBitmap