찾다
웹 프론트엔드HTML 튜토리얼apk 瘦身系列③:删除没用的资源文件_html/css_WEB-ITnose

没用的代码可以删除, 没用的资源文件当然也可以删除。只需要设置 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或者 微信团队的 资源混淆器来实现这个功能。关于资源混淆的原理,可以 参考这里。

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
HTML, CSS 및 JavaScript 이해 : 초보자 안내서HTML, CSS 및 JavaScript 이해 : 초보자 안내서Apr 12, 2025 am 12:02 AM

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

HTML의 역할 : 웹 컨텐츠 구조HTML의 역할 : 웹 컨텐츠 구조Apr 11, 2025 am 12:12 AM

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

HTML 및 코드 : 용어를 자세히 살펴 봅니다HTML 및 코드 : 용어를 자세히 살펴 봅니다Apr 10, 2025 am 09:28 AM

"Code"는 "Code"BroadlyIncludeLugageslikeJavaScriptandPyThonforFunctureS (htMlisAspecificTypeofCodeFocudecturecturingWebContent)

HTML, CSS 및 JavaScript : 웹 개발자를위한 필수 도구HTML, CSS 및 JavaScript : 웹 개발자를위한 필수 도구Apr 09, 2025 am 12:12 AM

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

HTML, CSS 및 JavaScript의 역할 : 핵심 책임HTML, CSS 및 JavaScript의 역할 : 핵심 책임Apr 08, 2025 pm 07:05 PM

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

HTML은 초보자를 위해 쉽게 배우나요?HTML은 초보자를 위해 쉽게 배우나요?Apr 07, 2025 am 12:11 AM

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

HTML의 시작 태그의 예는 무엇입니까?HTML의 시작 태그의 예는 무엇입니까?Apr 06, 2025 am 12:04 AM

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

메뉴에서 점선 분할 효과의 중심 정렬을 달성하기 위해 CSS의 Flexbox 레이아웃을 사용하는 방법은 무엇입니까?메뉴에서 점선 분할 효과의 중심 정렬을 달성하기 위해 CSS의 Flexbox 레이아웃을 사용하는 방법은 무엇입니까?Apr 05, 2025 pm 01:24 PM

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

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

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

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

mPDF

mPDF

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

DVWA

DVWA

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

SecList

SecList

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

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

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