[背景]
我已经能够在Android测试项目中使用该工具。但现在,我正在尝试在普通的Android应用程序中使用检测,以便进行一些自动GUI控制。例如,有一个应用程序X,其中使用检测来启动应用程序Y并将虚拟键/触摸/单击事件发送到应用程序Y.我成功完成了一个活动和一个派生自Instrumentation的类。这两个类是在一个应用程序项目中创建的。活动是这样的:
public class MainActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
...
String pack = new String("com.example.appX.MainActivity");
ComponentName name = new ComponentName(MainActivity.this,
FilterInstrumentation.class);
Bundle arguments = new Bundle();
arguments.putString("package", pack);
startInstrumentation(name, null, arguments);
...
}
}
instrumentation子类是这样的:
public class FilterInstrumentation extends Instrumentation {
public void onStart(){
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setClassName(getTargetContext(), pack);
Activity activity = startActivitySync(intent);
}
...
}
[问题]
活动和工具正在成功运作。还使TCP服务器从外部网络接收命令以控制仪器的行为。我遇到了以下两个问题:
问题1 当活动中的TCP服务器:可以创建套接字但活动和工具无法相互通信,因为“startInstrumentation()”正在以新的方式启动仪器独立的过程。活动无法获取“FilterInstrumentation”类的实例。 TCP服务器接收的命令无法轻松发送到仪器。
问题2 当FilterInstrumentation中的TCP服务器时。由于权限问题“java.net.SocketException:socket failed:EACCES(Permission denied)”,它将无法创建套接字。 FilterInstrumentation在动态创建的进程中运行,我无法通过Manifest.xml文件控制权限。
似乎Android的测试框架可以在同一个进程中运行一个工具,但我不知道如何在没有使用测试框架的情况下在我的代码中执行此操作。
任何大师都可以提供任何有用的信息吗?
提前致谢。