use of org.gradle.api.tasks.TaskAction in project atlas by alibaba.
the class PrepareAwoBundleTask method doFullTaskAction.
@TaskAction
public void doFullTaskAction() throws IOException {
AwbBundle awbBundle = libVariantContext.getAwbBundle();
prepare(awbBundle.getBundle(), awbBundle.getFolder(), true);
List<SoLibrary> soLibraries = awbBundle.getSoLibraries();
for (final SoLibrary soLibrary : soLibraries) {
prepare(soLibrary.getSoLibFile(), soLibrary.getFolder(), false);
}
List<? extends AndroidLibrary> aarBundles = awbBundle.getLibraryDependencies();
for (final AndroidLibrary libraryDependency : aarBundles) {
if (libraryDependency instanceof AarBundle) {
AarBundle aarBundle = (AarBundle) libraryDependency;
prepare(aarBundle.getBundle(), aarBundle.getFolder(), true);
}
}
}
use of org.gradle.api.tasks.TaskAction in project atlas by alibaba.
the class DexInstallTask method doTask.
@TaskAction
public void doTask() throws IOException, SigningException {
dexFile = getDexFile();
File targetPatch = getKernelSoFile();
ZipOutputStream out = null;
try {
out = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(targetPatch)));
zip(new File[] { dexFile }, "", out);
} catch (Throwable e) {
throw new RuntimeException(e);
}
if (out != null) {
try {
out.close();
} catch (Throwable e) {
}
}
AwoInstaller.installAwoSo(getBuilder(), targetPatch, getPackageName(), getLogger());
}
use of org.gradle.api.tasks.TaskAction in project atlas by alibaba.
the class TPatchDiffResAPBuildTask method doAction.
@TaskAction
protected void doAction() throws IOException {
manifestFile = getManifestFile();
aaptOptions = getAaptOptions();
diffResDir = getDiffResDir();
resourceConfigs = getResourceConfigs();
preferredDensity = getPreferredDensity();
//TODO minifyManifest
File miniManifest = new File(packageOutputFile.getParentFile(), "AndroidManifest.xml");
try {
ManifestFileUtils.minifyManifest(manifestFile, miniManifest);
} catch (DocumentException e) {
throw new GradleException(e.getMessage());
}
File assetsFolder = new File(diffResDir, "assets");
File resFolder = new File(diffResDir, "res");
if (!assetsFolder.exists()) {
assetsFolder.mkdirs();
}
if (!resFolder.exists()) {
resFolder.mkdirs();
}
AaptPackageProcessBuilder aaptPackageCommandBuilder = new AaptPackageProcessBuilder(miniManifest, aaptOptions).setAssetsFolder(assetsFolder).setResFolder(resFolder).setLibraries(libraries).setPackageForR(packageForR).setResPackageOutput(packageOutputFile.getAbsolutePath()).setType(type).setDebuggable(debuggable).setPseudoLocalesEnabled(pseudoLocalesEnabled).setResourceConfigs(resourceConfigs).setSplits(splits).setPreferredDensity(preferredDensity);
@NonNull AndroidBuilder builder = getBuilder();
MergingLog mergingLog = new MergingLog(mergeBlameLogFolder);
ProcessOutputHandler processOutputHandler = new ParsingProcessOutputHandler(new ToolOutputParser(new AaptOutputParser(), getILogger()), new MergingLogRewriter(mergingLog, builder.getErrorReporter()));
try {
if (builder instanceof AtlasBuilder) {
((AtlasBuilder) builder).processResources(aaptPackageCommandBuilder, enforceUniquePackageName, processOutputHandler);
}
} catch (IOException e) {
throw new RuntimeException(e);
} catch (InterruptedException e) {
throw new RuntimeException(e);
} catch (ProcessException e) {
throw new RuntimeException(e);
}
}
use of org.gradle.api.tasks.TaskAction in project atlas by alibaba.
the class TPatchTask method doTPatch.
@TaskAction
public void doTPatch() throws Exception {
patchContext = getPatchContext();
signingConfig = getSigningConfig();
outPatchFolder = getOutPatchFolder();
// 获取容器版本
String baseApkVersion = patchContext.getBaseVersionName();
String newApkVersion = patchContext.versionName;
File baseApk = patchContext.getBaseApk();
File newApk = patchContext.diffApkFile;
boolean retainMainBundleRes = true;
if (null == newApk || !newApk.exists()) {
newApk = patchContext.newApk;
retainMainBundleRes = false;
}
getLogger().info("BaseApk:" + baseApk + ",baseVersion:" + baseApkVersion + ",newApk:" + newApk + ",newApkVersion:" + newApkVersion);
TPatchTool tPatchTool = new TPatchTool(baseApk, newApk, baseApkVersion, newApkVersion, patchContext.diffBundleDex);
tPatchTool.setMainBundleName(patchContext.mainBundleName);
if (StringUtils.isNotBlank(patchContext.excludeFiles)) {
tPatchTool.setNotIncludeFiles(patchContext.excludeFiles.split(","));
}
tPatchTool.setRetainMainBundleRes(retainMainBundleRes);
if (null != patchContext.artifactBundleInfos) {
tPatchTool.setArtifactBundleInfos(patchContext.artifactBundleInfos);
}
tPatchTool.setBaseApkFileList(patchContext.getBaseApkFiles());
tPatchTool.setNewApkFileList(patchContext.getNewApkFiles());
tPatchTool.setLogger(getILogger());
tPatchTool.setOnlyIncludeModifyBundle(patchContext.onlyBuildModifyAwb);
tPatchTool.setNoPatchBundles(patchContext.notPatchBundles);
ApkFileList apkFileList = AtlasBuildContext.finalApkFileList;
try {
tPatchTool.setDexcode(apkFileList.getMainBundle().get("classes.dex"));
FileUtils.writeStringToFile(new File(getOutPatchFolder(), "tpatch-bundles.json"), JSON.toJSONString(patchContext.artifactBundleInfos));
getLogger().info("start to do patch");
tPatchTool.doPatch(outPatchFolder, true, new File(getOutPatchFolder(), "patchs.json"), StringUtils.isNotEmpty(patchContext.tpatchHistoryUrl), patchContext.tpatchHistoryUrl, patchContext.appSignName);
getLogger().info("finish do patch");
File patchJson = new File(getOutPatchFolder(), "patchs.json");
File updateJson = new File(getOutPatchFolder(), "update.json");
String json = FileUtils.readFileToString(patchJson);
BuildPatchInfos patchInfos = JSON.parseObject(json, BuildPatchInfos.class);
UpdateInfo updateInfo = new UpdateInfo(patchInfos);
FileUtils.writeStringToFile(updateJson, JSON.toJSONString(updateInfo, true));
} catch (Exception e) {
e.printStackTrace();
throw new StopExecutionException(e.getMessage());
}
File baseVesrionApk = new File(patchContext.newApk.getParentFile(), patchContext.newApk.getName().replace(".apk", "-" + baseApkVersion + ".apk"));
FileUtils.copyFile(patchContext.getBaseApk(), baseVesrionApk);
if (patchContext.writeBuildInfo && StringUtils.isNotEmpty(patchContext.buildId)) {
File buildFile = new File(getOutPatchFolder(), "build.txt");
FileUtils.writeStringToFile(buildFile, patchContext.buildId + "," + patchContext.versionName + "," + apkFileList.getMainBundle().get("classes.dex"));
if (buildFile != null && buildFile.exists()) {
getLogger().debug("write build to apk!");
BuildHelper.writeFileToApk(buildFile, baseVesrionApk, "assets/build.txt");
}
BuildHelper.reSign(baseVesrionApk, signingConfig);
}
FileUtils.forceDelete(patchContext.newApk);
}
Aggregations