大家好,我是Android Junit测试新手:
我在MainActivityFunctionalTest.java文件中编写了一些测试代码
MainActivityFunctionalTest.java:
package com.example.myfirstapp2.test;
public class MainActivityFunctionalTest extends ActivityInstrumentationTestCase2<Login>{
private static final String TAG = "MainActivityFunctionalTest";
private Login activity;
public MainActivityFunctionalTest() {
super(Login.class);
}
@Override
protected void setUp() throws Exception {
Log.d(TAG,"Set-Up");
super.setUp();
setActivityInitialTouchMode(false);
activity = getActivity();
}
public void testStartSecondActivity() throws Exception {
// add monitor to check for the second activity
ActivityMonitor monitor =
getInstrumentation().
addMonitor(DisplayMessageActivity.class.getName(), null, false);
//addMonitor(MainActivity.class.getName(), null, false);
// find button and click it
Button view = (Button) activity.findViewById(R.id.btnLogin);
// TouchUtils handles the …Run Code Online (Sandbox Code Playgroud) 我需要编译具有系统权限的应用程序才能使用目标应用程序com.android.settings.现在,当我尝试运行我的apk时,我收到错误消息
测试运行失败:权限拒绝:从pid = 354开始检测ComponentInfo {com.jayway.test/android.test.InstrumentationTestRunner},因为包com.jayway.test没有与目标com匹配的签名,所以不允许使用uid = 354. android.settings
如何使用系统权限编译我的应用程序?
是否可以模拟连接到Android的USB或蓝牙设备?
我想创建一个能够在本地模拟HID设备的应用程序.我的意思是:该应用程序应该让Android相信USB /蓝牙HID设备已连接.我希望这可以让我的应用程序在全球范围内注入触摸事件.无论如何都要模拟(虚拟)设备?请注意,我并不关心设备,我只想使用内置的HID输入支持.
我知道很多人已经问过触摸事件注入,但这种方法似乎有点不同.我也没有想用这个测试的目的,因此InstrumentationTestCase之类也无济于事.
植入设备可能是一个选项,虽然我也可以设想让我的最终用户手动安装一个专门签名的应用程序(根据/sf/answers/1171595841/和/sf/answers/1603196591/这有效,但它将是特定于设备的).
我知道:
在android上模拟一个鼠标输入 - 这个人似乎是在他自己的应用程序中做到这一点,虽然他的问题没有得到解答;)
http://www.pocketmagic.net/2013/01/programmatically-injecting-events-on-android-part-2/#.U58SqfldVHV -需要root.有没有人成功使用过这个?此外,该解决方案似乎再次特定于设备.
蓝牙+模拟鼠标 - 这不是我想要的.手机本身不应该是HID设备,而是使用(虚拟创建的)设备.同样如下:https: //stackoverflow.com/a/8174973/2923406
请注意,我不希望把我的手机到任何种类的HID设备.
是否可以从另一个应用程序内部运行应用程序?我想要做的是编写一个应用程序,允许您选择要启动的应用程序,然后在视图中显示此应用程序的活动.
所以在横向模式下,它看起来应该是这样的:

这背后的想法是:
我希望能够在我自己的活动旁边开始并运行第三方活动,并且我希望能够通过控制第三方活动的活动创建单独的makros.
基本上,这样的事情:
那么如何从我自己的活动中启动和控制另一个活动呢?
我知道这已经被问过很多次了,没有答案,但我仍然希望有人终于解决了这个问题.
问题:我有一个运行Android 2.3的非root设备.我需要创建一个服务:
像许多其他人一样,我已经陷入了#2.以下是有史以来建议的解决方案的摘要:
com.android.internal.telephony.CallManager及其方法registerForPreciseCallStateChanged(例如,这一个):不起作用,没有电话在其中注册,因此事件不会触发.com.android.internal.telephony.PhoneFactory获得com.android.internal.telephony.Phone实例(这是一切的关键):不工作,工厂没有被初始化; 尝试makeDefaultPhones使用安全异常中的调用结果初始化它(如此处).看起来已经尝试了所有东西,但仍然可能还有一个技巧可以拯救我:)
我正在修改Android 4.0.3.r1的自定义导航栏,并希望发送"Home"和"Back"等关键事件.我的应用程序不是一个系统:
IWindowManager mWindowManager = IWindowManager.Stub.asInterface(
ServiceManager.getService(Context.WINDOW_SERVICE));
mWindowManager.injectKeyEvent( ev, false );
Run Code Online (Sandbox Code Playgroud)
它不起作用,因为我无法android.permission.INJECT_EVENTS从系统应用程序中获取.我怎样才能做到这一点?
我有两个Android应用程序(应用程序A,应用程序B),如下图所示.我想通过单击第一个应用程序A中的按钮来调用应用程序B,当应用程序B启动时,文本框将包含我想从应用程序A传递的文本.
**注意-
我可以访问应用程序A,因此我可以修改应用程序A的代码.我无法访问应用程序B.
我在Stackoverflow.com和其他网站上看过许多帖子,解释了将数据传递给第二个应用程序但我看到只有当你有权修改这两个类的代码时才有可能.在我的情况下,我无法访问应用程序2,它只是一个安装在我的手机上的APK.
我想像我们通过Selenium自动化网页一样实现,我们可以访问文本字段并在该文本字段中输入值.
应用B仅用于示例目的.它可以是任何具有文本框的应用程序.
其实我想自动化应用(广告应用程式B)与应用程序A.应用A的帮助下登录过程中有许多选择凭证的凭证,并从应用程序A将推出应用程序B并进入credentioal到登录界面申请B.**

希望我能够解释我的问题.如果需要更多输入,我可以解释一下.
我正在尝试API 17,我无法打开Xposed框架.
确切的步骤是:
adb install XposedInstaller.apkadb remount (使系统目录可写)我得到一个空白的错误消息然后它说没有安装框架.
我正在尝试模拟从 adb 到我的 Android 设备的点击和滑动手势。我尝试从 Windows 命令提示符运行以下
adb shell input tap 500 500命令adb shell input touchscreen tap 500 500。它给了我以下错误,
java.lang.SecurityException: Injecting to another application requires INJECT_EVENTS permission
at android.os.Parcel.createException(Parcel.java:2074)
at android.os.Parcel.readException(Parcel.java:2042)
at android.os.Parcel.readException(Parcel.java:1990)
at android.hardware.input.IInputManager$Stub$Proxy.injectInputEvent(IInputManager.java:925)
at android.hardware.input.InputManager.injectInputEvent(InputManager.java:886)
at com.android.commands.input.Input.injectMotionEvent(Input.java:428)
at com.android.commands.input.Input.access$200(Input.java:41)
at com.android.commands.input.Input$InputTap.sendTap(Input.java:224)
at com.android.commands.input.Input$InputTap.run(Input.java:218)
at com.android.commands.input.Input.onRun(Input.java:108)
at com.android.internal.os.BaseCommand.run(BaseCommand.java:56)
at com.android.commands.input.Input.main(Input.java:71)
at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:380)
Caused by: android.os.RemoteException: Remote stack trace:
at com.android.server.input.InputManagerService.injectInputEventInternal(InputManagerService.java:732)
at com.android.server.input.InputManagerService.injectInputEvent(InputManagerService.java:706)
at android.hardware.input.IInputManager$Stub.onTransact(IInputManager.java:422)
at android.os.Binder.execTransactInternal(Binder.java:1021)
at android.os.Binder.execTransact(Binder.java:994)
Run Code Online (Sandbox Code Playgroud)
我还尝试使用 …
碰撞:
java.lang.SecurityException: Injecting to another application
requires **INJECT_EVENTS** permission
Run Code Online (Sandbox Code Playgroud)
命令:
adb shell monkey -p PACKAGE_NAME -v -v --throttle 300
--pct-touch 40 --pct-motion 35 --pct-nav 0 --pct-majornav 0 --pct-appswitch 5 --pct-anyevent 5 --pct-trackball 0 --pct-syskeys 5 --pct-pinchzoom 5 --bugreport 100000
Run Code Online (Sandbox Code Playgroud)
任何想法如何克服这个?
android ×10
adb ×1
automation ×1
hid ×1
junit ×1
monkeyrunner ×1
multitasking ×1
permissions ×1
python ×1
selenium ×1
touch ×1
touch-event ×1