SL4A に Mouse を入れる際の注意点

PurePerl でも動く Mouse であれば SL4A でも動くだろって軽く考えてたら少しはまったのでメモ。

1. MouseをAndroid端末に転送
adb push Mouse.pm /sdcard/com.googlecode.perlforandroid/extras/perl/site_perl
adb push Mouse /sdcard/com.googlecode.perlforandroid/extras/perl/site_perl/Mouse/
2. Mouseを使用するスクリプトを準備
{
    package Android::Role;
    use Android;
    use Mouse::Role;

    has android => ( is => 'ro', default => sub{ Android->new }, init_arg => undef, );

    package Hello;
    use Mouse;

    with 'Android::Role';

    has message => ( is => 'ro', default => 'World' );

    sub say {
        my $self = shift;
        $self->android->makeToast('Hello, ' . $self->message);
    }

    __PACKAGE__->meta->make_immutable;
}

my $hello = Hello->new({ message => 'Mouse' });
$hello->say;

__END__

Android 端末にスクリプトを転送し

adb push mouse.pl /sdcard/sl4a/scripts

実行・・・あれっ!?

Can't locate mro.pm in @INC (@INC containts: ...

mro.pmが無い・・・だと?

3. mro.pm が無いなら作ればいいじゃない

SL4Aには mro.pm がありませんので、MRO::Compat をもとに作成しました。

まず、Algorithm::C3 および Class::C3 を Mouse を転送したときと同じ要領で転送します。

次にダミーの mro.pm を作成します。

この mro.pm を Android 端末に転送してスクリプトを実行したところエラーなしで実行できました。

動作確認:Xperia(FW:2.1)