小编sak*_*das的帖子

Gradle - 相当于android的test {}配置块

Gradle具有测试配置块

https://docs.gradle.org/current/dsl/org.gradle.api.tasks.testing.Test.html

```

apply plugin: 'java' // adds 'test' task

test {
  // enable TestNG support (default is JUnit)
  useTestNG()

  // set a system property for the test JVM(s)
  systemProperty 'some.prop', 'value'

  // explicitly include or exclude tests
  include 'org/foo/**'
  exclude 'org/boo/**'

  // show standard out and standard error of the test JVM(s) on the console
  testLogging.showStandardStreams = true

  // set heap size for the test JVM(s)
  minHeapSize = "128m"
  maxHeapSize = "512m"

  // set JVM arguments for the test …
Run Code Online (Sandbox Code Playgroud)

android unit-testing gradle

17
推荐指数
1
解决办法
2565
查看次数

Android - ViewStub值得吗?

我有一个ListView,其中listview的每一行包含大约10个ImageButtons.这些按钮中的大多数都具有visibility = Gone,并且仅在极少数情况下出现.我想知道是否值得用ViewStubs替换这些ImageButton以避免一直为listview的所有行加载它们(以及它们包含的图像).然后他们的可见性再次设置为"Gone",所以我不确定加载它们有什么影响.他们的图像真的被加载了吗?

请注意,我所说的是将8个ImageButtons替换为8个ViewStub,而不是1个

干杯

performance android viewstub

16
推荐指数
2
解决办法
4612
查看次数

在Java中使用内部类 - 枚举

我有一个非常具体的问题,与内部类有关.让我给你看一些示例代码:

class Foo {
    MYOPTIONS temp;

    public static enum MYOPTIONS {
        OPTION1, OPTION2, OPTION3;
    } 
}
Run Code Online (Sandbox Code Playgroud)

所以这个枚举在Foo类中.现在我要做的是将temp变量设置为三个选项之一,但是在类Foo之外执行,比如说来自一个名为External的类.不幸的是我无法使用set方法来执行此操作,因为External.setTemp (MYOPTIONS.OPTION1)无效,因为枚举在类外部不可见.所以我唯一能想到的就是在Foo类中有三个方法:

public void setTempOption1 () {this.temp=MYOPTIONS.OPTION1;}
public void setTempOption2 () {this.temp=MYOPTIONS.OPTION2;}
public void setTempOption3 () {this.temp=MYOPTIONS.OPTION3;}
Run Code Online (Sandbox Code Playgroud)

显然,另一种选择是更改枚举,而不是将其作为内部类.我还缺少其他选择吗?谢谢

java enums inner-classes

13
推荐指数
1
解决办法
4万
查看次数

在android中权重大于屏幕的可滚动linearlayout

我正在尝试创建一个垂直linearlayout,其权重大小比屏幕大.比方说屏幕尺寸的2倍.为了使其工作,我显然需要能够滚动它.不幸的是,我无法想办法做到这一点.我尝试使用布局权重,并将权重总和设置为所有组件权重的实际总和的一半(因此,如果所有组件权重总和为20,我将权重总和设置为10)并设法使其工作但不幸的是滚动由于某种原因不再起作用.

有什么我想念的吗?

这是使linearlayout比屏幕大两倍但滚动不起作用的代码:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:fillViewport="true">

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:weightSum="2">

        <EditText android:id="@+id/id1"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:textSize="25dp"
            android:gravity="center"
            android:layout_weight="2"/>

        <EditText android:id="@+id/id2"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:textSize="25dp"
            android:gravity="center"
            android:layout_weight="2"/>

    </LinearLayout>
</ScrollView>
Run Code Online (Sandbox Code Playgroud)

android android-linearlayout

10
推荐指数
1
解决办法
4338
查看次数

Gradle - 为另一个模块的测试添加依赖项

我有一个多模块gradle项目,看起来像这样:

Parent
|--server
|--application (android module)
+--common
Run Code Online (Sandbox Code Playgroud)

服务器测试依赖于通用模块测试.为此,我补充道

testCompile files(project(':common').sourceSets.test.output.classesDi
compileTestJava.dependsOn tasks.getByPath(':common:testClasses')
Run Code Online (Sandbox Code Playgroud)

它运作得很好.不幸的是,当我试图对同样依赖于公共模块测试的应用程序模块做同样的事情时,它也行不通.它失败了:

Build file 'application\build.gradle' line: 103
A problem occurred evaluating project ':application'.
 Could not find property 'sourceSets' on project ':common'
Run Code Online (Sandbox Code Playgroud)

谷歌搜索后我也试过了

 project.evaluationDependsOn(':common')
    testCompile files(project(':common').sourceSets.test.output.classesDir)
Run Code Online (Sandbox Code Playgroud)

但失败了另一个例外:

Project application: Only Jar-type local dependencies are supported. Cannot handle: common\build\classes\test
Run Code Online (Sandbox Code Playgroud)

有想法该怎么解决这个吗?

android build gradle android-gradle-plugin

9
推荐指数
2
解决办法
6212
查看次数

从服务调用带有 FLAG_ACTIVITY_REORDER_TO_FRONT 的活动

我试图从服务调用一个活动(活动 A),我想要发生的是检查堆栈上是否已经有 A 的实例,如果有,将它带到堆栈的顶部(和触发 onNewIntent() 方法),而不是总是创建 A 的新实例。

想知道这是否可能。我的活动在 androidmanifest 中使用“singleTop”启动模式。从活动外部调用活动所需的通常 Intent.FLAG_ACTIVITY_NEW_TASK 标志不会将已经打开的活动 A 带到堆栈顶部,而是始终创建 A 的新实例。而且似乎当我同时使用两者时flags (intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_REORDER_TO_FRONT) 同样的事情发生了(仍然是同一活动的 2 个实例)。有没有办法做到这一点,请始终牢记我是从服务,我不想将活动上下文传递给服务?

(PS 我正在使用 androidannotations,对打开活动 A 的调用发生在 @EBean 内部,@EBean 本身在服务中使用。是否有一种简单的方法可以将该活动上下文传递给该 @EBean?)

android android-intent android-activity android-annotations

8
推荐指数
1
解决办法
744
查看次数

我的android项目测试设置中缺少什么?

我目前正在构建一个Android应用程序,我正在进行最好的测试设置,以使我的应用程序防弹:)如果有任何小/大缺失请随时推荐!:)

所以我的测试有点像这样:(请记住我的应用程序有一个后端服务器)

  1. Junit在应用程序端使用Robolectric测试所有支持的Android版本.
  2. Junit在服务器端使用mockito进行测试.
  3. 使用robolectric和后端服务器的实例进行集成测试.更新:这可能最终会成为仪器测试和后端服务器的真实实例,如robolectric和我们在项目中使用的google play服务是不行的.
  4. 仪器测试使用后端服务器的实例针对多个设备(不同的屏幕分辨率等),但仅针对Android API的单个版本 - 可能是最新支持的版本.这意味着启动多个Android虚拟设备并在每个设备上运行测试.我读过可以截取屏幕的截图,但我不确定我们如何验证屏幕截图是否正常.
  5. 使用Monkey runner运行应用程序,再次使用真实服务器.
  6. 性能测试我们主要是在同一时间测试许多设备与后端服务器的交互.不太确定如何为Android运行这样的测试.

所有这些测试都将在TeamCity CI服务器上运行.我们试图在尽可能多的测试中使用roboletric,因为它比在设备上加载测试更快.

我的问题是,我的设置中是否有任何大/小的缺失,或者是否有任何框架可以使我们更容易运行除了使用robolectric/android maven插件/ teamcity之外的所有这些测试?

java android robolectric android-testing

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

package-info.java 包注释影响所有类,包括子包中的类

我想在我的所有课程上应用注释,并且我正在尝试最好的方法来做到这一点。到目前为止,我坚持使用可以注释整个包的 package-info.java 文件,但不能注释子包中包含的类文件。除了在我的项目中添加 100 个仅包含单个注释的相同 package-info.java 文件之外,还有更有效的方法吗?

谢谢

java annotations package

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

java getResource() 不工作

这真让我抓狂。我在具有以下结构的文件夹中有一个 NetBeans 项目:

MyProject
---- build
---- src
---- resources
Run Code Online (Sandbox Code Playgroud)

在 src 我的代码在包中。我想做的是使用

getClass().getResource("/resources/new.png"); 
Run Code Online (Sandbox Code Playgroud)

来自包 com.my.package 中的一个类,但它只是拒绝工作!“new.png”图像位于资源文件夹中。我在这里错过了什么吗?

经过大量玩耍并四处移动“new.png”图像以查看它何时会找到图像后,它终于起作用了,但只有当我将图像放入构建文件夹时。那么我该怎么做才能使这项工作发挥作用?

编辑:抱歉,方法参数中的字符串错误。现在更正

java url embedded-resource

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

不受支持的SSL密码套件

我正在尝试使用一些自定义SSL密码套件.特别是我的清单是

<util:list id="ciphers" value-type="java.lang.String">
    <value>DHE-RSA-AES256-SHA</value>
    <value>DHE-DSS-AES256-SHA</value>
    <value>DHE-RSA-CAMELLIA256-SHA</value>
    <value>DHE-DSS-CAMELLIA256-SHA</value>
    <value>AES256-SHA</value>
    <value>CAMELLIA256-SHA</value>
    <value>SSL_RSA_WITH_RC4_128_MD5</value>    <---this is the only one working
    <value>PSK-AES256-CBC-SHA</value>
    <value>EDH-RSA-DES-CBC3-SHA</value>
    <value>EDH-DSS-DES-CBC3-SHA</value>
    <value>DES-CBC3-SHA</value>
    <value>PSK-3DES-EDE-CBC-SHA</value>
    <value>DHE-RSA-AES128-SHA</value>
    <value>DHE-DSS-AES128-SHA</value>
    <value>DHE-RSA-CAMELLIA128-SHA</value>
    <value>DHE-DSS-CAMELLIA128-SHA</value>
    <value>AES128-SHA</value>
    <value>CAMELLIA128-SHA</value>
    <value>PSK-AES128-CBC-SHA</value>
</util:list>
Run Code Online (Sandbox Code Playgroud)

,由Spring初始化并传递给方法

tlsClientParameters.setCipherSuites()
Run Code Online (Sandbox Code Playgroud)

不幸的是我的客户端无法连接到我创建的存根服务器.我得到的例外是:

Caused by: java.lang.IllegalArgumentException: Unsupported ciphersuite DHE-RSA-AES256-SHA
at com.sun.net.ssl.internal.ssl.CipherSuite.valueOf(CipherSuite.java:171)
at com.sun.net.ssl.internal.ssl.CipherSuiteList.<init>(CipherSuiteList.java:62)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.setEnabledCipherSuites(SSLSocketImpl.java:1977)
at org.apache.cxf.transport.https.SSLSocketFactoryWrapper.enableCipherSuites(SSLSocketFactoryWrapper.java:101)
at org.apache.cxf.transport.https.SSLSocketFactoryWrapper.createSocket(SSLSocketFactoryWrapper.java:71)
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:372)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:166)
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:883)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:230)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleHeadersTrustCaching(HTTPConduit.java:1394)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.onFirstWrite(HTTPConduit.java:1336)
at org.apache.cxf.io.AbstractWrappedOutputStream.write(AbstractWrappedOutputStream.java:42)
at org.apache.cxf.io.AbstractThresholdOutputStream.write(AbstractThresholdOutputStream.java:69)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1414)
... 41 more
Run Code Online (Sandbox Code Playgroud)

当我尝试逐个删除密码套件时,每次都会使用不同的密码出现相同的异常,直到只剩下SSL_RSA_WITH_RC4_128_MD5.这是唯一似乎有效的方法.

我看看如何控制Tomcat可用的SSL密码似乎是一个相同的问题,但我没有空格.

编辑:作为旁注,我的系统在Java 1.5上运行可能是这个java版本不支持这些密码吗?如果没有,有没有办法绕过这个?

更新:我们迁移到Java 7,我仍然遇到同样的问题.我认为它与下面的一个答案有关,它们说这些不是密码的标准名称,因此不被java识别.如果是这种情况,我如何找到这些密码的标准名称?

java encryption ssl

6
推荐指数
2
解决办法
3万
查看次数