Search in sources :

Example 76 with TaskAction

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);
        }
    }
}
Also used : AndroidLibrary(com.android.builder.model.AndroidLibrary) AarBundle(com.taobao.android.builder.dependency.model.AarBundle) AwbBundle(com.taobao.android.builder.dependency.model.AwbBundle) SoLibrary(com.taobao.android.builder.dependency.model.SoLibrary) MtlBaseTaskAction(com.taobao.android.builder.tasks.manager.MtlBaseTaskAction) TaskAction(org.gradle.api.tasks.TaskAction)

Example 77 with TaskAction

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());
}
Also used : ZipOutputStream(java.util.zip.ZipOutputStream) OutputFile(org.gradle.api.tasks.OutputFile) InputFile(org.gradle.api.tasks.InputFile) MtlBaseTaskAction(com.taobao.android.builder.tasks.manager.MtlBaseTaskAction) TaskAction(org.gradle.api.tasks.TaskAction)

Example 78 with TaskAction

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);
    }
}
Also used : ParsingProcessOutputHandler(com.android.ide.common.blame.ParsingProcessOutputHandler) ProcessOutputHandler(com.android.ide.common.process.ProcessOutputHandler) MergingLog(com.android.ide.common.blame.MergingLog) AaptOutputParser(com.android.ide.common.blame.parser.aapt.AaptOutputParser) IOException(java.io.IOException) MergingLogRewriter(com.android.ide.common.blame.MergingLogRewriter) ProcessException(com.android.ide.common.process.ProcessException) AaptPackageProcessBuilder(com.android.builder.core.AaptPackageProcessBuilder) ToolOutputParser(com.android.ide.common.blame.parser.ToolOutputParser) DocumentException(org.dom4j.DocumentException) GradleException(org.gradle.api.GradleException) NonNull(com.android.annotations.NonNull) AndroidBuilder(com.android.builder.core.AndroidBuilder) AtlasBuilder(com.android.builder.core.AtlasBuilder) File(java.io.File) InputFile(org.gradle.api.tasks.InputFile) ParsingProcessOutputHandler(com.android.ide.common.blame.ParsingProcessOutputHandler) MtlBaseTaskAction(com.taobao.android.builder.tasks.manager.MtlBaseTaskAction) TaskAction(org.gradle.api.tasks.TaskAction)

Example 79 with TaskAction

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);
}
Also used : StopExecutionException(org.gradle.api.tasks.StopExecutionException) ApkFileList(com.taobao.android.object.ApkFileList) File(java.io.File) TPatchTool(com.taobao.android.TPatchTool) BuildPatchInfos(com.taobao.android.object.BuildPatchInfos) UpdateInfo(com.taobao.android.builder.tools.update.UpdateInfo) DocumentException(org.dom4j.DocumentException) StopExecutionException(org.gradle.api.tasks.StopExecutionException) IOException(java.io.IOException) MtlBaseTaskAction(com.taobao.android.builder.tasks.manager.MtlBaseTaskAction) TaskAction(org.gradle.api.tasks.TaskAction)

Aggregations

TaskAction (org.gradle.api.tasks.TaskAction)79 File (java.io.File)33 MtlBaseTaskAction (com.taobao.android.builder.tasks.manager.MtlBaseTaskAction)22 GradleException (org.gradle.api.GradleException)12 ArrayList (java.util.ArrayList)11 AwbBundle (com.taobao.android.builder.dependency.model.AwbBundle)10 AndroidDependencyTree (com.taobao.android.builder.dependency.AndroidDependencyTree)9 Project (org.gradle.api.Project)8 InputFile (org.gradle.api.tasks.InputFile)8 ExecutorServicesHelper (com.taobao.android.builder.tools.concurrent.ExecutorServicesHelper)7 IOException (java.io.IOException)7 OutputFile (org.gradle.api.tasks.OutputFile)7 InvalidUserDataException (org.gradle.api.InvalidUserDataException)6 SoLibrary (com.taobao.android.builder.dependency.model.SoLibrary)5 HashSet (java.util.HashSet)5 WorkResult (org.gradle.api.tasks.WorkResult)5 AndroidLibrary (com.android.builder.model.AndroidLibrary)4 StyledTextOutput (org.gradle.internal.logging.text.StyledTextOutput)4 BuildOperationLogger (org.gradle.internal.operations.logging.BuildOperationLogger)4 URLClassLoader (java.net.URLClassLoader)3