Android에서 app 다이어트 방법

10511 단어 앱 다이어트
App 다이어트 개념
앱 슬림은 앱 기능을 줄이지 않는 전제에서 일부 기법을 통해 포장된 apk체의 부피를 최대한 줄이는 것을 말한다.이렇게 하는 장점은 몇 가지가 있다. 바로 사용자의 다운로드 속도를 가속화하고 사용자의 다운로드 데이터를 절약하며 사용자의 다운로드 체험을 향상시키는 것이다.다이어트를 하지 않으면 기본적으로 포장된 apk는 사용하지 않은 원본 코드, 자원 파일 등을 모두 포함하여 apk의 부피를 크게 증가시킵니다.
App 다이어트에 대한 일반적인 팁
첫 번째:build. 설정gradle 파일, 미니fy Enabled를 엽니다. 혼동 압축 모드를 사용하면 프로젝트 전체에 사용되지 않는jar와class 파일을 필터하고 코드를 혼동하여 dex 파일의 크기를 줄일 수 있습니다.
하지만 사진 자원을 줄일 수는 없다.
buildTypes {
     //      
     releaseMinifyEnabled {
     //  dex     ,      jar class  
     minifyEnabled true
     proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'
     }
     //  release    
     release {
     minifyEnabled false
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
     }
} 

1
2
3
4
5
6
7
8
9
10
11
12
13
두 번째:build.gradle 파일,shrink Resources를 열면res 디렉터리에 사용되지 않은 그림 파일을 특수 처리하는 역할을 합니다. 구체적인 방법은res 디렉터리의 크기를 줄이는 것입니다.
미니fyEnabled의 부족한 부분을 보완합니다.구체적인 방법은 다음과 같다:
    shrinkResources {
        //  res    ,              1x1   ,      
        shrinkResources true
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }

1
2
3
4
5
6
세 번째:build.gradle 파일,resConfigs를 지정합니다. 패키지를 지정할 때 컴파일된 언어 패키지 형식을 지정합니다. 지정하지 않은 다른 언어 패키지는 apk 파일에 패키지되지 않고 apk 부피의 크기를 줄일 수 있습니다.일반적으로 우리는 중국어와 영어만 지원한다.
    defaultConfig {
         applicationId "com.example.lxj.appthin"
         minSdkVersion 14
         targetSdkVersion 24
         versionCode 1
         versionName "1.0"
         //            ,     value  ,           
         resConfigs("zh")
    }  

1
2
3
4
5
6
7
8
9
네 번째: 삼자 도구(예를 들어tinypng)를 사용하여 프로젝트 중의 모든 png 그림을 압축하고 apk 부피를 줄인다.
먼저tinypng 사이트를 열고 프로젝트 중의 png 이미지를 웹 페이지에 끌어당겨 자동으로 압축한다.
그리고 압축된 모든 그림을 다운로드하여 항목에 대응하는 png 그림을 교체한다.
총괄: 이 방식은 그림의 부피를 크게 줄일 수 있고 기본적으로 50% 정도 줄일 수 있으며 효과가 매우 현저하므로 강력하게 파악해야 한다.

다섯 번째: png과 jpg 형식의 그림을 웹p 형식의 그림으로 바꿉니다
웹p 개념:
WebP 포맷, 구글이 개발한 그림 불러오는 속도를 높이기 위한 그림 포맷사진 압축 크기는 JPEG의 약 3분의 2에 불과하며 서버 대역폭 자원과 데이터 공간을 많이 절약할 수 있다.페이스북 이베이 등 유명 사이트에서는 이미 웹P 포맷을 테스트해 사용하고 있으며, 국내 징둥(京東), 타오바오 클라이언트가 모두 사용하고 있다.웹p 포맷은 미래 그림 포맷의 추세입니다.
서버에 대해 말하자면 웹p 포맷은 반드시 사용해야 하는 포맷이라고 할 수 있다.클라이언트의 경우 비교적 큰 png 그림을 웹p 형식으로 바꾸어 apk의 부피를 줄일 수 있다.

어떻게 웹p 형식의 그림을 얻을 수 있습니까?
미용사들이 그림을 그릴 때 웹p 포맷을 직접 만들 수 있는 방법은 두 가지가 있다.일부 웹p 형식 변환 도구를 사용하여 현재 있는 png 그림을 변환할 수도 있습니다.

어떻게 웹 p 형식의 그림을 프로젝트에 적용합니까?
웹 p 형식의 그림을 프로젝트의 png 그림으로 바꾸면 됩니다.

웹p 사용 주의사항
Android4.0 이상이어야 웹p 포맷을 지원하지만, 이것은 영향을 주지 않습니다. 왜냐하면 우리가 개발할 때의minSDK는 14이기 때문에 끄지 않아도 됩니다

여섯 번째: 자원을 사용하는 것은 가장 기본적인 규칙이지만 매우 중요하다.절대 대수 APP의 경우 설계도 한 세트만 가지면 충분하다.현재 해상도 추세를 감안하여 720p의 자원을 가져와 xhdpi 디렉터리에 넣는 것을 권장합니다.여러 세트의 자원에 비해 720P의 한 세트의 자원만 사용하면 시각적으로 차이가 크지 않다. 많은 대기업의 제품도 그렇지만 자원의 점용 크기를 현저하게 줄일 수 있고 디자이너의 도면 제작 작업량을 줄일 수 있다.xhdpi가 아닌 디렉터리를 모두 삭제하는 것이 아니라 디자인 자원을 보존하면 충분하다는 것을 강조합니다.
제7조: jpg 포맷을 사용하면 비투명한 큰 그림에 대해 png의 크기보다 현저한 장점을 가진다. 절대적인 것은 아니지만 보통 절반이 넘는다.시작 페이지, 이벤트 페이지 등 큰 그림 전시 구역에서jpg를 사용하는 것은 현명한 선택이 될 것이다.
제8조: 축소 큰 그림은 상술한 절차를 거친 후에 당신의 공사 안에 큰 그림이 있습니다. 이런 큰 사이즈를 유지할 필요가 있는지, 적당히 축소할 수 있는지 고려하세요.사실 디자이너가 그림을 그리는 원인으로 인해 우리가 얻은 많은 그림은 충분히 적절하게 축소할 수 있고 시각에 미치는 영향은 극히 적다제9조: 제3고를 덮어쓰는 큰 그림은 몇몇 제3고에서 큰 그림을 인용했지만 실제로는 우리가 사용하지 않기 때문에 1x1의 투명한 그림으로 덮어쓰는 것을 고려할 수 있다.당신의drawable에 엉뚱한 이름의 1x1 그림이 포함되어 있기 때문에... 제10조:armable-v7 패키지의 so를 삭제하는 것은 기본적으로armable의 so도armable-v7을 호환하는 것이기 때문에armable-v7a의 라이브러리는 도형 렌더링에 큰 변화가 있을 것입니다. 이 방면의 요구가 없으면 간소화할 수 있습니다.여기에 극소수의 설비가 Crash를 할 수 있다는 것을 배제하지 않습니다. 다른 so와 일정한 관계가 있을 수 있으니 반드시 테스트를 주도면밀하게 한 후에 발표해 주십시오.제11조: x86 가방 아래의 so를 삭제하는 것은 제10조와 달리 x86 가방 아래의 so는 x86 모델의 휴대전화에 필요한 것이기 때문에 만약에 제품이 이 방면의 요구를 사용하지 않으면 간소화할 수 있다.실제 작업의 설정은armable,armable-x86의 so 파일만 보존하는 것으로 절충된 방안입니다.
제12조: 위챗 자원 압축 패키지 도구인 위챗 자원 압축 패키지 도구를 사용하여 짧은 자원 이름을 통해 7zip을 이용하여 앱을 극도로 압축하여 앱을 줄이는 목표를 실현하는데 효과가 매우 좋으므로 강력히 추천한다.상세 참고: 안드로이드 자원 혼동 도구 사용 설명 원리 소개: 설치 패키지 입감 1M – 위챗 안드로이드 자원 혼동 패키지 도구는 7zip을 켜는 것을 권장합니다. 화이트 리스트의 설정에 주의하십시오. 그렇지 않으면 일부 자원을 찾을 수 없습니다. 공식적으로 AndResGuard를gradle에 발표했습니다. 매우 편리합니다.
apply plugin: 'AndResGuard'
buildscript {
    dependencies {
        classpath 'com.tencent.mm:AndResGuard-gradle-plugin:1.1.7'
    }
}
andResGuard {
    mappingFile = null
    use7zip = true
    useSign = true
    keepRoot = false
// add .R.drawable.icon into whitelist.
// because the launcher will get thgge icon with his name
    def packageName = 
            whiteList = [
//for your icon
packageName + ".R.drawable.icon",
//for fabric
packageName + ".R.string.com.crashlytics.*",
//for umeng update
packageName + ".R.string.umeng*",
packageName + ".R.string.UM*",
packageName + ".R.string.tb_*",
packageName + ".R.layout.umeng*",
packageName + ".R.layout.tb_*",
packageName + ".R.drawable.umeng*",
packageName + ".R.drawable.tb_*",
packageName + ".R.anim.umeng*",
packageName + ".R.color.umeng*",
packageName + ".R.color.tb_*",
packageName + ".R.style.*UM*",
packageName + ".R.style.umeng*",
packageName + ".R.id.umeng*"
    ]
    compressFilePattern = [
            "*.png",
            "*.jpg",
            "*.jpeg",
            "*.gif",
            "resources.arsc"
    ]
    sevenzip {
        artifact = 'com.tencent.mm:SevenZip:1.1.7'
//path = "/usr/local/bin/7za"
    }
}
andresguard/resguard의Task를 생성하여release 서명을 자동으로 읽고 다시 혼동하여 포장합니다.
제13조:provided 컴파일을 사용하면 일부 라이브러리는 필요에 따라 동적으로 불러옵니다. 일부 버전에서는 필요하지 않을 수도 있지만 코드를 제거하기가 불편합니다. 그렇지 않으면 컴파일할 수 없습니다.provided를 사용하면 코드가 통과되는 것을 보장할 수 있지만 실제 패키지에서 이 제3자 라이브러리를 인용하지 않아 앱의 크기를 제어하는 목표를 실현했다.그러나 개발자 스스로 이 제3자 라이브러리를 인용하지 않을 때 관련 코드를 실행하지 말고 앱이 붕괴되지 않도록 판단해야 한다.제14조: shape 배경을 사용한다. 특히 편평화가 성행하는 현재 순수한 색의 점차적인 원각 이미지는 shape로 실현할 수 있고 코드가 유연하고 제어가 가능하며 대량의 배경 이미지를 절약할 수 있다.제15조: 착색 방안을 사용하면 당신의 프로젝트에도 많은 selector 파일이 있을 거라고 믿습니다. 비슷한 그림도 많지만 색깔이 다르기 때문에 착색 방안을 통해 우리는 이러한 작업량을 크게 줄이고 이런 파일을 줄일 수 있습니다.android support 라이브러리를 빌려 전체 버전이 호환되는 착색 방안을 실현할 수 있습니다. 참고 코드: Drawable Less.자바 제16조: 온라인화 소재 라이브러리: 만약에 당신의 앱이 소재 라이브러리(예를 들어 채팅 이모티콘)를 지원한다면 온라인 탑재 모델을 고려하세요. 왜냐하면 소재 라이브러리는 적지 않은 부피가 있기 때문입니다.이 단계는 개발자가 온라인 로딩을 실현해야 한다. 코드의 복잡도를 높이면서 앱의 데이터 소모를 높일 수 있기 때문에 적절하게 선택할 것을 권장한다.제17조: 중복 라이브러리를 피하고 중복 라이브러리를 피하는 것은 당연한 일이지만 비밀은 항상 깊게 숨겨져 있다. 당신이 인용한 제3자 라이브러리가 어느 제3자 라이브러리를 인용했는지 조심해야 한다. 그러면 기능이 중복된 라이브러리가 쉽게 나타난다. 예를 들어 두 개의 이미지 로드 라이브러리를 사용했다. 그것이 바로 Glide와 Picasso이다.exploded-aar 디렉토리와 External Libraries를 보거나 생성된 APK를 역컴파일하여 중복 라이브러리 크기를 최소화하고 APP 크기를 줄입니다.제18조: 더 작은 라이브러리와 같은 기능을 사용하는 라이브러리는 크기가 다르고 심지어 현격한 차이가 크다.만약에 특정한 라이브러리에 대한 특별한 수요가 없고 앱의 크기에 대한 엄격한 요구가 없다면 같은 기능을 가진 제3자 라이브러리의 크기를 비교하고 더 작은 라이브러리를 선택하면 앱의 크기를 줄일 수 있다.제19조: 플러그인화를 지원한 지난 1년 동안 플러그인화 기술은 우후죽순처럼 등장했다. 이런 기술은 동적 로드 코드와 동적 로드 자원을 지원하여 앱의 일부분을 분리했다. 업무가 방대한 프로젝트에 있어 매우 유용하고 앱의 크기를 크게 분해했다.플러그인화 기술은 일정한 기술 보장과 서버 시스템 지원이 필요하기 때문에 일정한 위험이 있다. 예를 들어 필요(예를 들어 일부 소형 프로젝트, 확장 업무도 없다) 없으면 필요하지 않기 때문에 적당히 선택할 것을 권장한다.제20조: 간소화 업무는 전적으로 업무 수요에 달려 있다.통계 데이터 분석을 통해 일부 쓸모없는 기능을 없애는 것은 충분히 가능하다. 심지어 아예 화려한 기능을 없애고 경담판, 극속판을 내놓는 것도 안 되는 것이 아니다.

좋은 웹페이지 즐겨찾기