AAPT 처리 자원 apk 패키지 사용 하기

AAPT 도구 소개
다음은"http://www.androidcn.net/wiki/index.php/Reference/aapt소개
aapt stands for Android Asset Packaging Tool and is included in the tools/directory of the SDK.This tool allows you to view,create,and update Zip-compatible archives(zip,jar,apk).It can also compile resources into binary assets.aapt 즉 Android Asset Packaging Tool 은 SDK 의 tools/디 렉 터 리 에서 볼 수 있 고,만 들 수 있 으 며,ZIP 형식의 문서 첨부 파일(zip,jar,apk)을 업데이트 합 니 다.자원 파일 을 바 이 너 리 파일 로 컴 파일 할 수도 있 습 니 다.though you probably won't often use aapt directly,build scripts and IDE plugins can utile this tool to package the apk file that constitutes an Android application.aapt 도 구 를 직접 사용 하지 않 았 을 수도 있 지만,그러나 build scripts 와 IDE 플러그 인 은 이 도 구 를 사용 하여 apk 파일 을 포장 하여 안 드 로 이 드 응용 프로그램 을 구성 합 니 다.For more usage details,open a terminal,go to the tools/directory,and run the command:더 많은 실 용적 인 정 보 를 얻 으 려 면 터미널 콘 솔 을 열 고 tools/디 렉 터 리 에서 명령 을 실행 하 십시오:Linux or Mac OS X:  ./aaptWindows:aapt.exe
TOPAPT 의 도움말 정보
상기 명령 을 실행 하면 콘 솔 에서 해당 aapt 정 보 를 보 냅 니 다.
Android Asset Packaging Tool

Usage:
 aapt l[ist] [-v] [-a] file.{zip,jar,apk}
   List contents of Zip-compatible archive.

 aapt d[ump] WHAT file.{apk} [asset [asset ...]]
   badging          Print the label and icon for the app declared in APK.
   permissions      Print the permissions from the APK.
   resources        Print the resource table from the APK.
   configurations   Print the configurations in the APK.
   xmltree          Print the compiled xmls in the given assets.
   xmlstrings       Print the strings of the given compiled xml assets.

 aapt p[ackage] [-f][-u][-m][-v][-x][-M AndroidManifest.xml] /
        [-0 extension [-0 extension ...]] /
        [-I base-package [-I base-package ...]] /
        [-A asset-source-dir] [-P public-definitions-file] /
        [-S resource-sources] [-F apk-file] [-J R-file-dir] /
        [raw-files-dir [raw-files-dir] ...]

   Package the android resources.  It will read assets and resources that are
   supplied with the -M -A -S or raw-files-dir arguments.  The -J -P -F and -R
   options control which files are output.

 aapt r[emove] [-v] file.{zip,jar,apk} file1 [file2 ...]
   Delete specified files from Zip-compatible archive.

 aapt a[dd] [-v] file.{zip,jar,apk} file1 [file2 ...]
   Add specified files to Zip-compatible archive.

 aapt v[ersion]
   Print program version.

 Modifiers:
   -a  print Android-specific data (resources, manifest) when listing
   -c  specify which configurations to include.  The default is all
       configurations.  The value of the parameter should be a comma
       separated list of configuration values.  Locales should be specified
       as either a language or language-region pair.  Some examples:
            en
            port,en
            port,land,en_US
       If you put the special locale, zz_ZZ on the list, it will perform
       pseudolocalization on the default locale, modifying all of the
       strings so you can look for strings that missed the
       internationalization process.  For example:
            port,land,zz_ZZ
   -d  one or more device assets to include, separated by commas
   -f  force overwrite of existing files
   -j  specify a jar or zip file containing classes to include
   -m  make package directories under location specified by -J
   -u  update existing packages (add new, replace older, remove deleted files)
   -v  verbose output
   -x  create extending (non-application) resource IDs
   -z  require localization of resource attributes marked with
       localization="suggested"
   -A  additional directory in which to find raw asset files
   -F  specify the apk file to output
   -I  add an existing package to base include set
   -J  specify where to output R.java resource constant definitions
   -M  specify full path to AndroidManifest.xml to include in zip
   -P  specify where to output public resource definitions
   -S  directory in which to find resources
   -0  specifies an additional extension for which such files will not
       be stored compressed in the .apk.  An empty string means to not
       compress any files at all.

상기 도움말 정보 에 따라 aapt 로 다음 작업 을 사용 할 수 있 습 니 다.
TOP AAPT 버 전 보기
 ./aapt v

현재 도구 버 전 가 져 오기:
Android Asset Packaging Tool, v0.2

TOP 은 AAPT 를 사용 하여 자원 패키지(.apk)파일 목록 을 보 여 줍 니 다.
 aapt l[ist] [-v] [-a] file.{zip,jar,apk}
   List contents of Zip-compatible archive.

시스템 자원 패키지 의 내용 을 명령 으로 볼 수 있 습 니 다:
./aapt l framework-res.apk
META-INF/MANIFEST.MF
META-INF/CERT.SF
META-INF/CERT.RSA
AndroidManifest.xml
assets/images/android_320x480.png
assets/images/boot_robot.png
assets/images/boot_robot_glow.png

...

assets/webkit/youtube.html
assets/webkit/youtube.png
res/anim/accelerate_decelerate_interpolator.xml
res/anim/accelerate_interpolator.xml
res/anim/app_starting_exit.xml

...

res/raw-de/loaderror.html
res/raw-de/nodomain.html
res/raw/fallbackring.ogg
res/raw/loaderror.html
res/raw/nodomain.html
res/xml-en/autotext.xml
res/xml/apns.xml
res/xml/autotext.xml
res/xml/preferred_time_zones.xml
res/xml/time_zones_by_country.xml
resources.arsc

-v 옵션 을 사용 하면 모든 파일 의 자세 한 정 보 를 출력 합 니 다.
Archive:  framework-res.apk
 Length   Method    Size  Ratio   Date   Time   CRC-32    Name
--------  ------  ------- -----   ----   ----   ------    ----
   76217  Deflate   25576  66%  04-16-08 07:40  3b7140fa  META-INF/MANIFEST.MF
   76259  Deflate   25706  66%  04-16-08 07:40  a21d76be  META-INF/CERT.SF
    1714  Deflate    1156  33%  04-16-08 07:40  ca66d55e  META-INF/CERT.RSA
   31768  Deflate    5556  83%  01-16-09 12:04  8c137ee8  AndroidManifest.xml
    3098  Stored     3098   0%  01-15-09 23:16  ed1132c9  assets/images/android_320x480.png
    1001  Stored     1001   0%  01-15-09 23:16  c53ad035  assets/images/boot_robot.png
    2083  Stored     2083   0%  01-15-09 23:16  12acc29d  assets/images/boot_robot_glow.png

... ...

     340  Deflate     155  54%  01-16-09 12:04  cc2ad7f2  res/anim/accelerate_decelerate_interpolator.xml
     368  Deflate     179  51%  01-16-09 12:04  c94b9323  res/anim/accelerate_interpolator.xml
     568  Deflate     260  54%  01-16-09 12:04  e0972304  res/anim/app_starting_exit.xml

... ...

     605  Deflate     296  51%  01-15-09 23:16  88710568  res/raw-de/loaderror.html
     996  Deflate     471  53%  01-15-09 23:16  c42ea004  res/raw-de/nodomain.html
   10975  Stored    10975   0%  01-15-09 23:16  21dc2fce  res/raw/fallbackring.ogg
     579  Deflate     282  51%  01-15-09 23:16  11c56b88  res/raw/loaderror.html
     890  Deflate     418  53%  01-15-09 23:16  393cf037  res/raw/nodomain.html
   25588  Deflate    5051  80%  01-16-09 12:04  cf7826df  res/xml-en/autotext.xml
     164  Deflate      97  41%  01-16-09 12:04  ee886635  res/xml/apns.xml
     116  Deflate      59  49%  01-16-09 12:04  885f246d  res/xml/autotext.xml
     864  Deflate     312  64%  01-16-09 12:04  65ad9d7e  res/xml/preferred_time_zones.xml
   61044  Deflate   11755  81%  01-16-09 12:04  0bc79a58  res/xml/time_zones_by_country.xml
  747776  Stored   747776   0%  01-16-09 12:04  98f996b3  resources.arsc
--------          -------  ---                            -------
 2246729          1774656  21%                            851 files

-a 옵션 을 사용 하면 위 파일 목록 에서 안 드 로 이 드 가 사용 하 는 기호 표를 출력 합 니 다.
Resource table:
mError=0x0 (Success)
Package Groups (1)
Package Group 0 id=1 packageCount=1 name=android
  Package 0 id=1 name=android typeCount=13
    type 0 configCount=1 entryCount=599
      spec resource 0x01010000 android:attr/theme: flags=0x40000000
      spec resource 0x01010001 android:attr/label: flags=0x40000000
      spec resource 0x01010002 android:attr/icon: flags=0x40000000
      spec resource 0x01010003 android:attr/name: flags=0x40000000
      spec resource 0x01010004 android:attr/manageSpaceActivity: flags=0x40000000
      spec resource 0x01010005 android:attr/allowClearUserData: flags=0x40000000
      spec resource 0x01010006 android:attr/permission: flags=0x40000000
      spec resource 0x01010007 android:attr/readPermission: flags=0x40000000
      spec resource 0x01010008 android:attr/writePermission: flags=0x40000000
      spec resource 0x01010009 android:attr/protectionLevel: flags=0x40000000
      spec resource 0x0101000a android:attr/permissionGroup: flags=0x40000000
... ...

이 기호 표 의 형식 은 좀 더 연구 해 야 알 수 있다- -!
TOP 은 AAPT 로 자원 파일 을 압축 합 니 다.
다음 명령 을 사용 하여 안 드 로 이 드 의 build 시스템 이 framework-res 모듈 을 어떻게 포장 하 는 지 확인 합 니 다.
cd ~/android/src
make -n --debug framework-res

다음은 출력 에서 추출 하 는 관건 적 인 절차 입 니 다.
1.첫 번 째 단 계 는 자원 apk 패 키 지 를 생 성하 고 다음 명령 으로 완성 합 니 다.
out/host/linux-x86/bin/aapt package -z -u -x  -M frameworks/base/core/res/AndroidManifest.xml -S frameworks/base/core/res/res
 -A frameworks/base/core/res/assets  -F out/target/product/generic/obj/APPS/framework-res_intermediates/package.apk

2.두 번 째 단 계 는 생 성 된 자원 팩 에 서명 합 니 다.
java -jar out/host/linux-x86/framework/signapk.jar build/target/product/security/platform.x509.pem build/target/product/secur
ity/platform.pk8 out/target/product/generic/obj/APPS/framework-res_intermediates/package.apk.unsigned out/target/product/gene
ric/obj/APPS/framework-res_intermediates/package.apk.signed

3.세 번 째 단 계 는 생 성 된 가방 을 정렬 처리 합 니 다.
out/host/linux-x86/bin/zipalign -f 4 out/target/product/generic/obj/APPS/framework-res_intermediates/package.apk.unaligned ou
t/target/product/generic/obj/APPS/framework-res_intermediates/package.apk.aligned

이렇게 생 성 된 framework-res.apk 패 키 지 는 system.img 의 자원 패 키 지 를 교체 하 는 데 사용 할 수 있 습 니 다.(CupCake 이전 안정 버 전에 서 테스트 가능)
구체 적 인 절차:
  • 먼저 생 성 된 framework-res.apk 로~/android/src/out/target/produt/generic/system/framework 에 있 는 동명 파일 을 교체 합 니 다.
  • make snod 로 새로운 system.img 을 만 들 고 sdk 디 렉 터 리 의 images/system.img 을 교체 합 니 다
  • -wide-date 매개 변수 로 emulator
  • TOP AAPT 압축 해제 자원 팩 사용(.apk)
    ./aapt d xmltree framework-res.apk res/anim/fade_in.xml
    
    N: android=http://schemas.android.com/apk/res/android
      E: alpha (line=21)
        A: android:interpolator(0x01010141)=@0x10a0006
        A: android:duration(0x01010198)=(type 0x10)0x12c
        A: android:fromAlpha(0x010101ca)=(type 0x4)0x0
        A: android:toAlpha(0x010101cb)=(type 0x4)0x3f800000
    
    ./aapt d xmlstrings framework-res.apk res/anim/fade_in.xml
    
    String #0: interpolator
    String #1: fromAlpha
    String #2: toAlpha
    String #3: duration
    String #4: android
    String #5: http://schemas.android.com/apk/res/android
    String #6:
    String #7: alpha
    

    컴 파일 되 지 않 은 파일 은:
    <alpha xmlns:android="http://schemas.android.com/apk/res/android"
           android:interpolator="@anim/decelerate_interpolator"
           android:fromAlpha="0.0"
           android:toAlpha="1.0"
           android:duration="300" />
    

    해당 R.자바 파일 은:
    package com.android.internal;
    
    public final class R {
        public static final class anim {
            public static final int accelerate_decelerate_interpolator=0x010a0004;
            public static final int accelerate_interpolator=0x010a0005;
            public static final int app_starting_exit=0x010a0007;
            public static final int decelerate_interpolator=0x010a0006;
            public static final int dialog_enter=0x010a0008;
            public static final int dialog_exit=0x010a0009;
    ... ...
    

    기호 표 에서 도 이 색인 값 을 얻 을 수 있 습 니 다.
    resource 0x010a0006 android:anim/decelerate_interpolator: t=0x03 d=0x00001132 (s=0x0008 r=0x00) (PUBLIC)
    

    시스템 이 예약 한 framework/base/core/res/res 디 렉 터 리 의 모델 에 맞 춰/res 파일 을 재 구축 할 수 있 습 니 다.
     
    http://blog.163.com/dangzhengtao@yeah/blog/static/77800874201011821456400/

    좋은 웹페이지 즐겨찾기