美文网首页Android系统开发程序员Android技术知识
使用shell协助自动编译打包Android

使用shell协助自动编译打包Android

作者: J_Coder | 来源:发表于2016-05-06 17:48 被阅读627次

    从事Android系统相关开发工作的coder肯定会是需要在Ubuntu系统下编译打包工作,包括android,kernel,uboot相关镜像编译打包,而且还需要手动从各个目录下进行拷贝到指定的打包目录, 各个部分需要执行的命令又不一样,如此反复操作必然造成重复劳动效率低下地问题,为了避免这样的问题,我建议使用shell脚本来帮助协助你完成这样繁琐的工作,提高效率。
    这里提供一个满足基本编译打包的框架,大家可以根据自己业务需求对脚本进行处理。

    命名shell脚本为buildsys.sh

    #!/bin/bash
    export CODEDIR=`pwd`
    export KERNEL_DIR=$CODEDIR/kernel
    export UBOOT_DIR=$CODEDIR/u-boot
    export ANDROID_IMG_DIR=$CODEDIR/rockdev/Image-rk3288_box
    export PKG_IMG_DIR=$CODEDIR/Image
    export ANDROID_OUT_TARGET_DIR=$CODEDIR/out/target/product/rk3288_box
    export PRODUCT_NAME1=plycom
    export CUSTOMER_NAME=OWNER
    echo $CODEDIR
    echo $KERNEL_DIR
    echo $UBOOT_DIR
    echo $ANDROID_IMG_DIR
    
    function copyAndroidImg(){
        cd $ANDROID_IMG_DIR 
        for IMG in $(ls $ANDROID_IMG_DIR)
        do
            cp -rf  $ANDROID_IMG_DIR/$IMG $PKG_IMG_DIR
        done
    }
    function clean_android()
    {
        echo "clean_android"
        cd $ANDROID_OUT_TARGET_DIR
        rm *.img
        rm -rf $ANDROID_OUT_TARGET_DIR/system
        
    }
    function build_kernel()
    {
        echo $PRODUCT_NAME1
        echo "build_kernel"
    }
    
    function build_uboot()
    {
        echo $PRODUCT_NAME1
        echo "build_uboot"
    }
    
    
    function build_android()
    {
        cd $CODEDIR
        source build.sh
        lunch rk3288_box-userdebug
        export PRODUCT_NAME1
        echo "PRODUCT_NAME1 =$PRODUCT_NAME1"
        make -j8
        ./mkimage.sh
        copyAndroidImg
    }
    
    function build_all()
    {
        build_kernel
        build_uboot
        build_android
    }
    
    function exec_fun()
    {
        case "$1" in
            all)
                build_all
                ;;  
            android)
                build_android
                ;;  
            kernel)
                build_kernel
                ;;  
            uboot)
                build_uboot
                ;;  
        clean_an)
                clean_android
                ;;  
            *)  
        esac
    }
    
    #带选项传参
    #用法举例:./buildsys.sh -p PRO1 -c CUSTOM1 
    #使用export声明后,相应的参数可以传入其他mk文件,如device.mk可以使用该变量
    while getopts "p:c:" OPT
    do
        case $OPT in
            p) PRODUCT_NAME1=$OPTARG;;
            c) CUSTOMER_NAME=$OPTARG;;
            ?)  Usage
                exit 2;; 
       esac
    done
    #直接传参
    #用法举例:./buildsys.sh all,默认执行 buildAndroid函数
    #这里可以和带选项传参函数一起使用
    #/buildsys.sh -p PRO1 all
    #注:带选项参数须在普通传参前面
    if [ "$#" == 0 ]; then
        build_android
    else
        for f in "$@"; do
            exec_fun $f
        done
    fi
    

    如果对shell脚本还不是特别熟悉的话,可以自行查阅相关资料。
    这里需要着重学习下几个参数的用法。

    1.getops 带选项参数
    2.$# 表示传入参数个数
    3.$@ 表示全部传入参数
    

    另外也可以关注下我的个人主页

    相关文章

      网友评论

        本文标题:使用shell协助自动编译打包Android

        本文链接:https://www.haomeiwen.com/subject/qpljrttx.html