我最近将java.lang.NoClassDefFoundError: android/support/v7/appcompat/R$styleable
从 2.4 升级到 3.0-rc3 ,经过大量的摔跤,我把它缩小到最后由于问题导致少数案例失败的错误:
Robolectrie 3.0
它通过99%的案例,但有一些因此而失败。我的应用程序的其他组件都以漂亮的颜色传递,我只看到它发生在我的模块中。
我查了一下,似乎问题源于R.java
没有生成build.gradle
文件。但是,似乎没有解决方案,除了一些对我不起作用的targetSDK
黑客。我也尝试过编辑AppCompat
并确保在清单中设置apply from: rootProject.file('src/build/groovy/android-library.gradle')
dependencies {
compile project(':myApplication')
compile('com.application:player:') {
exclude module: 'support-v4'
}
compile "com.android.support:support-v4:19.1.0"
compile 'com.android.support:cardview-v7:21.0.+'
compile "com.android.support:appcompat-v7:22.1.0"
}
主题,但无济于事。
的build.gradle:
jqXHR
有人知道如何解决这个问题吗?它耗费了我很多时间!
答案 0 :(得分:0)
Robolectric 3.0已经开始将几个影子类分成不同的工件。您可能只需要将shadows-support-v4
添加为依赖项(同时保留*-v7
的{{1}}依赖项。
答案 1 :(得分:0)
我遇到了同样的问题。
这就是我为修复它所做的。
假设您已包含以下库 support-v4,com.android.support.v7的appcompat lib,robolectric 3.0和junit以及对你正在测试的apkib的引用(根据sschuberth和该线程的其他贡献者)
假设被测活动是XXXActivity
。
为了在我们的单元测试用例中填充我们的上下文 - 我们使用
Robolectric.buildActivity(XXXActivity.class).create().start().resume().get();
我把它改成了
Robolectric.buildActivity(XXXMockActivity.class).create().start().resume().get();
其中XXXMockActivity
仅在调用super.onCreate()
之前设置主题。
public class XXXMockActivity extends XXXActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
setTheme(R.style.Theme_AppCompat_Light_DarkActionBar);
super.onCreate(savedInstanceState);
}
}
答案 2 :(得分:0)
我只是忽略了测试 - 似乎没有解决这个问题的方法。正如有人评论我原来的问题,这是一个未解决的问题:github.com/robolectric/robolectric/issues/1796
如果你遇到同样的问题,我不会花太多时间在上面。