test-project が動かないと思ったらそうでもなかった

android create test-project ってのがあるんだけど,
ant するだけでBUILD FAILD になるから変だなと思ったらバージョンの所為だった.

$ android create test-project --path . --main .
$ ant run-tests
    : (略)
BUILD FAILD
    : (略)

id=1, 2, 7 で失敗する.つまりは,バージョン1.5 以下か?
まぁ,普通に 2.1 とか使えよという話でした.

調べたコード

#!/usr/bin/env perl

use strict;
use warnings;

use Test::More qw(no_plan);

{
    my @emulators = grep {m/device$/} grep {m/emulator-/} `adb devices 2>&1`;
    unless (@emulators > 0) {
        die("you must execute emulator");
    }

    my @targets = map {(split)[1]} grep {/^id/} (`android list target`);

    my $prefix = 'a';
    my $project_suffix = 'p';
    my $test_project_suffix = 't';
    foreach my $t (@targets) {
        my $project_dir = $prefix . $t . $project_suffix;
        my $test_project_dir = $prefix . $t . $test_project_suffix;

        unless (-d $project_dir) {
            mkdir($project_dir);
            system("android create project --target $t --path $project_dir --activity AaaActivity --package cla.irvy 2>&1 > $project_dir.log");
        }

        unless (-d $test_project_dir) {
            mkdir($test_project_dir);
            system("( cd $test_project_dir && android create test-project --path . --main ../$project_dir ) 2>&1 > $test_project_dir.log");
        }

        my $log_fname = "$test_project_dir.test.log";
        system("( cd $test_project_dir && ant run-tests 2>&1 ) > $log_fname");

        my $result = `grep BUILD $log_fname`;
        chomp($result);
        my $expect = 'BUILD SUCCESSFUL';
        is($result, $expect, "test target id=$t");
    }
}
  • android list target で使用できるターゲットのリストが得られる
  • ついでに android update sdkSDK のupdate ができる

avd のバージョンの方が新しいと転送すらできないかも.

最初シェルスクリプトで書いてたけど,目で見るの面倒になって,test にした.
makefile の方が楽かと思ったけどそうでもなかった.

参考