private BaseVariant getVariant(Context context) throws TransformException { TransformTask transformTask = (TransformTask)context; Project project = transformTask.getProject(); List<BaseVariant> variants = new ArrayList<>(); if (project.getPlugins().hasPlugin(LibraryPlugin.class)) { LibraryExtension android = project.getExtensions().getByType(LibraryExtension.class); variants.addAll(android.getLibraryVariants()); variants.addAll(android.getTestVariants()); variants.addAll(android.getUnitTestVariants()); } else if (project.getPlugins().hasPlugin(AppPlugin.class)) { AppExtension android = project.getExtensions().getByType(AppExtension.class); variants.addAll(android.getApplicationVariants()); variants.addAll(android.getTestVariants()); variants.addAll(android.getUnitTestVariants()); } else if (project.getPlugins().hasPlugin(TestPlugin.class)) { TestExtension android = project.getExtensions().getByType(TestExtension.class); variants.addAll(android.getApplicationVariants()); } else { throw new TransformException(project.getName() + " isn't an Android project"); } Optional<BaseVariant> variant = variants.stream().filter(v -> transformTask.getVariantName().equals(v.getName())).findFirst(); if (!variant.isPresent()) { throw new TransformException("Variant not found: " + project.getName() + " / " + transformTask.getVariantName()); } return variant.get(); }
@Nullable private static List<File> getBootClasspath(Project project) { PluginCollection<AppPlugin> appPlugins = project.getPlugins().withType(AppPlugin.class); if (!appPlugins.isEmpty()) { AppExtension androidExtension = project.getExtensions().getByType(AppExtension.class); return androidExtension.getBootClasspath(); } PluginCollection<LibraryPlugin> libPlugins = project.getPlugins().withType(LibraryPlugin.class); if (!libPlugins.isEmpty()) { LibraryExtension androidExtension = project.getExtensions().getByType(LibraryExtension.class); return androidExtension.getBootClasspath(); } PluginCollection<TestPlugin> testPlugins = project.getPlugins().withType(TestPlugin.class); if (!testPlugins.isEmpty()) { TestExtension androidExtension = project.getExtensions().getByType(TestExtension.class); return androidExtension.getBootClasspath(); } return null; }
@Nullable static BaseVariant findVariant(Project project, @Nullable String userConfiguredBuildVariantName) { String testBuildType = getTestBuildType(project); PluginCollection<AppPlugin> appPlugins = project.getPlugins().withType(AppPlugin.class); if (!appPlugins.isEmpty()) { AppExtension androidExtension = project.getExtensions().getByType(AppExtension.class); return findVariant(new ArrayList<>(androidExtension.getApplicationVariants()), testBuildType, userConfiguredBuildVariantName); } PluginCollection<LibraryPlugin> libPlugins = project.getPlugins().withType(LibraryPlugin.class); if (!libPlugins.isEmpty()) { LibraryExtension androidExtension = project.getExtensions().getByType(LibraryExtension.class); return findVariant(new ArrayList<>(androidExtension.getLibraryVariants()), testBuildType, userConfiguredBuildVariantName); } PluginCollection<TestPlugin> testPlugins = project.getPlugins().withType(TestPlugin.class); if (!testPlugins.isEmpty()) { TestExtension androidExtension = project.getExtensions().getByType(TestExtension.class); return findVariant(new ArrayList<>(androidExtension.getApplicationVariants()), testBuildType, userConfiguredBuildVariantName); } return null; }
@Nullable private static List<File> getBootClasspath(Project project) { PluginCollection<AppPlugin> appPlugins = project.getPlugins().withType(AppPlugin.class); if (!appPlugins.isEmpty()) { AppExtension androidExtension = project.getExtensions().getByType(AppExtension.class); return androidExtension.getBootClasspath(); } PluginCollection<LibraryPlugin> libPlugins = project.getPlugins().withType(LibraryPlugin.class); if (!libPlugins.isEmpty()) { LibraryExtension androidExtension = project.getExtensions().getByType(LibraryExtension.class); return androidExtension.getBootClasspath(); } PluginCollection<TestPlugin> testPlugins = project.getPlugins().withType(TestPlugin.class); if (!testPlugins.isEmpty()) { TestExtension androidExtension = project.getExtensions().getByType(TestExtension.class); return androidExtension.getBootClasspath(); } return null; }
@Nullable static BaseVariant findVariant(Project project, @Nullable String userConfiguredBuildVariantName) { String testBuildType = getTestBuildType(project); PluginCollection<AppPlugin> appPlugins = project.getPlugins().withType(AppPlugin.class); if (!appPlugins.isEmpty()) { AppExtension androidExtension = project.getExtensions().getByType(AppExtension.class); return findVariant(new ArrayList<>(androidExtension.getApplicationVariants()), testBuildType, userConfiguredBuildVariantName); } PluginCollection<LibraryPlugin> libPlugins = project.getPlugins().withType(LibraryPlugin.class); if (!libPlugins.isEmpty()) { LibraryExtension androidExtension = project.getExtensions().getByType(LibraryExtension.class); return findVariant(new ArrayList<>(androidExtension.getLibraryVariants()), testBuildType, userConfiguredBuildVariantName); } PluginCollection<TestPlugin> testPlugins = project.getPlugins().withType(TestPlugin.class); if (!testPlugins.isEmpty()) { TestExtension androidExtension = project.getExtensions().getByType(TestExtension.class); return findVariant(new ArrayList<>(androidExtension.getApplicationVariants()), testBuildType, userConfiguredBuildVariantName); } return null; }
private void useHackedAndroidJar(BaseExtension android) { if (android instanceof LibraryExtension) { ((LibraryExtension)android).getLibraryVariants().all(libraryVariant -> useHackedAndroidJar(libraryVariant)); ((LibraryExtension)android).getTestVariants().all(testVariant -> useHackedAndroidJar(testVariant)); ((LibraryExtension)android).getUnitTestVariants().all(unitTestVariant -> useHackedAndroidJar(unitTestVariant)); } else if (android instanceof AppExtension) { ((AppExtension)android).getApplicationVariants().all(applicationVariant -> useHackedAndroidJar(applicationVariant)); ((AppExtension)android).getTestVariants().all(testVariant -> useHackedAndroidJar(testVariant)); ((AppExtension)android).getUnitTestVariants().all(unitTestVariant -> useHackedAndroidJar(unitTestVariant)); } else if (android instanceof TestExtension) { ((TestExtension)android).getApplicationVariants().all(applicationVariant -> useHackedAndroidJar(applicationVariant)); } else { System.err.println("Skipping extension of type " + android.getClass().getSimpleName()); } }
public static void forEachVariant(BaseExtension extension, Action<BaseVariant> action) { if (extension instanceof AppExtension) { ((AppExtension)extension).getApplicationVariants().all(action); } else if (extension instanceof LibraryExtension) { ((LibraryExtension)extension).getLibraryVariants().all(action); if (extension instanceof FeatureExtension) { ((FeatureExtension)extension).getFeatureVariants().all(action); } } else if (extension instanceof TestExtension) { ((TestExtension)extension).getApplicationVariants().all(action); } if (extension instanceof TestedExtension) { ((TestedExtension)extension).getTestVariants().all(action); ((TestedExtension)extension).getUnitTestVariants().all(action); } }