Android 如何将参数传递给使用adb shell am Instrumentation命令启动的测试函数

Android 如何将参数传递给使用adb shell am Instrumentation命令启动的测试函数,android,instrumentation,Android,Instrumentation,我在安卓系统中开发,我正在使用仪器来测试手机应用程序。 仪器是用于测试应用程序的Android env 为此,我使用带有测试用例名称的am命令。 我运行adb,然后输入adb shell,然后在shell中编写am命令 我希望与此am命令一起传递一个参数。 我的意思是,我希望将参数传递给am命令启动的测试 可能吗??? 请提供帮助?您可以将数据uri、mime类型甚至“附加内容”传递给 am[启动|仪表] am开始[-a][-d] [-t][-c[-c]…] [-e [-e…] [-n] [-D

我在安卓系统中开发,我正在使用仪器来测试手机应用程序。 仪器是用于测试应用程序的Android env

为此,我使用带有测试用例名称的am命令。 我运行adb,然后输入adb shell,然后在shell中编写am命令

我希望与此am命令一起传递一个参数。 我的意思是,我希望将参数传递给am命令启动的测试

可能吗???
请提供帮助?

您可以将数据uri、mime类型甚至“附加内容”传递给

am[启动|仪表]

am开始[-a][-d]
[-t][-c[-c]…]
[-e
[-e…]
[-n] [-D][]

调幅仪表[-e][-p][-w]

您可以将它们作为“附加项”传递,然后获取传递给它的附加项

你可以这样通过他们:

am start -a android.intent.action.VIEW -c android.intent.category.DEFAULT 
  -e foo bar -e bert ernie -n my.package.component.blah
然后在代码中:

Bundle extras = this.getIntent ( ).getExtras ( );

if ( extras != null ) {
  if ( extras.containsKey ( "foo" ) ) {
    Log.d ( "FOO", extras.getString ( "foo" ) );
  } else {
    Log.d ( "FOO", "no foo here" );
  }
  
  if ( extras.containsKey ( "bert" ) ) {
    Log.d ( "BERT", extras.getString ( "bert" ) );
  } else {
    Log.d ( "BERT", "Bert is all alone" );
  }
} else {
  this.setTitle ( "no extras found" );
}
确切地说是:

 ./adb shell am start -a android.intent.action.VIEW -c android.intent.category.DEFAULT -e user_id 1 -n com.shortcut.activity/com.shortcut.activity.SelectCardActivity
com.shortcut.activity/com.shortcut.activity。选择CardActivity->uir进入主课堂活动开始应用程序。 将传递给您的应用程序参数用户_id=1 在课堂选择卡活动中,您可以看到以下内容:

  Bundle installparams = this.getIntent ( ).getExtras ( );

由于您已经在使用Android sdk,如果您知道sdk在系统上的位置- 转到终端上的sdk位置(命令提示)->键入adb外壳->键入am帮助

以身作则

将参数传入:(例如-e peerID SCH-I545)

在测试类中:

{
    Bundle extras = InstrumentationRegistry.getArguments();
    String peerID = null;

    if ( extras != null ) {
        if ( extras.containsKey ( "peerID" ) ) {
            peerID = extras.getString("peerID");
            System.out.println("PeerID: " + peerID);
        } else {
            System.out.println("No PeerID in extras");
        }
    } else {
        System.out.println("No extras");
    }
}

要发送额外值,您应该添加-n(组件),以便使用-e发送额外值

下面是发送多个键值的示例

adb shell am start -n com.example.jk.checkwifi/.MainActivity -e "imei" $myimei -e "ip" $IP
然后,要在活动中获取数据,请在onCreate中进行如下操作

ip = intent.getStringExtra("ip")

嗨,Ryan,我花了一些时间来研究如何向测试传递参数的好例子-很抱歉,我找不到有用的东西。请发送apk java中的一些链接或代码片段,以检索这些参数(附加参数)还有一个我如何编写adb shell am start命令的示例,该命令将附加命令发送到目标上的测试。非常感谢。我所有的示例都不是说通过am命令启动的测试参数…我确实执行了搜索。我用一个示例更新了我的答案,该示例可以从am start命令获取附加命令集yan非常感谢你的帮助!!我正要尝试这个,你能告诉我bar是什么意思吗?我们不应该把参数用倒逗号表示吗?如果我把电话号码作为参数-需要我把它用逗号表示吗?嗨,Ryan,我的类扩展了InstrumentationTestCase而不是Activity类,所以我无法执行:this.getIntent().I.我认为我需要创建意图执行:意图意图=新意图(intent.someAction);你能帮我找出我应该在这里使用什么操作吗?我还了解到有一些辅助属性:category、type、component、extra。我知道我也需要相应地更新manifest文件。很抱歉问了这么多问题-我对安卓和Java不熟悉。非常感谢你的帮助。IlanaThis是我所需要的,因为我没有这么做这是一项活动
ip = intent.getStringExtra("ip")