travis support-v4 21.0上找不到android.support.v4.widget.DrawerLayoutImpl的类文件
我们正在尝试对travis CI进行测试。我们有一个使用travis support-v4 21.0上找不到android.support.v4.widget.DrawerLayoutImpl的类文件,android,android-gradle-plugin,robolectric,travis-ci,android-espresso,Android,Android Gradle Plugin,Robolectric,Travis Ci,Android Espresso,我们正在尝试对travis CI进行测试。我们有一个使用android.support.v4.widget.DrawerLayout的类 当我们使用android支持v4库时 build.gradle-> targetSdkVersion: 19 `compile 'com.android.support:support-v4:20.0.0'` .travis.yml - build-tools-19.1.0 - android-19 - extra-android-support - ex
android.support.v4.widget.DrawerLayout
的类
当我们使用android支持v4库时
build.gradle
->
targetSdkVersion: 19
`compile 'com.android.support:support-v4:20.0.0'`
.travis.yml
- build-tools-19.1.0
- android-19
- extra-android-support
- extra-google-google_play_services
- extra-google-m2repository
- build-tools-21.0.1
- android-21
- extra-android-support
- extra-google-google_play_services
- extra-google-m2repository
我们没有得到这个错误,但在使用
build.gradle
->
targetSdkVersion: 21
com.android.support:support-v4:21.0.+
.travis.yml
- build-tools-19.1.0
- android-19
- extra-android-support
- extra-google-google_play_services
- extra-google-m2repository
- build-tools-21.0.1
- android-21
- extra-android-support
- extra-google-google_play_services
- extra-google-m2repository
我们得到了错误
private static class IdlingDrawerListener implements DrawerListener, IdlingResource {
^
class file for android.support.v4.widget.DrawerLayoutImpl not found
/home/travis/build/something/sample/src/test/java/com/abc/somesample/espresso/DrawerActions.java:200: error: cannot find symbol
private ResourceCallback callback;
^
symbol: class ResourceCallback
location: class IdlingDrawerListener
/home/travis/build/something/sample/src/test/java/com/abc/somesample/espresso/DrawerActions.java:255: error: cannot find symbol
public void registerIdleTransitionCallback(ResourceCallback callback) {
^
symbol: class ResourceCallback
location: class IdlingDrawerListener
/home/travis/build/something/sample/src/test/java/com/abc/somesample/espresso/DrawerActions.java:153: error: method setDrawerListener in class DrawerLayout cannot be applied to given types;
drawer.setDrawerListener(IdlingDrawerListener.getInstance(existingListener));
^
required: DrawerListener
found: IdlingDrawerListener
reason: actual argument IdlingDrawerListener cannot be converted to DrawerListener by method invocation conversion
/home/travis/build/something/sample/src/test/java/com/abc/somesample/espresso/DrawerActions.java:192: error: cannot find symbol
instance = new IdlingDrawerListener();
^
symbol: constructor IdlingDrawerListener()
location: class IdlingDrawerListener
/home/travis/build/something/sample/src/test/java/com/abc/somesample/espresso/DrawerActions.java:193: error: method registerIdlingResources in class Espresso cannot be applied to given types;
Espresso.registerIdlingResources(instance);
^
required: IdlingResource[]
found: IdlingDrawerListener
reason: argument type IdlingDrawerListener does not conform to vararg element type IdlingResource
/home/travis/build/something/sample/src/test/java/com/abc/somesample/espresso/DrawerActions.java:205: error: non-static variable this cannot be referenced from a static context
this.parentListener = parentListener;
^
/home/travis/build/something/sample/src/test/java/com/abc/somesample/espresso/DrawerActions.java:205: error: cannot find symbol
this.parentListener = parentListener;
^
symbol: variable parentListener
/home/travis/build/something/sample/src/test/java/com/abc/somesample/espresso/DrawerActions.java:208: error: method does not override or implement a method from a supertype
@Override
^
/home/travis/build/something/sample/src/test/java/com/abc/somesample/espresso/DrawerActions.java:215: error: method does not override or implement a method from a supertype
@Override
^
/home/travis/build/something/sample/src/test/java/com/abc/somesample/espresso/DrawerActions.java:256: error: non-static variable this cannot be referenced from a static context
this.callback = callback;
^
/home/travis/build/something/sample/src/test/java/com/abc/somesample/espresso/DrawerActions.java:256: error: cannot find symbol
this.callback = callback;
^
symbol: variable callback
/home/travis/build/something/sample/src/test/java/com/abc/somesample/espresso/DrawerActions.java:254: error: method does not override or implement a method from a supertype
@Override
^
Travis甚至表示,它已经下载并安装了Android支持库修订版21,但仍然存在上述错误
更新:
我们尝试在travis guys设置的VM上运行测试
- 最初在计算机上运行时,测试失败,并出现相同的错误
- 尝试手动将
support-v4
文件中的aar
复制到我们的internal\u impl-21.0.0.jar
目录中,测试通过libs/
- 在虚拟机上手动安装
,测试通过Android SDK tools 23.0.5
.travis.yml
有以下几行:
-工具
-平台工具
-构建工具-21.1.1
-安卓-21
-额外的android支持
-extra-android-m2存储库
-extra-google-m2存储库
不过,travis的测试仍然失败。这听起来像是travis中的一个bug。如果它不使用Gradle来构建所有内容,而是自己构建一些内容(这听起来很像,因为您有特殊的YAML文件列出依赖项),那么它需要处理AAR文件依赖项,不仅包括classes.jar,还包括libs/下的jars。您可能遇到了这个问题(?) 具有讽刺意味的是,@Tor Norbye的最后一句话是:),他说 对于0.8.14,类装入器问题已修复。gradle同步问题已经解决 以0.14的刻度固定在模型侧
1。ActionBarDrawerToggle:不推荐、棒棒糖的新版本样式和更新的示例 通过以下方式实现嵌套接口: 新版本与标准和样式兼容 请参阅以更新它,或参阅和 需要最新的SDK版本、appcompat-v7.21.0.+、support-v4.21.0.+和Android支持存储库
2。Travis配置:需要最新的SDK工具、平台工具、构建工具和额外的存储库 将
extra-android-m2存储库
和build-tools-21.1.1
添加到android:components:
默认情况下使用工具23.0.2,棒棒糖需要
重要提示:从下载最新的Android系统组件
在Android SDK管理器中,必须首先将SDK工具更新到
最新版本并重新启动SDK管理器。如果没有,则
最新的Android系统组件将无法下载
您需要首先更新SDKtools
,以便获得其他组件的最新版本。工具v23.0.5要求更新平台工具
v19+,并要求v21+正常工作。Plus平台、系统img等。尝试以下方法:
android:
components:
# Uncomment the lines below if you want to
# use the latest revision of Android SDK Tools
- platform-tools
- tools
- build-tools-21.1.1
- android-21
- extra-android-support
- extra-android-m2repository
- extra-google-m2repository
- extra-google-google_play_services
- sys-img-armeabi-v7a-android-21
licenses:
- 'android-sdk-license-5be876d5'
3。重要提示:基于Gradle的项目需要额外的android-m2repository无需额外的android支持
extra-android-m2存储库
包含gradle/android studio的工件(.aar文件)
注意:如果您使用Android Studio进行开发,请选择并安装
Android支持存储库项目,而不是Android支持
Eclipse上的库)
Android Studio的更多信息:
4。android中缺少的DroperLayoutImpl类。支持:support-v4:21.0.2 internal.jar 您可以尝试将
21.0.+
更改为21.0.2
。我不确定Travis ci依赖项解析工作流
compile 'com.android.support:support-v4:21.0.2'
compile 'com.android.support:appcompat-v7:21.0.2'
我不知道,但也许它复制了其他android.support版本,没有内部缺少的类和jar
通过在构建中添加如下内容,检查是否存在内部jar:
export MOD_NAME= yourapplicationmodulename
'cat ${TRAVIS_BUILD_DIR}/${MOD_NAME}/build/intermediates/tmp/dex/debug/libraryList.txt'
如果您使用21.0.+并下载m2repository 21.0.0版本,但随后在maven上查找更新版本,它发现了Android支持库,修订版21.0.1,没有aar,那么请尝试新的21.0.2版本
5。浓缩咖啡或双份浓缩咖啡、抽屉、浓缩咖啡罐和其他附属设施 关于
Espresso
和其他到旧支持库的可转换依赖项,您可以尝试升级它们或排除android。支持:
我不熟悉用于Android的浓缩咖啡测试工具的纯Gradle端口Double espresso
,但Jake Wharton写道():
重复依赖项
由于当前Android插件中存在缺陷,您可能需要排除
应用程序和测试应用程序中重复的依赖项
例如,如果你对Dagger有依赖,你需要
暂时手动将其从测试依赖项中排除
androidTestCompile('com.jakewharton.espresso:espresso:1.1-r3'){排除组:'com.squareup.dagger'}以下是 可能需要暂时排除的浓缩咖啡依赖性: dagger:dagger:1.2.1。。。以及“support-v4” 模块: com.android.support:support-v4:21.0.0编辑答案:
通过使用
espresso contrib
库中预编译的DrawerActions.java
类,可以解决此问题。有关安装说明,请参阅。在build.gradle中手动将库添加到服务器:
testCompile fileTree(dir: "${rootDir}/YourProject/build/intermediates/exploded-aar/com.android.support/support-v4/", include: "**/*.jar")
经过多次测试后,添加依赖项对我有效:
compile 'com.android.support:internal_impl:22.2.0'
不幸的是,当您更改“支持”库版本时,您必须更新此JAR。AOSP问题跟踪程序中报告了类似的错误。我在Jenkins build system上遇到了相同的问题。它在本地机器上运行良好,但由于某种原因在Jenkins上崩溃。@Mikoos您可以轻松地检查androi