我们正在尝试对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
- extra-google-google_play_services
- extra-google-m2repository
我们不会在使用
时收到此错误 build.gradle
- >
targetSdkVersion: 21
com.android.support:support-v4:21.0.+
.travis.yml
- 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们设置的虚拟机上运行测试。
internal_impl-21.0.0.jar
support-v4
文件中的aar
复制到我们的libs/
目录并通过测试来尝试。Android SDK tools 23.0.5
并传递测试。我们的项目.travis.yml
包含以下内容:
- tools
- platform-tools
- build-tools-21.1.1
- android-21
- extra-android-support
- extra-android-m2repository
- extra-google-m2repository
仍然没有在travis上进行测试。
答案 0 :(得分:1)
这听起来像是特拉维斯的一个错误。如果它不使用Gradle来构建所有内容,而是自己构建一些内容(听起来好像,因为你有特殊的YAML文件列出依赖项),它需要处理AAR文件依赖,不仅包括classes.jar,而且jars在libs /下。
答案 1 :(得分:1)
<强> 1。 ActionBarDrawerToggle:弃用,Lollipop的新版本样式和更新的样本
DrawerLayout有一个嵌套接口DrawerListener,由以下人员实现:
新的support-v7-appcompat版本与Android Lollipop和Material Design样式兼容。
请参阅this response进行更新,或Google I/O app implementation和Google sample。
需要最新的SDK版本,appcompat-v7.21.0。+,support-v4.21.0。+和Android支持存储库。
<强> 2。 Travis配置:最新的SDK工具,平台工具,构建工具和额外的m2存储库
将extra-android-m2repository
和build-tools-21.1.1
添加到android: components:
。
Travis CI for Android projects默认使用工具23.0.2,Lollipop需要SDK tools 23.0.5。
重要提示:要从中下载最新的Android系统组件 在Android SDK Manager中,您必须先将SDK Tools更新到 最近发布并重新启动SDK Manager。如果你不这样做的话 最新的Android系统组件将无法下载。
您需要先更新SDK tools
,以便获得其他组件的最新版本。工具v23.0.5要求更新platform-tools
v19 +并使用v21 +。加平台,sys-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的项目需要extra-android-m2repository no extra-android-support
extra-android-m2repository
包含gradle / android studio的工件(.aar文件)。
注意:如果您使用Android Studio进行开发,请选择并安装 Android支持存储库项目(Android支持 Eclipse上的图书馆。)
Android Studio的更多信息:https://developer.android.com/tools/support-library/setup.html
<强> 4。缺少的DrawerLayoutImpl类包含在android.support: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'
我不知道,但也许它复制了其他没有内部缺失类和jar的android.support版本。
通过在构建中添加以下内容来检查内部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支持库,没有aar的版本21.0.1,请尝试新的21.0.2版本。
<强> 5。 Espresso或Double Espresso,DrawerActions,espresso-contrib jar和其他依赖
关于Espresso
和旧支持库的其他传递依赖关系,您可以尝试升级它们或排除android.support dependencies:
configurations {
compile.exclude group: 'com.android.support'
}
我不熟悉Double espresso
,这是Android版Espresso测试实用程序的纯Gradle端口,但Jake Wharton撰写here(Related issue):
重复的依赖关系
由于当前Android插件中存在错误,您可能需要排除 应用程序和测试应用程序中重复的依赖项。
例如,如果您依赖Dagger,则需要 暂时将其从测试依赖项中手动排除。
androidTestCompile(&#39; com.jakewharton.espresso:espresso:1.1-r3&#39;){
排除组:&#39; com.squareup.dagger&#39;以下是 Espresso的依赖关系,可能需要暂时排除:com.squareup.dagger:dagger:1.2.1 ......以及&#39; support-v4&#39; 模块:
com.android.support:support-v4:21.0.0&lt; -----------
关于Espresso,我读到支持kitkat,但我不知道Lollipop现在是否得到完全支持,我发现了Espresso.registerIdlingResources(instance)的相关问题,我引用{{3} }}:
有时您想要使用Espresso的版本 控制依赖关系例如,Espresso使用Hamcrest Matchers因此明确依赖它。避免 Dexing你的测试代码错误你可以使用no dependencies Espresso的版本并明确声明您的依赖项
如果您需要contrib库中的任何功能,例如 DrawerActions ,从here复制 espresso-contrib jar 。 使用 DrawerLayout 的Espresso操作。
<强> 6。 ProGuard缩小步骤:更新API 21更改规则
我正在使用here,因为我看到你正在学习Material Design和所有这些东西。他们最近Google I/O app implementation但我认为他们没有更新ProGuard规则。如果您使用类似的配置,我建议您更新它并检查aapt规则以确保保留缺少的类。
作为实验样本,我也在学习它,我添加了updated the app, added app-compat and fixed nav drawer和includedescriptorclasses
# Added includedescriptorclasses for unkept android.support descriptors
-keep,includedescriptorclasses public class * extends android.view.View {
public <init>(android.content.Context);
public <init>(android.content.Context, android.util.AttributeSet);
public <init>(android.content.Context, android.util.AttributeSet, int);
public <init>(android.content.Context, android.util.AttributeSet, int, int); # Added in API 21
public void set*(...);
关于无关描述符的44个注释中的43个被解决,包括
注意:配置保留入口点&#39; android.support.v4.widget.DrawerLayout {void setDrawerListener(android.support.v4.widget.DrawerLayout $ DrawerListener); }&#39;,但不是描述符类&#39; android.support.v4.widget.DrawerLayout $ DrawerListener&#39;
答案 2 :(得分:1)
编辑答案:
使用DrawerActions.java
库中的预编译espresso-contrib
类可以解决此问题。有关设置说明,请参阅link。
答案 3 :(得分:1)
在build.gradle中手动将库添加到服务器:
testCompile fileTree(dir: "${rootDir}/YourProject/build/intermediates/exploded-aar/com.android.support/support-v4/", include: "**/*.jar")
答案 4 :(得分:0)
您可能遇到过此问题(?)https://code.google.com/p/android/issues/detail?id=77682#c11。
@Tor Norbye最后的评论,具有讽刺意味:),
类加载器问题固定为0.8.14。 gradle sync问题有 在Gradle 0.14中固定在模型侧。
答案 5 :(得分:0)
经过多次测试后,我可以添加依赖项:
compile 'com.android.support:internal_impl:22.2.0'
不幸的是,当您更改“支持”时,您必须更新此JAR。 lib版本。