Android-ADB
view release on metacpan or search on metacpan
lib/Android/ADB.pm view on Meta::CPAN
package Android::ADB;
use 5.014000;
use strict;
use warnings;
our $VERSION = '0.001';
use Android::ADB::Device;
use Carp;
use File::Slurp;
use IPC::Open2;
sub new {
my ($class, %args) = @_;
$args{path} //= $ENV{ADB};
$args{path} //= 'adb';
$args{args} //= [];
bless \%args, $class
}
sub run {
my ($self, @args) = @_;
my ($out, $in);
my @dev_args = $self->{device_serial} ? ('-s', $self->{device_serial}) : ();
my $pid = open2 $out, $in, $self->{path}, @{$self->{args}}, @args;
my $result = read_file $out;
close $out;
close $in;
waitpid $pid, 0 or croak "$!";
$result;
}
sub start_server { shift->run('start-server') }
sub kill_server { shift->run('kill-server') }
sub connect { shift->run('connect', @_) }
sub disconnect { shift->run('disconnect', @_) }
sub devices {
my @devices = split '\n', shift->run('devices', '-l');
my @result;
for (@devices) {
next if /^List of devices/;
next unless / /;
push @result, Android::ADB::Device->new(split)
}
@result
}
sub set_device {
my ($self, $device) = @_;
$self->{device_serial} = $device->serial;
}
sub wait_for_device { shift->run('wait-for-device') }
sub get_state { shift->run('get-state') }
sub get_serialno { shift->run('get-serialno') }
sub get_devpath { shift->run('get-devpath') }
sub remount { shift->run('remount') }
sub reboot { shift->run('reboot', @_) }
sub reboot_bootloader { shift->run('reboot-bootloader') }
sub root { shift->run('root') }
sub usb { shift->run('usb') }
sub tcpip { shift->run('tcpip', @_) }
sub push {
my ($self, $local, $remote) = @_;
$self->run(push => $local, $remote)
}
sub pull {
my ($self, $remote, $local) = @_;
$self->run(push => $remote, $local)
}
sub pull_archive {
my ($self, $remote, $local) = @_;
$self->run(push => '-a', $remote, $local)
( run in 0.606 second using v1.01-cache-2.11-cpan-39bf76dae61 )