use of com.taobao.android.builder.tools.proguard.domain.Result in project atlas by alibaba.
the class BundleProguarder method loadProguardFromCache.
public static Result loadProguardFromCache(AppVariantContext appVariantContext, Input input) throws Exception {
Result result = new Result();
String md5 = input.getMd5();
result.key = input.getAwbBundles().get(0).getAwbBundle().getName() + "_" + md5;
logger.info("bundle proguard for " + result.key + " with md5 key " + md5);
File cacheDir = FileCacheCenter.queryFile(CACHE_TYPE, result.key, true, isRemoteCacheEnabled(appVariantContext));
result.cacheDir = cacheDir;
if (null == cacheDir || !cacheDir.exists()) {
logger.warn("bundle proguard for " + result.key + " miss cache " + cacheDir.getAbsolutePath());
return result;
}
logger.warn("bundle proguard for " + result.key + " hit cache ");
File keepJson = new File(cacheDir, "keep.json");
File proguardCfg = new File(cacheDir, "proguard.cfg");
File usageCfg = new File(cacheDir, "usage.cfg");
Map<String, File> md5Map = input.getMd5Files();
if (input.getAwbBundles().get(0).getAwbBundle().isMainBundle()) {
AtlasBuildContext.atlasMainDexHelperMap.get(appVariantContext.getVariantName()).getMainDexFiles().clear();
AtlasBuildContext.atlasMainDexHelperMap.get(appVariantContext.getVariantName()).getInputDirs().clear();
for (File file : cacheDir.listFiles()) {
if (file.getName().endsWith("jar") && ZipUtils.isZipFile(file)) {
String jarMd5 = file.getName().replace(".jar", "");
File srcFile = md5Map.get(jarMd5);
if (null != srcFile && srcFile.exists()) {
String fileName = FileNameUtils.getUniqueJarName(srcFile);
FileUtils.copyFile(file, new File(input.proguardOutputDir, fileName + ".jar"));
AtlasBuildContext.atlasMainDexHelperMap.get(appVariantContext.getVariantName()).addMainDex(new BuildAtlasEnvTask.FileIdentity(fileName, new File(input.proguardOutputDir, fileName + ".jar"), false, false));
} else {
FileUtils.copyFileToDirectory(file, input.proguardOutputDir);
AtlasBuildContext.atlasMainDexHelperMap.get(appVariantContext.getVariantName()).addMainDex(new BuildAtlasEnvTask.FileIdentity(file.getName(), new File(input.proguardOutputDir, file.getName()), false, false));
}
}
}
File awbProguardDir = input.printConfiguration.getParentFile();
// FileUtils.copyFileToDirectory(keepJson, awbProguardDir);
if (proguardCfg.exists()) {
FileUtils.copyFileToDirectory(proguardCfg, awbProguardDir);
}
if (usageCfg.exists()) {
FileUtils.copyFileToDirectory(usageCfg, awbProguardDir);
}
result.success = true;
return result;
} else {
if (!keepJson.exists()) {
logger.error("bundle proguard for " + result.key + " missing keep.json ");
FileUtils.deleteDirectory(cacheDir);
return result;
}
Map<AwbTransform, List<File>> transformListMap = new HashMap<>();
for (AwbTransform awbTransform : input.getAwbBundles()) {
File awbProguardDir = appVariantContext.getAwbProguardDir(awbTransform.getAwbBundle());
FileUtils.copyFileToDirectory(keepJson, awbProguardDir);
if (proguardCfg.exists()) {
FileUtils.copyFileToDirectory(proguardCfg, awbProguardDir);
}
if (usageCfg.exists()) {
FileUtils.copyFileToDirectory(usageCfg, awbProguardDir);
}
List<File> inputFiles = new ArrayList<>();
transformListMap.put(awbTransform, inputFiles);
List<File> files = new ArrayList<>();
files.addAll(awbTransform.getInputLibraries());
// configs.add();
if (null != awbTransform.getInputDirs() && awbTransform.getInputDirs().size() > 0) {
files.addAll(awbTransform.getInputDirs());
}
for (File oldFile : files) {
File file = new File(cacheDir, input.getFileMd5s().get(oldFile) + ".jar");
if (file.exists()) {
if (ZipUtils.isZipFile(file)) {
inputFiles.add(file);
}
} else {
logger.error("miss proguard jar for :" + file.getAbsolutePath());
FileUtils.deleteDirectory(cacheDir);
logger.error("delete cache Dir " + cacheDir.getAbsolutePath());
return result;
}
}
}
for (AwbTransform awbTransform : input.getAwbBundles()) {
awbTransform.setInputFiles(transformListMap.get(awbTransform));
awbTransform.getInputDirs().clear();
awbTransform.getInputLibraries().clear();
awbTransform.getAwbBundle().setKeepProguardFile(keepJson);
}
result.success = true;
return result;
}
}
use of com.taobao.android.builder.tools.proguard.domain.Result in project atlas by alibaba.
the class BundleProguarder method execute.
public static void execute(AppVariantContext appVariantContext, Input input) throws Exception {
if (input.proguardOutputDir != null && input.proguardOutputDir.exists()) {
FileUtils.cleanDirectory(input.proguardOutputDir);
}
if (!appVariantContext.getAtlasExtension().getTBuildConfig().isProguardCacheEnabled()) {
doProguard(appVariantContext, input);
return;
}
String md5 = input.getMd5();
Result result = loadProguardFromCache(appVariantContext, input);
String bundleName = input.getAwbBundles().get(0).getAwbBundle().getName();
if (result.success) {
fileLogger.log(bundleName + " hit cache " + result.cacheDir.getAbsolutePath());
return;
}
fileLogger.log(bundleName + " miss cache " + result.cacheDir.getAbsolutePath());
long startTime = System.currentTimeMillis();
doProguard(appVariantContext, input);
double during = (System.currentTimeMillis() - startTime) / 1000.0;
fileLogger.log(bundleName + "proguard consume (s) " + during);
// cache
if (null != result.cacheDir) {
try {
cacheProguard(appVariantContext, input, result);
} catch (Throwable e) {
logger.error(e.getMessage(), e);
}
}
}
Aggregations