1. 1. 因为懒,也因为烦。

因为懒,也因为烦。

  • 所以为了发布版本简单可靠,也因为基于window环境下,所以学着写了powershell。
    一边搜示例,一面学着写。大概有shell的基础入门挺快。
    闲话少叙,直接提码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    function build($target){
    $dest_dir="build/build_$target"
    $output="$dest_dir/output"
    # if exsit remove it
    if(Test-Path $dest_dir)
    {
    echo "rm $dest_dir"
    ri "$dest_dir" -recurse
    }
    cpi -Path "./Pad" -Destination $dest_dir -Recurse -Force
    if((Test-Path $output) -ne 'True'){
    echo "mkdir $dest_dir/output"
    mkdir "$dest_dir/output"
    }
    $obj_dir='obj\local\armeabi'
    $dirs='sdtp','api','mpos'
    foreach($build in $dirs){
    ndk-build clean -C "$dest_dir/$build/jni"
    ndk-build -j3 DEVICE=$target -C "$dest_dir/$build/jni"
    Copy-Item -Path "$dest_dir/$build/$obj_dir/*.so" -Destination $output
    Copy-Item -Path "$dest_dir/$build/$obj_dir/*.a" -Destination $output
    }
    }
    function argument_checker([string]$in_arg){
    }
    function buildAll($in_devices){
    foreach($device in $in_devices){
    echo "in_device=$device";
    build($device);
    }
    }
    #default build all type
    function main{
    param(
    [ValidateSet('N900_3G','N900_4G','IM81')]
    $in_args
    )
    $devices='N900_3G','N900_4G','IM81'
    if($in_args.Count -eq 0){
    echo "build in default"
    buildAll($in_devices=$devices);
    }
    else{
    buildAll($in_devices=$in_args);
    }
    }
    main($args);

    我是要把工程目录Pad下面sdtp,api,mpos这三个库文件的目录依顺序进行编译,然后将编译的文件打包。
    因为一共要发布3款终端产品,有三个不同产品编译选项开关。同时有两个大的分支版本。所以正式发布版本时,需要323=18次目录进出,然后进行ndk-build操作。并且很恶心的是,原来设定的库文件之间还有依赖关系,所以需要严格按照sdtp,api,mpos这三个目录的顺序进行编译。还有就是每个目录每次选择不同机型编译前都需要执行清空操作,因为不同的机型包含进来的代码可能还有些许差异。所以没有用脚本执行前,每次发版本都是异常辛苦,并且要很认真注意每个操作步骤的。
    目前这个脚本,还不完善。

    最近抽时间增加publish脚本,用来进行自动将生成的so文件以及.a文件发布到我们的git服务器上,同时增加了cleanAll脚本用来清理编译生成的目标文件夹,方便提交svn。

    后续计划会增加并发任务,加快编译的效率。同时也考验下新的i5机器的性能。

    所以学点脚本,还是有用的,效率杠杠的。

    这里推荐两个不错的powershell学习网址:pstips 以及Microsoft PowerShell Management