alibaba / atlas

A powerful Android Dynamic Component Framework.
Apache License 2.0
8.12k stars 1.48k forks source link

UpdateBundleInfo的定义无法找到 #348

Closed cumtkangyi closed 5 years ago

cumtkangyi commented 5 years ago

android.taobao.atlas.versionInfo.BaselineInfoManager.UpdateBundleInfo;这个类的定义无法找到,请问这个是自动生成的代码吗? 是在编译过程插进去的吗? 这块代码是不是仅仅是用于热补丁的?

package com.taobao.atlas.update.util;

import android.taobao.atlas.bundleInfo.AtlasBundleInfoManager; import android.taobao.atlas.framework.Atlas; import android.taobao.atlas.versionInfo.BaselineInfoManager; import android.taobao.atlas.versionInfo.BaselineInfoManager.UpdateBundleInfo; import android.util.Pair; import com.taobao.atlas.update.model.UpdateInfo; import com.taobao.atlas.update.model.UpdateInfo.Item; import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import org.osgi.framework.BundleException;

public class PatchInstaller { private Map<String, Pair> mergeOutputs; private UpdateInfo updateInfo;

public PatchInstaller(Map<String, Pair> paramMap, UpdateInfo paramUpdateInfo) { this.mergeOutputs = paramMap; this.updateInfo = paramUpdateInfo; }

private void saveBaselineInfo(UpdateInfo paramUpdateInfo, List paramList) { ArrayList localArrayList = new ArrayList(); Iterator localIterator = paramUpdateInfo.updateBundles.iterator(); while (localIterator.hasNext()) { UpdateInfo.Item localItem = (UpdateInfo.Item)localIterator.next(); if (paramList.contains(localItem.name)) { BaselineInfoManager.UpdateBundleInfo localUpdateBundleInfo = new BaselineInfoManager.UpdateBundleInfo(); localUpdateBundleInfo.name = localItem.name; localUpdateBundleInfo.version = localItem.version; localUpdateBundleInfo.size = "0"; localArrayList.add(localUpdateBundleInfo); } } try { if (paramUpdateInfo.dexPatchVersion > 0L) { BaselineInfoManager.instance().saveBaselineInfo(paramUpdateInfo.dexPatchVersion, localArrayList); return; } BaselineInfoManager.instance().saveBaselineInfo(paramUpdateInfo.updateVersion, localArrayList); return; } catch (Throwable paramUpdateInfo) {} }

public void install() throws BundleException { if (this.mergeOutputs.isEmpty()) { throw new BundleException("merge bundles is empty"); } Object localObject4 = this.mergeOutputs.entrySet().iterator(); Object localObject1 = new String[this.mergeOutputs.size()]; Object localObject2 = new File[this.mergeOutputs.size()]; Object localObject3 = new String[this.mergeOutputs.size()]; int i = 0; while (((Iterator)localObject4).hasNext()) { localObject5 = (Map.Entry)((Iterator)localObject4).next(); localObject1[i] = ((String)((Map.Entry)localObject5).getKey()); localObject5 = (Pair)((Map.Entry)localObject5).getValue(); localObject2[i] = new File((String)((Pair)localObject5).first); if (!localObject2[i].exists()) { throw new BundleException("bundle input is wrong"); } localObject3[i] = ((String)((Pair)localObject5).second); i += 1; } localObject4 = Arrays.asList((Object[])localObject1); Object localObject5 = this.updateInfo.updateBundles.iterator(); while (((Iterator)localObject5).hasNext()) { UpdateInfo.Item localItem = (UpdateInfo.Item)((Iterator)localObject5).next(); if ((!((List)localObject4).contains(localItem.name)) && (AtlasBundleInfoManager.instance().isInternalBundle(localItem.name))) { throw new BundleException("bundle " + localItem.name + " is error"); } } Atlas.getInstance().installOrUpdate((String[])localObject1, (File[])localObject2, (String[])localObject3, this.updateInfo.dexPatchVersion); localObject1 = new ArrayList(); localObject2 = this.updateInfo.updateBundles.iterator(); while (((Iterator)localObject2).hasNext()) { localObject3 = (UpdateInfo.Item)((Iterator)localObject2).next(); if ((localObject3 != null) && (localObject3.version.split("@")[1].trim().equals("-1"))) { ((List)localObject1).add(((UpdateInfo.Item)localObject3).name); } } if (((List)localObject1).size() > 0) { Atlas.getInstance().restoreBundle((String[])((List)localObject1).toArray(new String[((List)localObject1).size()])); } saveBaselineInfo(this.updateInfo, (List)localObject4); } }

hwjump commented 5 years ago

这个是打包插进去的。 当时这么做 1是减少文件读写出错的概率 2是为了性能。 这段代码不仅仅用于热补丁,用于框架知道bundle的信息,算是一个基础信息。