没用的代码可以删除, 没用的资源文件当然也可以删除。只需要设置 gradle 属性 shrinkResources 为true 即可启用该功能。
build.gradle
Java
android { ... buildTypes { release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }}
android { ... buildTypes { release { minifyEnabledtrue shrinkResourcestrue proguardFilesgetDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }}
如果有些资源被误删了,在代码中有使用(通过反射),则可以通过 tools:keep 属性来保留这些资源。为了方便管理,还可以创建一个单独的文件来保留所有需要保留的资源,类似于 ProGuard 的配置文件:
res/raw/keep.xml
XHTML
<?xml version="1.0" encoding="utf-8"?><resources xmlns:tools="http://schemas.android.com/tools" tools:keep="@layout/l_used*_c,@layout/l_used_a,@layout/l_used_b*"/>
<?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 属性来删除之前保留的属性
res/raw/keep.xml
XHTML
<?xml version="1.0" encoding="utf-8"?><resources xmlns:tools="http://schemas.android.com/tools" tools:shrinkMode="safe" tools:discard="@layout/unused2"/>
<?xmlversion="1.0" encoding="utf-8"?><resourcesxmlns:tools="http://schemas.android.com/tools" tools:shrinkMode="safe" tools:discard="@layout/unused2"/>
在 tools 网站上 详细解释了如何通过log 查看资源清理以及 safe 和 strict 清理模式的区别。
当然了,如果你发现有大量的资源文件没有用, 为了保持文件整洁,你最好还是手工自己把这些文件删除掉吧。
使用 ResConfigs 来删除没用的配置种类
各种第三方库都把字符串资源翻译成了各种语言,例如 Support Library 和 Google Play Services 就支持几十种语言。但是在你的应用中可能只支持一种或者几种语言,可以通过 resConfigs 选项来告诉编译器,你的应用只支持这些配置的语言,其他语言资源不会被编译到最终的 apk 文件中:
build.gradle
Java
android { defaultConfig { ... resConfigs "en", "zh" }}
android { defaultConfig { ... resConfigs "en", "zh" }}
上面的配置只保留中文和英文资源文件, 其他资源文件都不会包含在最终的 apk 文件中。
注意,在 resConfigs 中只能定义一种屏幕密度属性,对于不同屏幕密度的处理可以使用后面即将结束的 分屏幕发布不同版本的功能。
resources.arsc 中的松散配置项问题
本节讨论的问题一般是针对大型项目的,这些项目使用了成千上万个资源文件。
如果你发现 resources.arsc 文件占用的空间非常多,多的不太合理,则很有可能就是松散配置项引起的。 下面通过例子来看看引起该问题的原因:
假设在默认的字符串配置文件 (values/strings.xml)中有 5 个字符串。这 5 个字符串的值会定义在一个字符串池中,每个字符串的标识符和对应的池地址会保存在其他地方。那么这 5 个字符串 最后编译到 resources.arsc 中的内容类似如下所示:
Java
String pool: "My App", "Hello", "Exit", "Settings", "Feature" Default config: string/myapp 0x00000001string/hello 0x00000002string/exit 0x00000003string/settings 0x00000004string/feature 0x00000005
String pool: "My App", "Hello", "Exit", "Settings", "Feature" Default config: string/myapp 0x00000001string/hello 0x00000002string/exit 0x00000003string/settings 0x00000004string/feature 0x00000005
现在,假设你在应用中添加了一个新的功能,并且该功能仅仅在 api 21+ 之上存在。该新功能需要显示一个不同的字符串内容,那么你选择在 values-v21/strings.xml 中添加一个字符串。
仅仅添加了一个新的 v21 字符串,则 resources.arsc 的内容将会变成下面这个样子:
Java
String pool: "My App", "Hello", "Exit", "Settings", "Feature", "New feature" Default config: -v21 config:string/myapp 0x00000001 NO_ENTRYstring/hello 0x00000002 NO_ENTRYstring/exit 0x00000003 NO_ENTRYstring/settings 0x00000004 NO_ENTRYstring/feature 0x00000005 0x00000006 ========== ==========Config size: 20 bytes **20 bytes!**
String pool: "My App", "Hello", "Exit", "Settings", "Feature", "New feature" Default config: -v21config:string/myapp 0x00000001 NO_ENTRYstring/hello 0x00000002 NO_ENTRYstring/exit 0x00000003 NO_ENTRYstring/settings 0x00000004 NO_ENTRYstring/feature 0x00000005 0x00000006 ========== ==========Configsize: 20 bytes **20 bytes!**
每个配置项都占用了所有资源文件的空间,虽然实际上在 v21 中其他字符串指向的地址为 null 但是仍然会占用同样的字节数。每个标识符 4个字节。
如果你的应用中有很多不同的配置项,比如 -v21、 -land 、 -en-land-v21 等。则会多占用不少的空间。
假设在实际场景中,一个应用有 3500 个字符串,但是有一个特殊的字符串单独定义在另外一种配置项中,然后改字符串需要翻译为其他 50 种语言(也就是说将会有类似 values-en-land, -pl-land, -de-land, -fr-land… 等 50个目录),这样会多占用如下的空间:
4 bytes * 3500 null entries * 50 languages = 700 kilobytes
如果你把这个特殊的字符串给删除了,则就可以节省 700KB的空间。 有些大型项目仅仅删除了 3 个资源就可以节省 2.5M 的空间。
针对这种特殊的情况,如果你发现仅仅几个字符串的添加就导致 apk 文件变得很大,则你可以考虑在默认配置项中定义这些特殊的字符串,然后在运行的时候,根据系统配置动态的选择使用哪个字符串。
资源 id 混淆
资源 id 一般也有很长的名字,比如 xxx_xxxx.png ,如果可以像混淆代码一样把资源文件也给混淆了,则同样可以减少 resources.arsc 文件的大小,可以使用 DexGuard或者 微信团队的 资源混淆器来实现这个功能。关于资源混淆的原理,可以 参考这里。

WebDevelopmentReliesonHtml, CSS 및 JavaScript : 1) HtmlStructuresContent, 2) CSSSTYLESIT, 및 3) JAVASCRIPTADDSINGINTERACTIVITY, BASISOFMODERNWEBEXPERIENCES를 형성합니다.

HTML의 역할은 태그 및 속성을 통해 웹 페이지의 구조와 내용을 정의하는 것입니다. 1. HTML은 읽기 쉽고 이해하기 쉽게하는 태그를 통해 컨텐츠를 구성합니다. 2. 접근성 및 SEO와 같은 시맨틱 태그 등을 사용하십시오. 3. HTML 코드를 최적화하면 웹 페이지로드 속도 및 사용자 경험이 향상 될 수 있습니다.

"Code"는 "Code"BroadlyIncludeLugageslikeJavaScriptandPyThonforFunctureS (htMlisAspecificTypeofCodeFocudecturecturingWebContent)

HTML, CSS 및 JavaScript는 웹 개발의 세 가지 기둥입니다. 1. HTML은 웹 페이지 구조를 정의하고 등과 같은 태그를 사용합니다. 2. CSS는 색상, 글꼴 크기 등과 같은 선택기 및 속성을 사용하여 웹 페이지 스타일을 제어합니다.

HTML은 웹 구조를 정의하고 CSS는 스타일과 레이아웃을 담당하며 JavaScript는 동적 상호 작용을 제공합니다. 세 사람은 웹 개발에서 의무를 수행하고 화려한 웹 사이트를 공동으로 구축합니다.

HTML은 간단하고 배우기 쉽고 결과를 빠르게 볼 수 있기 때문에 초보자에게 적합합니다. 1) HTML의 학습 곡선은 매끄럽고 시작하기 쉽습니다. 2) 기본 태그를 마스터하여 웹 페이지를 만들기 시작하십시오. 3) 유연성이 높고 CSS 및 JavaScript와 함께 사용할 수 있습니다. 4) 풍부한 학습 리소스와 현대 도구는 학습 과정을 지원합니다.

anexampleStartingtaginhtmlis, whithbeginsaparagraph.startingtagsareessentialinhtmlastheyinitiate rements, definetheirtypes, andarecrucialforstructurituringwebpages 및 smanstlingthedom.

메뉴에서 점선 분할 효과를 설계하는 방법은 무엇입니까? 메뉴를 설계 할 때는 일반적으로 접시 이름과 가격 사이에 왼쪽과 오른쪽을 정렬하는 것이 어렵지 않지만 점선 또는 중간의 점은 어떻습니까?


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.
