2012-01-12 18 views
0

我想要做的是捕获设备序列号并将它们存储在一个数组或列表中。然后,我想安装我的apk连接到我的系统的各种Android设备。我正在尝试制作一个perl脚本,可以为我做这个。Perl脚本存储设备序列号并使用adb安装apk

事情是这样的:

if($ostype eq 'MSWin32') { 

    system("title Android"); 

    $adbcommand_devices = "adb devices"; 

    $adbcommand_install = "adb -s xxxxxxxx install HelloWorld.apk"; 
} 

    if(`adb -s xxxxxxxx get-state` =~ m/device/i) { 
      system($adbcommand_devices);    
      system($adbcommand_install); 

     } 
else { 
    print "Device is offline\n"; 
} 

的序列号应该是来自当前连接的设备。

+0

如果[IPC :: Run3](http ://p3rl.org/IPC :: Run3)(或IPC :: Run)在Windows上工作,这会让你的生活更轻松。我怀疑它是从文档中提取的。您可以使用它轻松捕获'adb设备'的输出。 – derobert 2012-01-12 23:03:22

+0

可以请你提供一个关于如何处理这个问题的示例代码。感谢 – 2012-01-20 22:02:37

+0

好吧,我已经添加了一个示例(作为答案)。 – derobert 2012-01-21 10:49:20

回答

2

下面是使用IPC::Run3只是adb devices命令的例子:

use strict; 
use warnings qw(all); 

use IPC::Run3; 
use Carp qw(croak confess cluck); 
use Data::Dumper; 

my $ADB_PATH = '/path/to/adb'; # EDIT THIS 

my @devices = get_devices(); 
print Dumper(\@devices); 
exit 0; 

# subs 
sub get_devices { 
    my $adb_out; 
    run3 [$ADB_PATH, 'devices'], undef, \$adb_out, undef; 
    $? and cluck "Warning: non-zero exit status from adb ($?)"; 

    my @res = $adb_out =~ m/^([[:xdigit:]]+) \s+ device$/xmg; 
    return wantarray ? @res : \@res; 
} 

对于很多的这个,你可以使用qx/``为好。例如,你可以用my $adb_out = `$ADB_PATH devices`;替换run3(因为你不需要传入任何东西进入它,只是出来,也不需要避开shell)。

+0

谢谢,我目前有PERL版本5.6.1和IPC :: Run3我需要5.8最低,我会升级并尝试这个。 – 2012-01-26 19:15:14

+0

@ Noble6:我[没有看到](http://cpansearch.perl.org/src/RJBS/IPC-Run3-0.045/Makefile.PL)IPC :: Run3的任何5.8依赖关系,但如果存在,你可以从[CPAN页面]下载一个较旧的版本(http://search.cpan.org/~rjbs/IPC-Run3-0.045/)。但是,5.6.1差不多11岁,你真的应该升级! – derobert 2012-01-26 19:24:21

+0

使用5.6,我遇到以下错误 安装软件包'IPC-Run3'... 正在下载http://ppm.activestate.com/PPMPackages/5.6/MSWin32-x86-multi-thread/IPC-Run3-0.030。 tar.gz ... 安装软件包'IPC-Run3'时出错:读取错误http://ppm.activestate.com/PPMPackages/5.6/MSWin32-x86-multi-thread/IPC-Run3-0.030.tar.gz如果我解压缩包,然后尝试安装它,它显示了对Test :: More的依赖关系。我无法在网络上找到测试:更多。 – 2012-01-28 01:30:13