Jenkins上的Robolectric 2.x + Maven因APKLIB依赖而失败

Niq*_*iqo 5 android maven jenkins robolectric

我使用Robolectric 2.x(我实际上使用2.1)与使用APKLIB的Android Maven项目有问题.

它接缝Robolectric 2.x期望在project.properties中引用Android库(此文件由Intellij或Eclipse自动填充).

在开发环境中使用Maven时工作正常,但是如果我想在CI服务器(Jenkins)上构建我的Android Maven项目,我的构建失败了:

java.lang.RuntimeException: huh? can't find parent for StyleData{name='Theme_Abs_cs', parent='@style/Theme_Sherlock_Light'}

显然Robolectric找不到Android库依赖项.

有没有人使用Android APKLIB + Jenkins + Maven + Robolectric 2.x进行配置?

小智 8

以下是我们在Square处理这个问题的方法... android-maven-plugin解压缩你的APK依赖关系target/unpack,然后我们扩展RobolectricTestRunner将它们拉进去.有点笨重但我们想出的最好.

public class SquareTestRunner extends RobolectricTestRunner {
  private static boolean alreadyRegisteredAbs = false;

  public SquareTestRunner(Class<?> testClass) throws InitializationError {
    super(testClass);
  }

  @Override protected AndroidManifest createAppManifest(File baseDir) {
    return new MavenAndroidManifest(Fs.newFile(new File(".")));
  }

  public static class MavenAndroidManifest extends AndroidManifest {
    public MavenAndroidManifest(FsFile baseDir) {
      super(baseDir);
    }

    @Override protected List<FsFile> findLibraries() {
      // Try unpack folder from maven.
      FsFile unpack = getBaseDir().join("target/unpack/apklibs");
      if (unpack.exists()) {
        FsFile[] libs = unpack.listFiles();
        if (libs != null) {
          return asList(libs);
        }
      }
      return emptyList();
    }

    @Override protected AndroidManifest createLibraryAndroidManifest(FsFile libraryBaseDir) {
      return new MavenAndroidManifest(libraryBaseDir);
    }
  }
}
Run Code Online (Sandbox Code Playgroud)