Android OS (7.1.2) 빌드 및 Hello World

할 일


  • 안드로이드 7.1.2 소스를 얻고 빌드하고 Nexus9에 씁니다
  • 시작시 "Hello, world!"대화 상자를 표시하도록 사용자 정의

  • 준비



    JDK8 설치
    ぃ tp // 이 m / 니콧 ds /

    소스 코드 다운로드


    $ curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
    $ chmod a+x ~/bin/repo
    $ mkdir -p aosp/7.1.2
    $ cd aosp
    $ ~/bin/repo init -u https://android.googlesource.com/platform/manifest -b android-7.1.2_r17
    $ ~/bin/repo sync
    
    ...
    Checking out files: 100% (6377/6377), done. out files:  26% (1719/6377)   
    Checking out files: 100% (1717/1717), done.
    Checking out files: 100% (44431/44431), done.
    Checking out files: 100% (62/62), done.king out files:  14% (9/62)   
    Checking out files: 100% (1756/1756), done.
    Checking out files: 100% (8484/8484), done.
    Checking out files: 100% (539/539), done.ng out files:  28% (151/539)   
    Checking out files: 100% (15774/15774), done.ut files:   7% (1128/15774)   
    Checking out files: 100% (25/25), done.
    Syncing work tree: 100% (529/529), done. 
    

    소스 빌드



    Java 설정
    $ export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
    $ export PATH=$PATH:$JAVA_HOME/bin
    

    빌드 설정
    $ source build/envsetup.sh 
    $ lunch
    
    Lunch menu... pick a combo:
         1. aosp_arm-eng
         2. aosp_arm64-eng
         3. aosp_mips-eng
         4. aosp_mips64-eng
         5. aosp_x86-eng
         6. aosp_x86_64-eng
         7. full_fugu-userdebug
         8. aosp_fugu-userdebug
         9. mini_emulator_arm64-userdebug
         10. m_e_arm-userdebug
         11. m_e_mips-userdebug
         12. m_e_mips64-eng
         13. mini_emulator_x86-userdebug
         14. mini_emulator_x86_64-userdebug
         15. aosp_dragon-userdebug
         16. aosp_dragon-eng
         17. aosp_marlin-userdebug
         18. aosp_sailfish-userdebug
         19. aosp_flounder-userdebug
         20. aosp_angler-userdebug
         21. aosp_bullhead-userdebug
         22. hikey-userdebug
         23. aosp_shamu-userdebug
    
    Which would you like? [aosp_arm-eng] aosp_flounder-eng ← ビルドしたい端末に合わせて選択(https://forum.xda-developers.com/wiki/Google/Device_Codenames)
    
    ============================================
    PLATFORM_VERSION_CODENAME=REL
    PLATFORM_VERSION=7.1.2
    TARGET_PRODUCT=aosp_flounder
    TARGET_BUILD_VARIANT=eng
    TARGET_BUILD_TYPE=release
    TARGET_BUILD_APPS=
    TARGET_ARCH=arm64
    TARGET_ARCH_VARIANT=armv8-a
    TARGET_CPU_VARIANT=denver64
    TARGET_2ND_ARCH=arm
    TARGET_2ND_ARCH_VARIANT=armv7-a-neon
    TARGET_2ND_CPU_VARIANT=denver
    HOST_ARCH=x86_64
    HOST_2ND_ARCH=x86
    HOST_OS=linux
    HOST_OS_EXTRA=Linux-4.4.0-78-generic-x86_64-with-debian-stretch-sid
    HOST_CROSS_OS=windows
    HOST_CROSS_ARCH=x86
    HOST_CROSS_2ND_ARCH=x86_64
    HOST_BUILD_TYPE=release
    BUILD_ID=NJH47B
    OUT_DIR=out
    ============================================
    

    빌드
    $ make -j8 &> makelog_`date "+%Y%m%d_%H%M%S"`.txt
    

    makelog_20170627_010549.txt
    ...
    [ 99% 49532/49533] host C++: primitives_tests_32 <= system/media/audio_utils/tests/primitives_tests.cpp
    [100% 49533/49533] host Executable: primitives_tests_32 (out/host/linux-x86/obj32/EXECUTABLES/primitives_tests_intermediates/primitives_tests32)
    
    [0;32m#### make completed successfully (02:12:53 (hh:mm:ss)) ####[00m
    

    Android의 FactoryImage를 Nexus9에 씁니다.


  • 대상 단말의 FactoryImage를 아래에서 DL 해 와서 해동
    htps : //에서 ゔぇぺぺrs. 오, ぇ. 코 m / 안 d 로이 d / 메마리 s
    (Nexus9 (flounder)의 7.1.2가 없었기 때문에 7.1.1을 DL했다)
  • 명령 프롬프트에서 "adb reboot bootloader"를 실행
  • 1에서 압축을 푼 파일에있는 flash-all.bat 실행

  • 빌드한 system.img, boot.img 쓰기



    아래 빌드 제품을 씁니다.
    /out/target/product/flounder/system.img
    /out/target/product/flounder/boot.img
    $ adb reboot bootloader
    $ fastboot flash boot <boot.imgのあるフォルダパス>/boot.img
    $ fastboot flash system <system.imgのあるフォルダパス>/system.img
    $ fastboot reboot
    




    Hello, World!



    소스 수정



    시작시 "Hellor, World!"대화 상자를 표시하도록 사용자 정의합니다.

    부팅 완료시 호출되는 ActivityManagerService#finishBooting의 끝에 다음 수정 사항을 넣습니다.


    ActivityManagerService.java
    ...
                    mUserController.sendBootCompletedLocked(
                            new IIntentReceiver.Stub() {
                                @Override
                                public void performReceive(Intent intent, int resultCode,
                                        String data, Bundle extras, boolean ordered,
                                        boolean sticky, int sendingUser) {
                                    synchronized (ActivityManagerService.this) {
                                        requestPssAllProcsLocked(SystemClock.uptimeMillis(),
                                                true, false);
                                    }
                                }
                            });
                    scheduleStartProfilesLocked();
                }
             }
    
    +        AlertDialog.Builder builder = new AlertDialog.Builder(mContext)
    +            .setTitle("Hello, World!");
    +        Dialog dialog = builder.create();
    +        dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ERROR);
    +        dialog.show();
        }
    

    "빌드
    수정한 부분을 핀 포인트로 빌드
    ~/AOSP/7.1.2$ mmm frameworks/base/services
    
    ...
    #### make completed successfully (32 seconds) ####
    

    빌드 제품은 아래에 출력 대상
    out/target/product/flounder/system/framework/services.jar
    

    터미널에 쓰기



    터미널의 services.jar을 빌드 한 services.jar로 교체
    $ adb remount
    $ adb push <services.jarのあるフォルダパス>/services.jar /system/framework/.
    $ adb reboot
    

    좋은 웹페이지 즐겨찾기