小编F1s*_*her的帖子

无法运行Eclipse项目 - 找不到API数据库

我的代码编译.代码中没有错误.我下载了完整的SDK.在运行中我收到此错误:

Can't find API database; API check not performed        
Run Code Online (Sandbox Code Playgroud)

它位于位置:第1行,键入Android Lint问题.

我不知道什么是错的.

eclipse api sdk android

7
推荐指数
2
解决办法
1万
查看次数

MediaStore.Images.Media.insertImage在某些设备上抛出权限拒绝

我的代码行有问题:

String path = MediaStore.Images.Media.insertImage(activity.getContentResolver(), bitmap, "feedback", null);
Run Code Online (Sandbox Code Playgroud)

Activity不为null,位图不为null.

我收到错误:

0-22 11:23:59.644 29514-29527/? E/DatabaseUtils: Writing exception to parcel
10-22 11:23:59.644 29514-29527/? E/DatabaseUtils: java.lang.SecurityException: Permission Denial: writing com.android.providers.media.MediaProvider uri content://media/external/images/media from pid=1380, uid=10136 requires android.permission.WRITE_EXTERNAL_STORAGE, or grantUriPermission()
10-22 11:23:59.644 29514-29527/? E/DatabaseUtils:     at android.content.ContentProvider.enforceWritePermissionInner(ContentProvider.java:679)
10-22 11:23:59.644 29514-29527/? E/DatabaseUtils:     at android.content.ContentProvider$Transport.enforceWritePermission(ContentProvider.java:494)
10-22 11:23:59.644 29514-29527/? E/DatabaseUtils:     at android.content.ContentProvider$Transport.insert(ContentProvider.java:258)
10-22 11:23:59.644 29514-29527/? E/DatabaseUtils:     at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:163)
10-22 11:23:59.644 29514-29527/? E/DatabaseUtils:     at android.os.Binder.execTransact(Binder.java:453)
10-22 11:23:59.645 1380-1467/? E/MediaStore: Failed to insert image
10-22 11:23:59.645 1380-1467/? E/MediaStore: java.lang.SecurityException: Permission …
Run Code Online (Sandbox Code Playgroud)

permissions android mediastore

7
推荐指数
1
解决办法
6581
查看次数

如何在Espresso中重新运行失败的测试? - 头脑风暴

我想弄清楚,如何使用Espresso重新运行失败的测试.我认为从常见的JUnit测试案例来看,这有点复杂,因为您需要在测试开始之前恢复应用中的状态.

我的方法是创建自己的ActivityTestRule,所以我只是从这个类中复制了整个代码,并将其命名为MyActivityTestRule.

在仪器测试的情况下,规则还需要有关我们如何开始活动的信息.我更愿意自己推出它而不是为我做环境.例如:

    @Rule
    public MyActivityTestRule<ActivityToStartWith> activityRule = new MyActivityTestRule<>(
           ActivityToStartWith.class, true, false
    );
Run Code Online (Sandbox Code Playgroud)

所以我也在@Before注释方法中启动我的活动:

   @Before
    public void setUp() throws Exception {
        activityRule.launchActivity(new Intent());
    }
Run Code Online (Sandbox Code Playgroud)

并在@After注释方法中进行清理:

    @After
    public void tearDown() throws Exception {
        cleanUpDataBaseAfterTest();
        returnToStartingActivity(activityRule);
    }
Run Code Online (Sandbox Code Playgroud)

这些方法 - setUp(),tearDown()是每次测试运行之前/之后调用的必要条件 - 以确保测试开始期间的应用程序状态是正确的.


在MyActivityTestRule中,到目前为止我做了一些修改.首先是应用方法的变更来自:

    @Override
    public Statement apply(final Statement base, Description description) {
       return new ActivityStatement(super.apply(base, description));
    }
Run Code Online (Sandbox Code Playgroud)

这对我来说是未知的,但是事情,如ActivityStatement放在ActivityTestRule有super.apply方法,因此也包装测试语句UiThreadStatement:

public class UiThreadStatement extends Statement {
    private final Statement mBase;
    private final boolean mRunOnUiThread;

    public UiThreadStatement(Statement base, boolean runOnUiThread) {
        mBase = base; …
Run Code Online (Sandbox Code Playgroud)

java junit android unit-testing android-espresso

7
推荐指数
1
解决办法
1856
查看次数

通过 shell 从代码调用模拟器上的指纹触摸

我正在尝试进行测试指纹的集成测试。

根据谷歌文档从终端调用模拟器上的手指触摸,您需要使用:

adb -e emu 手指触摸 <finger_id>

这对我有用。在我的例子中 id 是 45146572。但是在测试中你不能自己输入这个命令,因为它应该自动完成。

我一直在尝试各种方法来解决问题(例如,试图了解应用程序如何从传感器接收信息 - 也许通过某种广播意图等),现在我仍然不知道该怎么做。

我知道 UiAutomation 和 UiAutomator 的类 - UiDevice 有方法

执行shell命令

我认为这可能会有所帮助。但即使我做了类似的事情:

getUiDevice().executeShellCommand("-e emu finger touch 45146572");
Run Code Online (Sandbox Code Playgroud)

我的设备不会对它做出反应(我已经尝试过两个类和各种线程)。我相信这是由于 executeShellCommand 已经在 shell 中运行造成的。所以这就像我打字到终端

Kamils-MacBook-Pro:~ F1sherKK$ adb shell
root@generic_x86_64:/ #
Run Code Online (Sandbox Code Playgroud)

我想这就是问题所在,因为谷歌想要:

adb -e emu finger touch
Run Code Online (Sandbox Code Playgroud)

不是

adb shell -e emu finger touch
Run Code Online (Sandbox Code Playgroud)

我对 shell 的了解可能还不够。我已经多次查看所有文档。

你知道如何从外壳调用手指触摸吗?

shell android

7
推荐指数
1
解决办法
847
查看次数

测试分片应该如何工作?

我正在使用android espresso.我在包中放置了各种"类型"的仪器测试.例如"mypackage.loginScreenTests","mypackage.paymentScreenTests","mypackage.registerScreenTests"等.

到目前为止,我正在同时运行所有这些.虽然我只运行例如loginScreenTests,但测试往往会相互影响导致故障的因素.

从我那里读到:http: //developer.android.com/tools/testing-support-library/index.html#ajur-sharding

我可以创建3个分片并将每组测试放在不同的分片上,然后按id运行它们 - 比如0,然后是1,然后是2.但是我找不到任何示例和文档对我来说有点不清楚.

我知道如何使用shard id运行测试,但我不知道如何将位于*.java文件中的测试划分为分片.有人可以向我解释一下吗?

android android-espresso

6
推荐指数
0
解决办法
582
查看次数

使用Espresso测试recyclerView,如何执行单击或断言

最近我需要测试RecyclerView,我在使用它时遇到了很多麻烦.

首先,我通过向我们提供位于espresso-contrib中的 RecyclerViewActions来了解Espresso已经"支持"RecyclerViews .所以我决定使用它,我的依赖关系看起来像这样:

dependencies {

    androidTestCompile 'junit:junit:4.12'
    androidTestCompile 'com.squareup.spoon:spoon-client:1.2.1'
    androidTestCompile 'com.jraska:falcon-spoon-compat:0.3.1'
    androidTestCompile 'com.android.support:support-annotations:23.1.1'

    androidTestCompile 'com.android.support.test:runner:0.4.1'
    androidTestCompile 'com.android.support.test:rules:0.4.1'
    androidTestCompile 'com.android.support.test.espresso:espresso-contrib:2.2.1'

    androidTestCompile "org.mockito:mockito-core:1.10.19"
    androidTestCompile "com.google.dexmaker:dexmaker:1.2"
    androidTestCompile "com.google.dexmaker:dexmaker-mockito:1.2"
}
Run Code Online (Sandbox Code Playgroud)

但是,只有在尝试将espresso-core改为espresso-contrib后才尝试运行我的测试.我可以看到这个错误:

Test running failed: Instrumentation run failed due to 'java.lang.IncompatibleClassChangeError'
Run Code Online (Sandbox Code Playgroud)

我试着把它谷歌出来.我看到很多话题,人们都在回答这样的问题.所以我排除了appcompat,supportv4和recyclerview-v7.像那样:

   androidTestCompile ('com.android.support.test.espresso:espresso-contrib:2.2.1') {
        exclude group: 'com.android.support', module: 'appcompat'
        exclude group: 'com.android.support', module: 'support-v4'
        exclude module: 'recyclerview-v7'
    }
Run Code Online (Sandbox Code Playgroud)

测试开始但是......我不能使用任何RecyclerViewActions.因为在排除了recyclerview-v7后没有任何方法,我在网上看到的几乎所有地方都推荐使用.当我尝试使用 - RecyclerViewActions.actionOnItemAtPosition - 我的核心方法时,我收到此错误:

java.lang.NoSuchMethodError: No virtual method findViewHolderForPosition(I)Landroid/support/v7/widget/RecyclerView$ViewHolder; in class Landroid/support/v7/widget/RecyclerView; or its super classes (declaration of 'android.support.v7.widget.RecyclerView' appears in …
Run Code Online (Sandbox Code Playgroud)

java android gradle android-espresso android-recyclerview

6
推荐指数
1
解决办法
1543
查看次数

是否可以通过编程方式/从终端设置 PIN 码和指纹?

我需要在我的 Android 设备上打开 PIN 码和指纹安全功能。

可以这样做:

  • 要么通过java代码编程 - 如果您知道可以处理它的类,请告诉我(例如,如果您有权限,IWindowManagerImpl.java可以通过反射从java代码修改设备上的动画)

  • 通过在应用程序构建期间执行的 adb shell 命令 - 如果您知道如何从终端执行此操作的命令,请告诉我

  • 还有其他解决方案吗?

我可以获得我的应用程序中的所有权限。我不关心速度或解决方案有多干净,它也可以通过反射来完成。

有人尝试过吗?

shell android adb

6
推荐指数
1
解决办法
845
查看次数

Android + OpenCV:使用CameraBridgeViewBase时如何设置相机分辨率

您好我正在使用OpenCV4Android人脸检测样本.我想知道如何获得我的相机分辨率并将其设置为其他值.在此示例中,CameraBridgeViewBase.

我看到了对象

private CameraBridgeViewBase   mOpenCvCameraView;
Run Code Online (Sandbox Code Playgroud)

我可以用

mOpenCvCameraView.setLayoutParams(); 
Run Code Online (Sandbox Code Playgroud)

但每当我尝试以某种方式使用它时,我做错了,我的程序崩溃了.请帮我解决这个问题.

android opencv resolution

5
推荐指数
1
解决办法
7839
查看次数

为Spoon Gradle Plugin设置applicationApk和instrumentationApk

我想设置.apk文件,用于使用SpoonGradlePlugin运行我的测试.

我可以通过gradle文件以编程方式设置可用的属性:

https://github.com/stanfy/spoon-gradle-plugin/blob/master/src/main/groovy/com/stanfy/spoon/gradle/SpoonExtension.groovy

但我的项目有各种口味和名称,我想测试它们.通过当前设置,我得到:

* What went wrong:
A problem was found with the configuration of task ':app:spoonDebugAndroidTest'.
> File '/Users/F1sherKK/Dev/MyApp-Android/app/build/outputs/apk/app-debug.apk' specified for property 'applicationApk' does not exist.
Run Code Online (Sandbox Code Playgroud)

我的构建名称是:

app-debug-androidTest-unaligned.apk
MyApp-debugA-1.2.3-201.apk
MyApp-debugB-1.2.3-201.apk
MyApp-debugC-1.2.3-201.apk
Run Code Online (Sandbox Code Playgroud)

这就是为什么我想在gradle代码中设置我的.apk - 或者控制台.到目前为止我发现Spoon Gradle插件中有可用的字段:

https://github.com/stanfy/spoon-gradle-plugin/blob/master/src/main/groovy/com/stanfy/spoon/gradle/SpoonRunTask.groovy

名字:

  /** Instrumentation APK. */
  @InputFile
  File instrumentationApk

  /** Application APK. */
  @InputFile
  File applicationApk
Run Code Online (Sandbox Code Playgroud)

但我不能在SpoonExtension.groovy中访问gradle中的属性.

有没有办法设置这些字段?

//编辑 - 添加了一些尝试:这是我的基础配置:

spoon {
    debug = true
    baseOutputDir = file("$buildDir/spoon-log")
    if (project.hasProperty('spoonClassName')) {
        className = project.spoonClassName

        if (project.hasProperty('spoonMethodName')) {
            methodName = project.spoonMethodName
        }
    } …
Run Code Online (Sandbox Code Playgroud)

groovy android gradle spoon android-instrumentation

5
推荐指数
2
解决办法
1416
查看次数

浓咖啡点击webView按钮

您好,我需要在测试中单击Web视图。webView代码中的按钮具有以下代码:

<input type="submit" onclick="ignoreClose()" name="UsernamePasswordEntry" value="Submit">
Run Code Online (Sandbox Code Playgroud)

我尝试这样处理:

   onWebView().withElement(findElement(Locator.NAME, "UsernamePasswordEntry")).perform(webClick());
Run Code Online (Sandbox Code Playgroud)

但是我得到:

java.lang.RuntimeException: java.lang.RuntimeException: Atom evaluation returned null!
Run Code Online (Sandbox Code Playgroud)

有什么办法处理吗?

android webview android-espresso

5
推荐指数
1
解决办法
2554
查看次数