package android.taobao.atlas.framework; import android.annotation.SuppressLint; import android.os.Build; import android.os.Build.VERSION; import android.taobao.atlas.framework.bundlestorage.BundleArchive; import android.taobao.atlas.log.Logger; import android.taobao.atlas.log.LoggerFactory; import android.taobao.atlas.runtime.ClassNotFoundInterceptorCallback; import android.taobao.atlas.runtime.RuntimeVariables; import android.taobao.atlas.util.AtlasFileLock; import android.taobao.atlas.util.BundleLock; import android.taobao.atlas.util.StringUtils; import com.taobao.android.taotv.mediaplayer.api.PlayerConstant; import com.tencent.mm.sdk.platformtools.C0264v; import com.tencent.mm.sdk.platformtools.FilePathGenerator; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FilenameFilter; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.security.AccessController; import java.util.ArrayList; import java.util.Arrays; import java.util.Dictionary; import java.util.EventListener; import java.util.HashMap; import java.util.HashSet; import java.util.Hashtable; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Properties; import java.util.StringTokenizer; import java.util.concurrent.ConcurrentHashMap; import mtopsdk.common.util.SymbolExpUtil; import org.osgi.framework.AdminPermission; import org.osgi.framework.Bundle; import org.osgi.framework.BundleEvent; import org.osgi.framework.BundleException; import org.osgi.framework.BundleListener; import org.osgi.framework.Constants; import org.osgi.framework.Filter; import org.osgi.framework.FrameworkEvent; import org.osgi.framework.FrameworkListener; import org.osgi.framework.InvalidSyntaxException; import org.osgi.framework.ServiceEvent; import org.osgi.framework.ServiceListener; import org.osgi.framework.ServiceReference; import org.osgi.service.packageadmin.ExportedPackage; import org.osgi.service.packageadmin.PackageAdmin; import org.osgi.service.startlevel.StartLevel; public final class Framework { private static final AdminPermission ADMIN_PERMISSION; private static String BASEDIR = null; private static String BUNDLE_LOCATION = null; static int CLASSLOADER_BUFFER_SIZE = 0; static boolean DEBUG_BUNDLES = false; static boolean DEBUG_CLASSLOADING = false; static boolean DEBUG_PACKAGES = false; static boolean DEBUG_SERVICES = false; static final String FRAMEWORK_VERSION = "0.9.0"; static int LOG_LEVEL; static String STORAGE_LOCATION; private static boolean STRICT_STARTUP; static List<BundleListener> bundleListeners; static Map<String, Bundle> bundles; private static ClassNotFoundInterceptorCallback classNotFoundCallback; static Map<String, List<ServiceReference>> classes_services; static Map<Package, Package> exportedPackages; static List<FrameworkListener> frameworkListeners; static boolean frameworkStartupShutdown; static int initStartlevel; static final Logger log; static boolean mIsEnableBundleInstallWhenFindClass; static Map<String, String> mMapForComAndBundles; static Properties properties; static boolean restart; static List<ServiceListenerEntry> serviceListeners; static List<ServiceReference> services; static int startlevel; static List<BundleListener> syncBundleListeners; static SystemBundle systemBundle; static ClassLoader systemClassLoader; static List<String> writeAheads; static final class ServiceListenerEntry implements EventListener { final Filter filter; final ServiceListener listener; ServiceListenerEntry(ServiceListener serviceListener, String str) throws InvalidSyntaxException { this.listener = serviceListener; this.filter = str == null ? null : RFC1960Filter.fromString(str); } public boolean equals(Object obj) { if (!(obj instanceof ServiceListenerEntry)) { return false; } return this.listener.equals(((ServiceListenerEntry) obj).listener); } public int hashCode() { return (this.filter != null ? this.filter.hashCode() >> 8 : 0) + this.listener.hashCode(); } public String toString() { return this.listener + " " + this.filter; } } private static final class SystemBundle implements Bundle, PackageAdmin, StartLevel { private final Dictionary<String, String> props; private final ServiceReference[] registeredServices; int state; class AnonymousClass_1 extends Thread { final /* synthetic */ boolean val$restart; AnonymousClass_1(boolean z) { this.val$restart = z; } public void run() { Framework.shutdown(this.val$restart); } } class AnonymousClass_2 extends Thread { final /* synthetic */ int val$targetLevel; AnonymousClass_2(int i) { this.val$targetLevel = i; } public void run() { List bundles = Framework.getBundles(); SystemBundle.this.setLevel((Bundle[]) bundles.toArray(new Bundle[bundles.size()]), this.val$targetLevel, false); Framework.notifyFrameworkListeners(8, Framework.systemBundle, null); Framework.storeMetadata(); } } class AnonymousClass_3 extends Thread { final /* synthetic */ Bundle[] val$bundleArray; AnonymousClass_3(Bundle[] bundleArr) { this.val$bundleArray = bundleArr; } public void run() { /* JADX: method processing error */ /* Error: jadx.core.utils.exceptions.JadxRuntimeException: Exception block dominator not found, method:android.taobao.atlas.framework.Framework.SystemBundle.AnonymousClass_3.run():void. bs: [] at jadx.core.dex.visitors.regions.ProcessTryCatchRegions.searchTryCatchDominators(ProcessTryCatchRegions.java:82) at jadx.core.dex.visitors.regions.ProcessTryCatchRegions.process(ProcessTryCatchRegions.java:45) at jadx.core.dex.visitors.regions.RegionMakerVisitor.postProcessRegions(RegionMakerVisitor.java:57) at jadx.core.dex.visitors.regions.RegionMakerVisitor.visit(RegionMakerVisitor.java:52) at jadx.core.dex.visitors.DepthTraversal.visit(DepthTraversal.java:31) at jadx.core.dex.visitors.DepthTraversal.visit(DepthTraversal.java:17) at jadx.core.dex.visitors.DepthTraversal.visit(DepthTraversal.java:14) at jadx.core.dex.visitors.DepthTraversal.visit(DepthTraversal.java:14) at jadx.core.ProcessClass.process(ProcessClass.java:34) at jadx.api.JadxDecompiler.processClass(JadxDecompiler.java:281) at jadx.api.JavaClass.decompile(JavaClass.java:59) at jadx.api.JavaClass.getCode(JavaClass.java:45) at jadx.gui.treemodel.JClass.getContent(JClass.java:74) at jadx.gui.ui.ContentArea.<init>(ContentArea.java:66) at jadx.gui.ui.ContentPanel.<init>(ContentPanel.java:28) at jadx.gui.ui.TabbedPane.getCodePanel(TabbedPane.java:112) at jadx.gui.ui.TabbedPane.showCode(TabbedPane.java:69) at jadx.gui.ui.MainWindow.treeClickAction(MainWindow.java:241) at jadx.gui.ui.MainWindow.access$1000(MainWindow.java:66) at jadx.gui.ui.MainWindow$15.mouseClicked(MainWindow.java:519) at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:270) at java.awt.Component.processMouseEvent(Component.java:6528) at javax.swing.JComponent.processMouseEvent(JComponent.java:3322) at java.awt.Component.processEvent(Component.java:6290) at java.awt.Container.processEvent(Container.java:2234) at java.awt.Component.dispatchEventImpl(Component.java:4881) at java.awt.Container.dispatchEventImpl(Container.java:2292) at java.awt.Component.dispatchEvent(Component.java:4703) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4542) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462) at java.awt.Container.dispatchEventImpl(Container.java:2278) at java.awt.Window.dispatchEventImpl(Window.java:2739) at java.awt.Component.dispatchEvent(Component.java:4703) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:751) at java.awt.EventQueue.access$500(EventQueue.java:97) at java.awt.EventQueue$3.run(EventQueue.java:702) at java.awt.EventQueue$3.run(EventQueue.java:696) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86) at java.awt.EventQueue$4.run(EventQueue.java:724) at java.awt.EventQueue$4.run(EventQueue.java:722) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75) at java.awt.EventQueue.dispatchEvent(EventQueue.java:721) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) */ /* r9 = this; r2 = 0; r4 = android.taobao.atlas.framework.Framework.exportedPackages; monitor-enter(r4); r0 = r9.val$bundleArray; Catch:{ all -> 0x0047 } if (r0 != 0) goto L_0x002f; Catch:{ all -> 0x0047 } L_0x0008: r0 = android.taobao.atlas.framework.Framework.getBundles(); Catch:{ all -> 0x0047 } r1 = r0.size(); Catch:{ all -> 0x0047 } r1 = new org.osgi.framework.Bundle[r1]; Catch:{ all -> 0x0047 } r0 = r0.toArray(r1); Catch:{ all -> 0x0047 } r0 = (org.osgi.framework.Bundle[]) r0; Catch:{ all -> 0x0047 } r0 = (org.osgi.framework.Bundle[]) r0; Catch:{ all -> 0x0047 } r3 = r0; Catch:{ all -> 0x0047 } L_0x001b: r5 = new java.util.ArrayList; Catch:{ all -> 0x0047 } r0 = r3.length; Catch:{ all -> 0x0047 } r5.<init>(r0); Catch:{ all -> 0x0047 } r1 = r2; Catch:{ all -> 0x0047 } L_0x0022: r0 = r3.length; Catch:{ all -> 0x0047 } if (r1 >= r0) goto L_0x004a; Catch:{ all -> 0x0047 } L_0x0025: r0 = r3[r1]; Catch:{ all -> 0x0047 } r6 = android.taobao.atlas.framework.Framework.systemBundle; Catch:{ all -> 0x0047 } if (r0 != r6) goto L_0x0033; Catch:{ all -> 0x0047 } L_0x002b: r0 = r1 + 1; Catch:{ all -> 0x0047 } r1 = r0; Catch:{ all -> 0x0047 } goto L_0x0022; Catch:{ all -> 0x0047 } L_0x002f: r0 = r9.val$bundleArray; Catch:{ all -> 0x0047 } r3 = r0; Catch:{ all -> 0x0047 } goto L_0x001b; Catch:{ all -> 0x0047 } L_0x0033: r0 = r3[r1]; Catch:{ all -> 0x0047 } r0 = (android.taobao.atlas.framework.BundleImpl) r0; Catch:{ all -> 0x0047 } r6 = r0.classloader; Catch:{ all -> 0x0047 } if (r6 == 0) goto L_0x0041; Catch:{ all -> 0x0047 } L_0x003b: r0 = r0.classloader; Catch:{ all -> 0x0047 } r0 = r0.originalExporter; Catch:{ all -> 0x0047 } if (r0 == 0) goto L_0x002b; Catch:{ all -> 0x0047 } L_0x0041: r0 = r3[r1]; Catch:{ all -> 0x0047 } r5.add(r0); Catch:{ all -> 0x0047 } goto L_0x002b; L_0x0047: r0 = move-exception; monitor-exit(r4); throw r0; L_0x004a: r0 = r5.isEmpty(); Catch:{ all -> 0x0047 } if (r0 == 0) goto L_0x0052; Catch:{ all -> 0x0047 } L_0x0050: monitor-exit(r4); Catch:{ all -> 0x0047 } L_0x0051: return; Catch:{ all -> 0x0047 } L_0x0052: r0 = android.taobao.atlas.framework.Framework.DEBUG_PACKAGES; Catch:{ all -> 0x0047 } if (r0 == 0) goto L_0x0077; Catch:{ all -> 0x0047 } L_0x0056: r0 = android.taobao.atlas.framework.Framework.log; Catch:{ all -> 0x0047 } r0 = r0.isDebugEnabled(); Catch:{ all -> 0x0047 } if (r0 == 0) goto L_0x0077; Catch:{ all -> 0x0047 } L_0x005e: r0 = android.taobao.atlas.framework.Framework.log; Catch:{ all -> 0x0047 } r1 = new java.lang.StringBuilder; Catch:{ all -> 0x0047 } r1.<init>(); Catch:{ all -> 0x0047 } r3 = "REFRESHING PACKAGES FROM BUNDLES "; Catch:{ all -> 0x0047 } r1 = r1.append(r3); Catch:{ all -> 0x0047 } r1 = r1.append(r5); Catch:{ all -> 0x0047 } r1 = r1.toString(); Catch:{ all -> 0x0047 } r0.debug(r1); Catch:{ all -> 0x0047 } L_0x0077: r6 = new java.util.HashSet; Catch:{ all -> 0x0047 } r6.<init>(); Catch:{ all -> 0x0047 } L_0x007c: r0 = r5.isEmpty(); Catch:{ all -> 0x0047 } if (r0 != 0) goto L_0x00ca; Catch:{ all -> 0x0047 } L_0x0082: r0 = 0; Catch:{ all -> 0x0047 } r0 = r5.remove(r0); Catch:{ all -> 0x0047 } r0 = (android.taobao.atlas.framework.BundleImpl) r0; Catch:{ all -> 0x0047 } r1 = r6.contains(r0); Catch:{ all -> 0x0047 } if (r1 != 0) goto L_0x007c; Catch:{ all -> 0x0047 } L_0x008f: r1 = android.taobao.atlas.framework.Framework.SystemBundle.this; Catch:{ all -> 0x0047 } r3 = 1; Catch:{ all -> 0x0047 } r7 = r1.getExportedPackages(r0, r3); Catch:{ all -> 0x0047 } if (r7 == 0) goto L_0x00c2; Catch:{ all -> 0x0047 } L_0x0098: r3 = r2; Catch:{ all -> 0x0047 } L_0x0099: r1 = r7.length; Catch:{ all -> 0x0047 } if (r3 >= r1) goto L_0x00c2; Catch:{ all -> 0x0047 } L_0x009c: r1 = r7[r3]; Catch:{ all -> 0x0047 } r1 = (android.taobao.atlas.framework.Package) r1; Catch:{ all -> 0x0047 } r8 = r1.importingBundles; Catch:{ all -> 0x0047 } if (r8 != 0) goto L_0x00a8; Catch:{ all -> 0x0047 } L_0x00a4: r1 = r3 + 1; Catch:{ all -> 0x0047 } r3 = r1; Catch:{ all -> 0x0047 } goto L_0x0099; Catch:{ all -> 0x0047 } L_0x00a8: r8 = r1.importingBundles; Catch:{ all -> 0x0047 } r1 = r1.importingBundles; Catch:{ all -> 0x0047 } r1 = r1.size(); Catch:{ all -> 0x0047 } r1 = new org.osgi.framework.Bundle[r1]; Catch:{ all -> 0x0047 } r1 = r8.toArray(r1); Catch:{ all -> 0x0047 } r1 = (org.osgi.framework.Bundle[]) r1; Catch:{ all -> 0x0047 } r1 = (org.osgi.framework.Bundle[]) r1; Catch:{ all -> 0x0047 } r1 = java.util.Arrays.asList(r1); Catch:{ all -> 0x0047 } r5.addAll(r1); Catch:{ all -> 0x0047 } goto L_0x00a4; Catch:{ all -> 0x0047 } L_0x00c2: r1 = r0.classloader; Catch:{ all -> 0x0047 } if (r1 == 0) goto L_0x007c; Catch:{ all -> 0x0047 } L_0x00c6: r6.add(r0); Catch:{ all -> 0x0047 } goto L_0x007c; Catch:{ all -> 0x0047 } L_0x00ca: r0 = android.taobao.atlas.framework.Framework.DEBUG_PACKAGES; Catch:{ all -> 0x0047 } if (r0 == 0) goto L_0x00ef; Catch:{ all -> 0x0047 } L_0x00ce: r0 = android.taobao.atlas.framework.Framework.log; Catch:{ all -> 0x0047 } r0 = r0.isDebugEnabled(); Catch:{ all -> 0x0047 } if (r0 == 0) goto L_0x00ef; Catch:{ all -> 0x0047 } L_0x00d6: r0 = android.taobao.atlas.framework.Framework.log; Catch:{ all -> 0x0047 } r1 = new java.lang.StringBuilder; Catch:{ all -> 0x0047 } r1.<init>(); Catch:{ all -> 0x0047 } r3 = "UPDATE GRAPH IS "; Catch:{ all -> 0x0047 } r1 = r1.append(r3); Catch:{ all -> 0x0047 } r1 = r1.append(r6); Catch:{ all -> 0x0047 } r1 = r1.toString(); Catch:{ all -> 0x0047 } r0.debug(r1); Catch:{ all -> 0x0047 } L_0x00ef: r0 = r6.size(); Catch:{ all -> 0x0047 } r5 = new org.osgi.framework.Bundle[r0]; Catch:{ all -> 0x0047 } r1 = -1; Catch:{ all -> 0x0047 } r0 = android.taobao.atlas.framework.Framework.getBundles(); Catch:{ all -> 0x0047 } r3 = r0.size(); Catch:{ all -> 0x0047 } r3 = new org.osgi.framework.Bundle[r3]; Catch:{ all -> 0x0047 } r0 = r0.toArray(r3); Catch:{ all -> 0x0047 } r0 = (org.osgi.framework.Bundle[]) r0; Catch:{ all -> 0x0047 } r0 = (org.osgi.framework.Bundle[]) r0; Catch:{ all -> 0x0047 } r3 = r2; Catch:{ all -> 0x0047 } L_0x0109: r7 = r0.length; Catch:{ all -> 0x0047 } if (r3 >= r7) goto L_0x011d; Catch:{ all -> 0x0047 } L_0x010c: r7 = r0[r3]; Catch:{ all -> 0x0047 } r7 = r6.contains(r7); Catch:{ all -> 0x0047 } if (r7 == 0) goto L_0x011a; Catch:{ all -> 0x0047 } L_0x0114: r1 = r1 + 1; Catch:{ all -> 0x0047 } r7 = r0[r3]; Catch:{ all -> 0x0047 } r5[r1] = r7; Catch:{ all -> 0x0047 } L_0x011a: r3 = r3 + 1; Catch:{ all -> 0x0047 } goto L_0x0109; Catch:{ all -> 0x0047 } L_0x011d: r3 = android.taobao.atlas.framework.Framework.startlevel; Catch:{ all -> 0x0047 } r0 = android.taobao.atlas.framework.Framework.SystemBundle.this; Catch:{ all -> 0x0047 } r1 = 0; Catch:{ all -> 0x0047 } r6 = 1; Catch:{ all -> 0x0047 } r0.setLevel(r5, r1, r6); Catch:{ all -> 0x0047 } r1 = r2; Catch:{ all -> 0x0047 } L_0x0127: r0 = r5.length; Catch:{ all -> 0x0047 } if (r1 >= r0) goto L_0x0144; L_0x012a: r0 = r5[r1]; Catch:{ Exception -> 0x013f } r0 = (android.taobao.atlas.framework.BundleImpl) r0; Catch:{ Exception -> 0x013f } r0 = r0.classloader; Catch:{ Exception -> 0x013f } r6 = 0; Catch:{ Exception -> 0x013f } r0.cleanup(r6); Catch:{ Exception -> 0x013f } r0 = r5[r1]; Catch:{ Exception -> 0x013f } r0 = (android.taobao.atlas.framework.BundleImpl) r0; Catch:{ Exception -> 0x013f } r6 = 0; Catch:{ Exception -> 0x013f } r0.staleExportedPackages = r6; Catch:{ Exception -> 0x013f } L_0x013b: r0 = r1 + 1; r1 = r0; goto L_0x0127; L_0x013f: r0 = move-exception; r0.printStackTrace(); Catch:{ all -> 0x0047 } goto L_0x013b; Catch:{ all -> 0x0047 } L_0x0144: r1 = r2; Catch:{ all -> 0x0047 } L_0x0145: r0 = r5.length; Catch:{ all -> 0x0047 } if (r1 >= r0) goto L_0x015d; Catch:{ all -> 0x0047 } L_0x0148: r0 = r5[r1]; Catch:{ all -> 0x0047 } r0 = (android.taobao.atlas.framework.BundleImpl) r0; Catch:{ all -> 0x0047 } r0 = r0.classloader; Catch:{ all -> 0x0047 } r6 = r0.exports; Catch:{ all -> 0x0047 } r6 = r6.length; Catch:{ all -> 0x0047 } if (r6 <= 0) goto L_0x0159; Catch:{ all -> 0x0047 } L_0x0153: r6 = r0.exports; Catch:{ all -> 0x0047 } r7 = 0; Catch:{ all -> 0x0047 } android.taobao.atlas.framework.Framework.export(r0, r6, r7); Catch:{ all -> 0x0047 } L_0x0159: r0 = r1 + 1; Catch:{ all -> 0x0047 } r1 = r0; Catch:{ all -> 0x0047 } goto L_0x0145; Catch:{ all -> 0x0047 } L_0x015d: r1 = r2; Catch:{ all -> 0x0047 } L_0x015e: r0 = r5.length; Catch:{ all -> 0x0047 } if (r1 >= r0) goto L_0x0179; L_0x0161: r0 = r5[r1]; Catch:{ BundleException -> 0x0174 } r0 = (android.taobao.atlas.framework.BundleImpl) r0; Catch:{ BundleException -> 0x0174 } r0 = r0.classloader; Catch:{ BundleException -> 0x0174 } r2 = 1; Catch:{ BundleException -> 0x0174 } r6 = new java.util.HashSet; Catch:{ BundleException -> 0x0174 } r6.<init>(); Catch:{ BundleException -> 0x0174 } r0.resolveBundle(r2, r6); Catch:{ BundleException -> 0x0174 } L_0x0170: r0 = r1 + 1; r1 = r0; goto L_0x015e; L_0x0174: r0 = move-exception; r0.printStackTrace(); Catch:{ all -> 0x0047 } goto L_0x0170; Catch:{ all -> 0x0047 } L_0x0179: r0 = android.taobao.atlas.framework.Framework.SystemBundle.this; Catch:{ all -> 0x0047 } r1 = 1; Catch:{ all -> 0x0047 } r0.setLevel(r5, r3, r1); Catch:{ all -> 0x0047 } r0 = 4; Catch:{ all -> 0x0047 } r1 = android.taobao.atlas.framework.Framework.systemBundle; Catch:{ all -> 0x0047 } r2 = 0; Catch:{ all -> 0x0047 } android.taobao.atlas.framework.Framework.notifyFrameworkListeners(r0, r1, r2); Catch:{ all -> 0x0047 } monitor-exit(r4); Catch:{ all -> 0x0047 } goto L_0x0051; */ throw new UnsupportedOperationException("Method not decompiled: android.taobao.atlas.framework.Framework.SystemBundle.AnonymousClass_3.run():void"); } } SystemBundle() { this.props = new Hashtable(); this.props.put(Constants.BUNDLE_NAME, Constants.SYSTEM_BUNDLE_LOCATION); this.props.put(Constants.BUNDLE_VERSION, Framework.FRAMEWORK_VERSION); this.props.put(Constants.BUNDLE_VENDOR, "Atlas"); ServiceReferenceImpl serviceReferenceImpl = new ServiceReferenceImpl(this, this, null, new String[]{StartLevel.class.getName(), PackageAdmin.class.getName()}); Framework.addValue(Framework.classes_services, StartLevel.class.getName(), serviceReferenceImpl); Framework.addValue(Framework.classes_services, PackageAdmin.class.getName(), serviceReferenceImpl); Framework.services.add(serviceReferenceImpl); this.registeredServices = new ServiceReference[]{serviceReferenceImpl}; } public long getBundleId() { return 0; } public Dictionary<String, String> getHeaders() { return this.props; } public String getLocation() { return Constants.SYSTEM_BUNDLE_LOCATION; } public ServiceReference[] getRegisteredServices() { return this.registeredServices; } public URL getResource(String str) { return getClass().getResource(str); } public ServiceReference[] getServicesInUse() { return null; } public int getState() { return this.state; } public boolean hasPermission(Object obj) { return true; } public void start() throws BundleException { } public void stop() throws BundleException { shutdownThread(false); } public void uninstall() throws BundleException { throw new BundleException("Cannot uninstall the System Bundle"); } public void update() throws BundleException { shutdownThread(true); } private void shutdownThread(boolean z) { new AnonymousClass_1(z).start(); } public void update(InputStream inputStream) throws BundleException { shutdownThread(true); } public void update(File file) throws BundleException { shutdownThread(true); } public int getBundleStartLevel(Bundle bundle) { if (bundle == this) { return 0; } BundleImpl bundleImpl = (BundleImpl) bundle; if (bundleImpl.state != 1) { return bundleImpl.currentStartlevel; } throw new IllegalArgumentException("Bundle " + bundle + " has been uninstalled"); } public int getInitialBundleStartLevel() { return Framework.initStartlevel; } public int getStartLevel() { return Framework.startlevel; } public boolean isBundlePersistentlyStarted(Bundle bundle) { if (bundle == this) { return true; } BundleImpl bundleImpl = (BundleImpl) bundle; if (bundleImpl.state != 1) { return bundleImpl.persistently; } throw new IllegalArgumentException("Bundle " + bundle + " has been uninstalled"); } public void setBundleStartLevel(Bundle bundle, int i) { if (bundle == this) { throw new IllegalArgumentException("Cannot set the start level for the system bundle."); } BundleImpl bundleImpl = (BundleImpl) bundle; if (bundleImpl.state == 1) { throw new IllegalArgumentException("Bundle " + bundle + " has been uninstalled"); } else if (i <= 0) { throw new IllegalArgumentException("Start level " + i + " is not a valid level"); } else { bundleImpl.currentStartlevel = i; bundleImpl.updateMetadata(); if (i <= Framework.startlevel && bundle.getState() != 32 && bundleImpl.persistently) { try { bundleImpl.startBundle(); } catch (Throwable e) { e.printStackTrace(); Framework.notifyFrameworkListeners(2, bundle, e); } } else if (i <= Framework.startlevel) { } else { if (bundle.getState() != 4 || bundle.getState() != 2) { try { bundleImpl.stopBundle(); } catch (Throwable e2) { Framework.notifyFrameworkListeners(2, bundle, e2); } } } } } public void setInitialBundleStartLevel(int i) { if (i <= 0) { throw new IllegalArgumentException("Start level " + i + " is not a valid level"); } Framework.initStartlevel = i; } public void setStartLevel(int i) { if (i <= 0) { throw new IllegalArgumentException("Start level " + i + " is not a valid level"); } new AnonymousClass_2(i).start(); } @SuppressLint({"UseSparseArrays"}) private void setLevel(Bundle[] bundleArr, int i, boolean z) { if (Framework.startlevel != i) { int i2 = i > Framework.startlevel ? 1 : 0; int i3 = i2 != 0 ? i - Framework.startlevel : Framework.startlevel - i; Map hashMap = new HashMap(0); int i4 = 0; while (i4 < bundleArr.length) { if (bundleArr[i4] != Framework.systemBundle && (z || ((BundleImpl) bundleArr[i4]).persistently)) { int i5; BundleImpl bundleImpl = (BundleImpl) bundleArr[i4]; if (i2 != 0) { i5 = (bundleImpl.currentStartlevel - Framework.startlevel) - 1; } else { i5 = Framework.startlevel - bundleImpl.currentStartlevel; } if (i5 >= 0 && i5 < i3) { Framework.addValue(hashMap, Integer.valueOf(i5), bundleImpl); } } i4++; } for (int i6 = 0; i6 < i3; i6++) { if (i2 != 0) { Framework.startlevel++; } else { Framework.startlevel--; } List list = (List) hashMap.get(Integer.valueOf(i6)); if (list != null) { BundleImpl[] bundleImplArr = (BundleImpl[]) list.toArray(new BundleImpl[list.size()]); for (i4 = 0; i4 < bundleImplArr.length; i4++) { if (i2 != 0) { try { System.out.println("STARTING " + bundleImplArr[i4].location); bundleImplArr[i4].startBundle(); } catch (Throwable e) { e.getNestedException().printStackTrace(); e.printStackTrace(); Framework.notifyFrameworkListeners(2, Framework.systemBundle, e); } catch (Throwable e2) { e2.printStackTrace(); Framework.notifyFrameworkListeners(2, Framework.systemBundle, e2); } } else if (bundleImplArr[i4].getState() != 1) { System.out.println("STOPPING " + bundleImplArr[i4].location); bundleImplArr[(bundleImplArr.length - i4) - 1].stopBundle(); } } } } Framework.startlevel = i; } } public ExportedPackage[] getExportedPackages(Bundle bundle) { return getExportedPackages(bundle, false); } private ExportedPackage[] getExportedPackages(Bundle bundle, boolean z) { synchronized (Framework.exportedPackages) { if (bundle != null) { if (bundle != Framework.systemBundle) { BundleImpl bundleImpl = (BundleImpl) bundle; if (bundleImpl.state == 1) { ExportedPackage[] exportedPackageArr; if (z) { exportedPackageArr = bundleImpl.staleExportedPackages; } else { exportedPackageArr = null; } return exportedPackageArr; } String[] strArr = bundleImpl.classloader.exports; if (strArr == null) { return null; } ArrayList arrayList = new ArrayList(); for (String str : strArr) { Package packageR = (Package) Framework.exportedPackages.get(new Package(str, null, false)); if (packageR != null && packageR.classloader == bundleImpl.classloader) { if (packageR.resolved) { arrayList.add(packageR); } else { try { packageR.classloader.resolveBundle(true, new HashSet()); arrayList.add(packageR); } catch (BundleException e) { } } } } if (bundleImpl.staleExportedPackages != null) { arrayList.addAll(Arrays.asList(bundleImpl.staleExportedPackages)); } System.out.println("\tBundle " + bundleImpl + " has exported packages " + arrayList); return arrayList.isEmpty() ? null : (ExportedPackage[]) arrayList.toArray(new ExportedPackage[arrayList.size()]); } } return (ExportedPackage[]) Framework.exportedPackages.keySet().toArray(new ExportedPackage[Framework.exportedPackages.size()]); } } public org.osgi.service.packageadmin.ExportedPackage getExportedPackage(java.lang.String r7) { /* JADX: method processing error */ /* Error: jadx.core.utils.exceptions.JadxRuntimeException: Exception block dominator not found, method:android.taobao.atlas.framework.Framework.SystemBundle.getExportedPackage(java.lang.String):org.osgi.service.packageadmin.ExportedPackage. bs: [] at jadx.core.dex.visitors.regions.ProcessTryCatchRegions.searchTryCatchDominators(ProcessTryCatchRegions.java:82) at jadx.core.dex.visitors.regions.ProcessTryCatchRegions.process(ProcessTryCatchRegions.java:45) at jadx.core.dex.visitors.regions.RegionMakerVisitor.postProcessRegions(RegionMakerVisitor.java:57) at jadx.core.dex.visitors.regions.RegionMakerVisitor.visit(RegionMakerVisitor.java:52) at jadx.core.dex.visitors.DepthTraversal.visit(DepthTraversal.java:31) at jadx.core.dex.visitors.DepthTraversal.visit(DepthTraversal.java:17) at jadx.core.dex.visitors.DepthTraversal.visit(DepthTraversal.java:14) at jadx.core.ProcessClass.process(ProcessClass.java:34) at jadx.api.JadxDecompiler.processClass(JadxDecompiler.java:281) at jadx.api.JavaClass.decompile(JavaClass.java:59) at jadx.api.JavaClass.getCode(JavaClass.java:45) at jadx.gui.treemodel.JClass.getContent(JClass.java:74) at jadx.gui.ui.ContentArea.<init>(ContentArea.java:66) at jadx.gui.ui.ContentPanel.<init>(ContentPanel.java:28) at jadx.gui.ui.TabbedPane.getCodePanel(TabbedPane.java:112) at jadx.gui.ui.TabbedPane.showCode(TabbedPane.java:69) at jadx.gui.ui.MainWindow.treeClickAction(MainWindow.java:241) at jadx.gui.ui.MainWindow.access$1000(MainWindow.java:66) at jadx.gui.ui.MainWindow$15.mouseClicked(MainWindow.java:519) at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:270) at java.awt.Component.processMouseEvent(Component.java:6528) at javax.swing.JComponent.processMouseEvent(JComponent.java:3322) at java.awt.Component.processEvent(Component.java:6290) at java.awt.Container.processEvent(Container.java:2234) at java.awt.Component.dispatchEventImpl(Component.java:4881) at java.awt.Container.dispatchEventImpl(Container.java:2292) at java.awt.Component.dispatchEvent(Component.java:4703) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4542) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462) at java.awt.Container.dispatchEventImpl(Container.java:2278) at java.awt.Window.dispatchEventImpl(Window.java:2739) at java.awt.Component.dispatchEvent(Component.java:4703) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:751) at java.awt.EventQueue.access$500(EventQueue.java:97) at java.awt.EventQueue$3.run(EventQueue.java:702) at java.awt.EventQueue$3.run(EventQueue.java:696) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86) at java.awt.EventQueue$4.run(EventQueue.java:724) at java.awt.EventQueue$4.run(EventQueue.java:722) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75) at java.awt.EventQueue.dispatchEvent(EventQueue.java:721) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) */ /* r6 = this; r1 = 0; r2 = android.taobao.atlas.framework.Framework.exportedPackages; monitor-enter(r2); r0 = android.taobao.atlas.framework.Framework.exportedPackages; Catch:{ all -> 0x002d } r3 = new android.taobao.atlas.framework.Package; Catch:{ all -> 0x002d } r4 = 0; Catch:{ all -> 0x002d } r5 = 0; Catch:{ all -> 0x002d } r3.<init>(r7, r4, r5); Catch:{ all -> 0x002d } r0 = r0.get(r3); Catch:{ all -> 0x002d } r0 = (android.taobao.atlas.framework.Package) r0; Catch:{ all -> 0x002d } if (r0 != 0) goto L_0x0018; Catch:{ all -> 0x002d } L_0x0015: monitor-exit(r2); Catch:{ all -> 0x002d } r0 = r1; Catch:{ all -> 0x002d } L_0x0017: return r0; Catch:{ all -> 0x002d } L_0x0018: r3 = r0.resolved; Catch:{ all -> 0x002d } if (r3 != 0) goto L_0x0027; L_0x001c: r3 = r0.classloader; Catch:{ BundleException -> 0x0029 } r4 = 1; Catch:{ BundleException -> 0x0029 } r5 = new java.util.HashSet; Catch:{ BundleException -> 0x0029 } r5.<init>(); Catch:{ BundleException -> 0x0029 } r3.resolveBundle(r4, r5); Catch:{ BundleException -> 0x0029 } L_0x0027: monitor-exit(r2); goto L_0x0017; L_0x0029: r0 = move-exception; monitor-exit(r2); Catch:{ all -> 0x002d } r0 = r1; goto L_0x0017; L_0x002d: r0 = move-exception; monitor-exit(r2); throw r0; */ throw new UnsupportedOperationException("Method not decompiled: android.taobao.atlas.framework.Framework.SystemBundle.getExportedPackage(java.lang.String):org.osgi.service.packageadmin.ExportedPackage"); } public void refreshPackages(Bundle[] bundleArr) { new AnonymousClass_3(bundleArr).start(); } public String toString() { return "SystemBundle"; } } static android.taobao.atlas.framework.BundleImpl installNewBundle(java.lang.String r7, java.io.File r8) throws org.osgi.framework.BundleException { /* JADX: method processing error */ /* Error: jadx.core.utils.exceptions.JadxRuntimeException: Incorrect nodes count for selectOther: B:4:0x000f in [B:4:0x000f, B:8:0x002c, B:3:0x000e] at jadx.core.utils.BlockUtils.selectOther(BlockUtils.java:53) at jadx.core.dex.instructions.IfNode.initBlocks(IfNode.java:62) at jadx.core.dex.visitors.blocksmaker.BlockFinish.initBlocksInIfNodes(BlockFinish.java:48) at jadx.core.dex.visitors.blocksmaker.BlockFinish.visit(BlockFinish.java:33) at jadx.core.dex.visitors.DepthTraversal.visit(DepthTraversal.java:31) at jadx.core.dex.visitors.DepthTraversal.visit(DepthTraversal.java:17) at jadx.core.ProcessClass.process(ProcessClass.java:34) at jadx.api.JadxDecompiler.processClass(JadxDecompiler.java:281) at jadx.api.JavaClass.decompile(JavaClass.java:59) at jadx.api.JavaClass.getCode(JavaClass.java:45) at jadx.gui.treemodel.JClass.getContent(JClass.java:74) at jadx.gui.ui.ContentArea.<init>(ContentArea.java:66) at jadx.gui.ui.ContentPanel.<init>(ContentPanel.java:28) at jadx.gui.ui.TabbedPane.getCodePanel(TabbedPane.java:112) at jadx.gui.ui.TabbedPane.showCode(TabbedPane.java:69) at jadx.gui.ui.MainWindow.treeClickAction(MainWindow.java:241) at jadx.gui.ui.MainWindow.access$1000(MainWindow.java:66) at jadx.gui.ui.MainWindow$15.mouseClicked(MainWindow.java:519) at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:270) at java.awt.Component.processMouseEvent(Component.java:6528) at javax.swing.JComponent.processMouseEvent(JComponent.java:3322) at java.awt.Component.processEvent(Component.java:6290) at java.awt.Container.processEvent(Container.java:2234) at java.awt.Component.dispatchEventImpl(Component.java:4881) at java.awt.Container.dispatchEventImpl(Container.java:2292) at java.awt.Component.dispatchEvent(Component.java:4703) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4542) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462) at java.awt.Container.dispatchEventImpl(Container.java:2278) at java.awt.Window.dispatchEventImpl(Window.java:2739) at java.awt.Component.dispatchEvent(Component.java:4703) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:751) at java.awt.EventQueue.access$500(EventQueue.java:97) at java.awt.EventQueue$3.run(EventQueue.java:702) at java.awt.EventQueue$3.run(EventQueue.java:696) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86) at java.awt.EventQueue$4.run(EventQueue.java:724) at java.awt.EventQueue$4.run(EventQueue.java:722) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75) at java.awt.EventQueue.dispatchEvent(EventQueue.java:721) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) */ /* android.taobao.atlas.util.BundleLock.WriteLock(r7); Catch:{ all -> 0x002b } r0 = getBundle(r7); Catch:{ all -> 0x002b } r0 = (android.taobao.atlas.framework.BundleImpl) r0; Catch:{ all -> 0x002b } if (r0 == 0) goto L_0x000f; L_0x000b: android.taobao.atlas.util.BundleLock.WriteUnLock(r7); L_0x000e: return r0; L_0x000f: r1 = new java.io.File; Catch:{ all -> 0x002b } r0 = STORAGE_LOCATION; Catch:{ all -> 0x002b } r1.<init>(r0, r7); Catch:{ all -> 0x002b } r0 = new android.taobao.atlas.framework.BundleImpl; Catch:{ all -> 0x002b } r3 = new android.taobao.atlas.framework.BundleContextImpl; Catch:{ all -> 0x002b } r3.<init>(); Catch:{ all -> 0x002b } r4 = 0; Catch:{ all -> 0x002b } r6 = 1; Catch:{ all -> 0x002b } r2 = r7; Catch:{ all -> 0x002b } r5 = r8; Catch:{ all -> 0x002b } r0.<init>(r1, r2, r3, r4, r5, r6); Catch:{ all -> 0x002b } storeMetadata(); Catch:{ all -> 0x002b } android.taobao.atlas.util.BundleLock.WriteUnLock(r7); goto L_0x000e; L_0x002b: r0 = move-exception; android.taobao.atlas.util.BundleLock.WriteUnLock(r7); throw r0; */ throw new UnsupportedOperationException("Method not decompiled: android.taobao.atlas.framework.Framework.installNewBundle(java.lang.String, java.io.File):android.taobao.atlas.framework.BundleImpl"); } static android.taobao.atlas.framework.BundleImpl installNewBundle(java.lang.String r7, java.io.InputStream r8) throws org.osgi.framework.BundleException { /* JADX: method processing error */ /* Error: jadx.core.utils.exceptions.JadxRuntimeException: Incorrect nodes count for selectOther: B:4:0x000f in [B:4:0x000f, B:8:0x002c, B:3:0x000e] at jadx.core.utils.BlockUtils.selectOther(BlockUtils.java:53) at jadx.core.dex.instructions.IfNode.initBlocks(IfNode.java:62) at jadx.core.dex.visitors.blocksmaker.BlockFinish.initBlocksInIfNodes(BlockFinish.java:48) at jadx.core.dex.visitors.blocksmaker.BlockFinish.visit(BlockFinish.java:33) at jadx.core.dex.visitors.DepthTraversal.visit(DepthTraversal.java:31) at jadx.core.dex.visitors.DepthTraversal.visit(DepthTraversal.java:17) at jadx.core.ProcessClass.process(ProcessClass.java:34) at jadx.api.JadxDecompiler.processClass(JadxDecompiler.java:281) at jadx.api.JavaClass.decompile(JavaClass.java:59) at jadx.api.JavaClass.getCode(JavaClass.java:45) at jadx.gui.treemodel.JClass.getContent(JClass.java:74) at jadx.gui.ui.ContentArea.<init>(ContentArea.java:66) at jadx.gui.ui.ContentPanel.<init>(ContentPanel.java:28) at jadx.gui.ui.TabbedPane.getCodePanel(TabbedPane.java:112) at jadx.gui.ui.TabbedPane.showCode(TabbedPane.java:69) at jadx.gui.ui.MainWindow.treeClickAction(MainWindow.java:241) at jadx.gui.ui.MainWindow.access$1000(MainWindow.java:66) at jadx.gui.ui.MainWindow$15.mouseClicked(MainWindow.java:519) at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:270) at java.awt.Component.processMouseEvent(Component.java:6528) at javax.swing.JComponent.processMouseEvent(JComponent.java:3322) at java.awt.Component.processEvent(Component.java:6290) at java.awt.Container.processEvent(Container.java:2234) at java.awt.Component.dispatchEventImpl(Component.java:4881) at java.awt.Container.dispatchEventImpl(Container.java:2292) at java.awt.Component.dispatchEvent(Component.java:4703) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4542) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462) at java.awt.Container.dispatchEventImpl(Container.java:2278) at java.awt.Window.dispatchEventImpl(Window.java:2739) at java.awt.Component.dispatchEvent(Component.java:4703) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:751) at java.awt.EventQueue.access$500(EventQueue.java:97) at java.awt.EventQueue$3.run(EventQueue.java:702) at java.awt.EventQueue$3.run(EventQueue.java:696) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86) at java.awt.EventQueue$4.run(EventQueue.java:724) at java.awt.EventQueue$4.run(EventQueue.java:722) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75) at java.awt.EventQueue.dispatchEvent(EventQueue.java:721) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) */ /* android.taobao.atlas.util.BundleLock.WriteLock(r7); Catch:{ all -> 0x002b } r0 = getBundle(r7); Catch:{ all -> 0x002b } r0 = (android.taobao.atlas.framework.BundleImpl) r0; Catch:{ all -> 0x002b } if (r0 == 0) goto L_0x000f; L_0x000b: android.taobao.atlas.util.BundleLock.WriteUnLock(r7); L_0x000e: return r0; L_0x000f: r1 = new java.io.File; Catch:{ all -> 0x002b } r0 = STORAGE_LOCATION; Catch:{ all -> 0x002b } r1.<init>(r0, r7); Catch:{ all -> 0x002b } r0 = new android.taobao.atlas.framework.BundleImpl; Catch:{ all -> 0x002b } r3 = new android.taobao.atlas.framework.BundleContextImpl; Catch:{ all -> 0x002b } r3.<init>(); Catch:{ all -> 0x002b } r5 = 0; Catch:{ all -> 0x002b } r6 = 1; Catch:{ all -> 0x002b } r2 = r7; Catch:{ all -> 0x002b } r4 = r8; Catch:{ all -> 0x002b } r0.<init>(r1, r2, r3, r4, r5, r6); Catch:{ all -> 0x002b } storeMetadata(); Catch:{ all -> 0x002b } android.taobao.atlas.util.BundleLock.WriteUnLock(r7); goto L_0x000e; L_0x002b: r0 = move-exception; android.taobao.atlas.util.BundleLock.WriteUnLock(r7); throw r0; */ throw new UnsupportedOperationException("Method not decompiled: android.taobao.atlas.framework.Framework.installNewBundle(java.lang.String, java.io.InputStream):android.taobao.atlas.framework.BundleImpl"); } static { log = LoggerFactory.getInstance("Framework"); bundles = new ConcurrentHashMap(); services = new ArrayList(); classes_services = new HashMap(); bundleListeners = new ArrayList(); syncBundleListeners = new ArrayList(); serviceListeners = new ArrayList(); frameworkListeners = new ArrayList(); exportedPackages = new ConcurrentHashMap(); startlevel = 0; writeAheads = new ArrayList(); initStartlevel = 1; frameworkStartupShutdown = false; restart = false; mMapForComAndBundles = new HashMap(); mIsEnableBundleInstallWhenFindClass = false; ADMIN_PERMISSION = new AdminPermission(); } private Framework() { } static void startup() throws BundleException { int i; int property; frameworkStartupShutdown = true; System.out.println("---------------------------------------------------------"); System.out.println(" Atlas OSGi 0.9.0 on " + Build.MODEL + FilePathGenerator.ANDROID_DIR_SEP + Build.CPU_ABI + FilePathGenerator.ANDROID_DIR_SEP + VERSION.RELEASE + " starting ..."); System.out.println("---------------------------------------------------------"); long currentTimeMillis = System.currentTimeMillis(); boolean property2 = getProperty("osgi.init", false); if (property2) { i = -1; } else { i = restoreProfile(); restart = true; } if (i == -1) { restart = false; File file = new File(STORAGE_LOCATION); if (property2 && file.exists()) { System.out.println("Purging storage ..."); try { deleteDirectory(file); } catch (Throwable e) { throw new RuntimeException("deleteDirectory failed", e); } } try { file.mkdirs(); Integer.getInteger("osgi.maxLevel", Integer.valueOf(1)).intValue(); initStartlevel = getProperty("osgi.startlevel.bundle", 1); property = getProperty("osgi.startlevel.framework", 1); } catch (Throwable e2) { throw new RuntimeException("mkdirs failed", e2); } } property = i; systemBundle.setLevel((Bundle[]) getBundles().toArray(new Bundle[bundles.size()]), property, false); frameworkStartupShutdown = false; if (!restart) { try { storeProfile(); } catch (Throwable e22) { throw new RuntimeException("storeProfile failed", e22); } } long currentTimeMillis2 = System.currentTimeMillis() - currentTimeMillis; System.out.println("---------------------------------------------------------"); System.out.println(" Framework " + (restart ? "restarted" : "started") + " in " + currentTimeMillis2 + " milliseconds."); System.out.println("---------------------------------------------------------"); System.out.flush(); systemBundle.state = 32; try { notifyFrameworkListeners(1, systemBundle, null); } catch (Throwable e222) { throw new RuntimeException("notifyFrameworkListeners failed", e222); } } public static ClassLoader getSystemClassLoader() { return systemClassLoader; } public static List<Bundle> getBundles() { List<Bundle> arrayList = new ArrayList(bundles.size()); synchronized (bundles) { arrayList.addAll(bundles.values()); } return arrayList; } public static Bundle getBundle(String str) { return (Bundle) bundles.get(str); } public static Bundle getBundle(long j) { return null; } static void shutdown(boolean z) { System.out.println("---------------------------------------------------------"); System.out.println(" Atlas OSGi shutting down ..."); System.out.println(" Bye !"); System.out.println("---------------------------------------------------------"); systemBundle.state = 16; systemBundle.setLevel((Bundle[]) getBundles().toArray(new Bundle[bundles.size()]), 0, true); bundles.clear(); systemBundle.state = 1; if (z) { try { startup(); } catch (Throwable th) { th.printStackTrace(); } } } public static void initialize(Properties properties) { if (properties == null) { properties = new Properties(); } properties = properties; File filesDir = RuntimeVariables.androidApplication.getFilesDir(); if (filesDir == null || !filesDir.exists()) { filesDir = RuntimeVariables.androidApplication.getFilesDir(); } BASEDIR = properties.getProperty("android.taobao.atlas.basedir", filesDir.getAbsolutePath()); BUNDLE_LOCATION = properties.getProperty("android.taobao.atlas.jars", "file:" + BASEDIR); CLASSLOADER_BUFFER_SIZE = getProperty("android.taobao.atlas.classloader.buffersize", (int) PlayerConstant.PLAYER_PLATFORM_WMWEB); LOG_LEVEL = getProperty("android.taobao.atlas.log.level", 6); DEBUG_BUNDLES = getProperty("android.taobao.atlas.debug.bundles", false); DEBUG_PACKAGES = getProperty("android.taobao.atlas.debug.packages", false); DEBUG_SERVICES = getProperty("android.taobao.atlas.debug.services", false); DEBUG_CLASSLOADING = getProperty("android.taobao.atlas.debug.classloading", false); if (getProperty("android.taobao.atlas.debug", false)) { System.out.println("SETTING ALL DEBUG FLAGS"); LOG_LEVEL = 3; DEBUG_BUNDLES = true; DEBUG_PACKAGES = true; DEBUG_SERVICES = true; DEBUG_CLASSLOADING = true; } STRICT_STARTUP = getProperty("android.taobao.atlas.strictStartup", false); String property = properties.getProperty("org.osgi.framework.system.packages"); if (property != null) { StringTokenizer stringTokenizer = new StringTokenizer(property, SymbolExpUtil.SYMBOL_COMMA); int countTokens = stringTokenizer.countTokens(); for (int i = 0; i < countTokens; i++) { BundleClassLoader.FRAMEWORK_PACKAGES.add(stringTokenizer.nextToken().trim()); } } properties.put(Constants.FRAMEWORK_EXECUTIONENVIRONMENT, System.getProperty("java.specification.name") + FilePathGenerator.ANDROID_DIR_SEP + System.getProperty("java.specification.version")); Properties properties2 = properties; String str = Constants.FRAMEWORK_OS_NAME; Object property2 = System.getProperty("os.name"); if (property2 == null) { property2 = "undefined"; } properties2.put(str, property2); properties2 = properties; str = Constants.FRAMEWORK_OS_VERSION; property2 = System.getProperty("os.version"); if (property2 == null) { property2 = "undefined"; } properties2.put(str, property2); properties2 = properties; str = Constants.FRAMEWORK_PROCESSOR; property2 = System.getProperty("os.arch"); if (property2 == null) { property2 = "undefined"; } properties2.put(str, property2); properties.put(Constants.FRAMEWORK_VERSION, FRAMEWORK_VERSION); properties.put(Constants.FRAMEWORK_VENDOR, "Atlas"); property2 = Locale.getDefault().getLanguage(); properties2 = properties; str = Constants.FRAMEWORK_LANGUAGE; if (property2 == null) { property2 = C0264v.ENGLISH; } properties2.put(str, property2); STORAGE_LOCATION = properties.getProperty("android.taobao.atlas.storage", properties.getProperty("org.osgi.framework.dir", BASEDIR + File.separatorChar + "storage")) + File.separatorChar; launch(); notifyFrameworkListeners(0, systemBundle, null); } private static void launch() { systemBundle = new SystemBundle(); systemBundle.state = 8; } public static boolean getProperty(String str, boolean z) { if (properties == null) { return z; } String str2 = (String) properties.get(str); return str2 != null ? Boolean.valueOf(str2).booleanValue() : z; } public static int getProperty(String str, int i) { if (properties == null) { return i; } String str2 = (String) properties.get(str); return str2 != null ? Integer.parseInt(str2) : i; } public static String getProperty(String str) { if (properties == null) { return null; } return (String) properties.get(str); } public static String getProperty(String str, String str2) { return properties == null ? str2 : (String) properties.get(str); } protected static void warning(String str) throws RuntimeException { if (getProperty("android.taobao.atlas.strictStartup", false)) { throw new RuntimeException(str); } System.err.println("WARNING: " + str); } private static void storeProfile() { BundleImpl[] bundleImplArr = (BundleImpl[]) getBundles().toArray(new BundleImpl[bundles.size()]); for (BundleImpl updateMetadata : bundleImplArr) { updateMetadata.updateMetadata(); } storeMetadata(); } static void storeMetadata() { File file; Throwable e; try { file = new File(STORAGE_LOCATION, "meta"); try { if (!AtlasFileLock.getInstance().LockExclusive(file)) { log.error("Failed to get fileLock for " + file.getAbsolutePath()); AtlasFileLock.getInstance().unLock(file); } else if (file.length() > 0) { AtlasFileLock.getInstance().unLock(file); } else { DataOutputStream dataOutputStream = new DataOutputStream(new FileOutputStream(file)); dataOutputStream.writeInt(startlevel); String join = StringUtils.join(writeAheads.toArray(), SymbolExpUtil.SYMBOL_COMMA); if (join == null) { join = com.taobao.tao.util.Constants.ALIPAY_PARNER; } dataOutputStream.writeUTF(join); dataOutputStream.flush(); dataOutputStream.close(); AtlasFileLock.getInstance().unLock(file); } } catch (IOException e2) { e = e2; try { log.error("Could not save meta data.", e); AtlasFileLock.getInstance().unLock(file); } catch (Throwable th) { e = th; AtlasFileLock.getInstance().unLock(file); throw e; } } } catch (IOException e3) { e = e3; file = null; log.error("Could not save meta data.", e); AtlasFileLock.getInstance().unLock(file); } catch (Throwable th2) { e = th2; file = null; AtlasFileLock.getInstance().unLock(file); throw e; } } private static int restoreProfile() { try { System.out.println("Restoring profile"); File file = new File(STORAGE_LOCATION, "meta"); if (file.exists()) { DataInputStream dataInputStream = new DataInputStream(new FileInputStream(file)); int readInt = dataInputStream.readInt(); String[] split = StringUtils.split(dataInputStream.readUTF(), SymbolExpUtil.SYMBOL_COMMA); if (split != null) { writeAheads.addAll(Arrays.asList(split)); } dataInputStream.close(); if (!getProperty("android.taobao.atlas.auto.load", true)) { return readInt; } File file2 = new File(STORAGE_LOCATION); mergeWalsDir(new File(STORAGE_LOCATION, "wal"), file2); File[] listFiles = file2.listFiles(new FilenameFilter() { public boolean accept(File file, String str) { if (str.matches("^[0-9]*")) { return false; } return true; } }); int i = 0; while (i < listFiles.length) { if (listFiles[i].isDirectory() && new File(listFiles[i], "meta").exists()) { try { System.out.println("RESTORED BUNDLE " + new BundleImpl(listFiles[i], new BundleContextImpl()).location); } catch (Exception e) { log.error(e.getMessage(), e.getCause()); } } i++; } return readInt; } System.out.println("Profile not found, performing clean start ..."); return -1; } catch (Exception e2) { e2.printStackTrace(); return 0; } } private static void mergeWalsDir(File file, File file2) { if (writeAheads != null && writeAheads.size() > 0) { for (int i = 0; i < writeAheads.size(); i++) { if (writeAheads.get(i) != null) { File file3 = new File(file, (String) writeAheads.get(i)); if (file3 != null) { try { if (file3.exists()) { File[] listFiles = file3.listFiles(); if (listFiles != null) { for (File file4 : listFiles) { if (file4.isDirectory()) { File file5 = new File(file2, file4.getName()); if (file5.exists()) { File[] listFiles2 = file4.listFiles(new FilenameFilter() { public boolean accept(File file, String str) { return str.startsWith(BundleArchive.REVISION_DIRECTORY); } }); if (listFiles2 != null) { for (File file6 : listFiles2) { if (new File(file6, "meta").exists()) { file6.renameTo(new File(file5, file6.getName())); } } } } else { file4.renameTo(file5); } } } } } } catch (Throwable e) { log.error("Error while merge wal dir", e); } } writeAheads.set(i, null); } } } if (file.exists()) { file.delete(); } } public static void deleteDirectory(File file) { File[] listFiles = file.listFiles(); for (int i = 0; i < listFiles.length; i++) { if (listFiles[i].isDirectory()) { deleteDirectory(listFiles[i]); } else { listFiles[i].delete(); } } file.delete(); } static void checkAdminPermission() { AccessController.checkPermission(ADMIN_PERMISSION); } static BundleImpl installNewBundle(String str) throws BundleException { try { String str2 = str.indexOf(":") > -1 ? str : BUNDLE_LOCATION + File.separatorChar + str; return installNewBundle(str2, new URL(str2).openConnection().getInputStream()); } catch (Throwable e) { throw new BundleException("Cannot retrieve bundle from " + str, e); } } static void installOrUpdate(String[] strArr, File[] fileArr) throws BundleException { if (strArr == null || fileArr == null || strArr.length != fileArr.length) { throw new IllegalArgumentException("locations and files must not be null and must be same length"); } String valueOf = String.valueOf(System.currentTimeMillis()); File file = new File(new File(STORAGE_LOCATION, "wal"), valueOf); file.mkdirs(); int i = 0; while (i < strArr.length) { if (!(strArr[i] == null || fileArr[i] == null)) { try { BundleLock.WriteLock(strArr[i]); Bundle bundle = getBundle(strArr[i]); if (bundle != null) { bundle.update(fileArr[i]); } else { BundleImpl bundleImpl = new BundleImpl(new File(file, strArr[i]), strArr[i], new BundleContextImpl(), null, fileArr[i], false); } BundleLock.WriteUnLock(strArr[i]); } catch (Throwable th) { BundleLock.WriteUnLock(strArr[i]); } } i++; } writeAheads.add(valueOf); storeMetadata(); } static void unregisterService(ServiceReference serviceReference) { services.remove(serviceReference); removeValue(classes_services, (String[]) serviceReference.getProperty(Constants.OBJECTCLASS), serviceReference); BundleImpl bundleImpl = (BundleImpl) serviceReference.getBundle(); bundleImpl.registeredServices.remove(serviceReference); if (bundleImpl.registeredServices.isEmpty()) { bundleImpl.registeredServices = null; } notifyServiceListeners(4, serviceReference); if (DEBUG_SERVICES && log.isInfoEnabled()) { log.info("Framework: UNREGISTERED SERVICE " + serviceReference); } } static void notifyBundleListeners(int i, Bundle bundle) { int i2 = 0; if (!syncBundleListeners.isEmpty() || !bundleListeners.isEmpty()) { BundleEvent bundleEvent = new BundleEvent(i, bundle); BundleListener[] bundleListenerArr = (BundleListener[]) syncBundleListeners.toArray(new BundleListener[syncBundleListeners.size()]); for (BundleListener bundleChanged : bundleListenerArr) { bundleChanged.bundleChanged(bundleEvent); } if (!bundleListeners.isEmpty()) { bundleListenerArr = (BundleListener[]) bundleListeners.toArray(new BundleListener[bundleListeners.size()]); while (i2 < bundleListenerArr.length) { bundleListenerArr[i2].bundleChanged(bundleEvent); i2++; } } } } static void addFrameworkListener(FrameworkListener frameworkListener) { frameworkListeners.add(frameworkListener); } static void removeFrameworkListener(FrameworkListener frameworkListener) { frameworkListeners.remove(frameworkListener); } static void addBundleListener(BundleListener bundleListener) { bundleListeners.add(bundleListener); } static void removeBundleListener(BundleListener bundleListener) { bundleListeners.remove(bundleListener); } static void notifyFrameworkListeners(int i, Bundle bundle, Throwable th) { if (!frameworkListeners.isEmpty()) { FrameworkEvent frameworkEvent = new FrameworkEvent(i, bundle, th); FrameworkListener[] frameworkListenerArr = (FrameworkListener[]) frameworkListeners.toArray(new FrameworkListener[frameworkListeners.size()]); for (FrameworkListener frameworkEvent2 : frameworkListenerArr) { frameworkEvent2.frameworkEvent(frameworkEvent); } } } static void notifyServiceListeners(int i, ServiceReference serviceReference) { if (!serviceListeners.isEmpty()) { ServiceEvent serviceEvent = new ServiceEvent(i, serviceReference); ServiceListenerEntry[] serviceListenerEntryArr = (ServiceListenerEntry[]) serviceListeners.toArray(new ServiceListenerEntry[serviceListeners.size()]); int i2 = 0; while (i2 < serviceListenerEntryArr.length) { if (serviceListenerEntryArr[i2].filter == null || serviceListenerEntryArr[i2].filter.match(((ServiceReferenceImpl) serviceReference).properties)) { serviceListenerEntryArr[i2].listener.serviceChanged(serviceEvent); } i2++; } } } static void clearBundleTrace(BundleImpl bundleImpl) { int i = 0; if (bundleImpl.registeredFrameworkListeners != null) { frameworkListeners.removeAll(bundleImpl.registeredFrameworkListeners); bundleImpl.registeredFrameworkListeners = null; } if (bundleImpl.registeredServiceListeners != null) { serviceListeners.removeAll(bundleImpl.registeredServiceListeners); bundleImpl.registeredServiceListeners = null; } if (bundleImpl.registeredBundleListeners != null) { bundleListeners.removeAll(bundleImpl.registeredBundleListeners); syncBundleListeners.removeAll(bundleImpl.registeredBundleListeners); bundleImpl.registeredBundleListeners = null; } ServiceReference[] registeredServices = bundleImpl.getRegisteredServices(); if (registeredServices != null) { for (int i2 = 0; i2 < registeredServices.length; i2++) { unregisterService(registeredServices[i2]); ((ServiceReferenceImpl) registeredServices[i2]).invalidate(); } bundleImpl.registeredServices = null; } ServiceReference[] servicesInUse = bundleImpl.getServicesInUse(); while (i < servicesInUse.length) { ((ServiceReferenceImpl) servicesInUse[i]).ungetService(bundleImpl); i++; } } static void addValue(Map map, Object obj, Object obj2) { List list = (List) map.get(obj); if (list == null) { list = new ArrayList(); } list.add(obj2); map.put(obj, list); } static void removeValue(Map map, Object[] objArr, Object obj) { for (int i = 0; i < objArr.length; i++) { List list = (List) map.get(objArr[i]); if (list != null) { list.remove(obj); if (list.isEmpty()) { map.remove(objArr[i]); } else { map.put(objArr[i], list); } } } } static void export(BundleClassLoader bundleClassLoader, String[] strArr, boolean z) { synchronized (exportedPackages) { if (DEBUG_PACKAGES && log.isDebugEnabled()) { log.debug("Bundle " + bundleClassLoader.bundle + " registers " + (z ? "resolved" : "unresolved") + " packages " + Arrays.asList(strArr)); } for (String str : strArr) { Package packageR = new Package(str, bundleClassLoader, z); Package packageR2 = (Package) exportedPackages.get(packageR); if (packageR2 == null) { exportedPackages.put(packageR, packageR); if (DEBUG_PACKAGES && log.isDebugEnabled()) { log.debug("REGISTERED PACKAGE " + packageR); } } else if (packageR2.importingBundles == null && packageR.updates(packageR2)) { exportedPackages.remove(packageR2); exportedPackages.put(packageR, packageR); if (DEBUG_PACKAGES && log.isDebugEnabled()) { log.debug("REPLACED PACKAGE " + packageR2 + " WITH " + packageR); } } } } } static android.taobao.atlas.framework.BundleClassLoader getImport(android.taobao.atlas.framework.BundleImpl r6, java.lang.String r7, boolean r8, java.util.HashSet<android.taobao.atlas.framework.BundleClassLoader> r9) { /* JADX: method processing error */ /* Error: jadx.core.utils.exceptions.JadxRuntimeException: Exception block dominator not found, method:android.taobao.atlas.framework.Framework.getImport(android.taobao.atlas.framework.BundleImpl, java.lang.String, boolean, java.util.HashSet):android.taobao.atlas.framework.BundleClassLoader. bs: [] at jadx.core.dex.visitors.regions.ProcessTryCatchRegions.searchTryCatchDominators(ProcessTryCatchRegions.java:82) at jadx.core.dex.visitors.regions.ProcessTryCatchRegions.process(ProcessTryCatchRegions.java:45) at jadx.core.dex.visitors.regions.RegionMakerVisitor.postProcessRegions(RegionMakerVisitor.java:57) at jadx.core.dex.visitors.regions.RegionMakerVisitor.visit(RegionMakerVisitor.java:52) at jadx.core.dex.visitors.DepthTraversal.visit(DepthTraversal.java:31) at jadx.core.dex.visitors.DepthTraversal.visit(DepthTraversal.java:17) at jadx.core.ProcessClass.process(ProcessClass.java:34) at jadx.api.JadxDecompiler.processClass(JadxDecompiler.java:281) at jadx.api.JavaClass.decompile(JavaClass.java:59) at jadx.api.JavaClass.getCode(JavaClass.java:45) at jadx.gui.treemodel.JClass.getContent(JClass.java:74) at jadx.gui.ui.ContentArea.<init>(ContentArea.java:66) at jadx.gui.ui.ContentPanel.<init>(ContentPanel.java:28) at jadx.gui.ui.TabbedPane.getCodePanel(TabbedPane.java:112) at jadx.gui.ui.TabbedPane.showCode(TabbedPane.java:69) at jadx.gui.ui.MainWindow.treeClickAction(MainWindow.java:241) at jadx.gui.ui.MainWindow.access$1000(MainWindow.java:66) at jadx.gui.ui.MainWindow$15.mouseClicked(MainWindow.java:519) at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:270) at java.awt.Component.processMouseEvent(Component.java:6528) at javax.swing.JComponent.processMouseEvent(JComponent.java:3322) at java.awt.Component.processEvent(Component.java:6290) at java.awt.Container.processEvent(Container.java:2234) at java.awt.Component.dispatchEventImpl(Component.java:4881) at java.awt.Container.dispatchEventImpl(Container.java:2292) at java.awt.Component.dispatchEvent(Component.java:4703) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4542) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462) at java.awt.Container.dispatchEventImpl(Container.java:2278) at java.awt.Window.dispatchEventImpl(Window.java:2739) at java.awt.Component.dispatchEvent(Component.java:4703) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:751) at java.awt.EventQueue.access$500(EventQueue.java:97) at java.awt.EventQueue$3.run(EventQueue.java:702) at java.awt.EventQueue$3.run(EventQueue.java:696) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86) at java.awt.EventQueue$4.run(EventQueue.java:724) at java.awt.EventQueue$4.run(EventQueue.java:722) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75) at java.awt.EventQueue.dispatchEvent(EventQueue.java:721) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) */ /* r2 = 0; r0 = DEBUG_PACKAGES; if (r0 == 0) goto L_0x0031; L_0x0005: r0 = log; r0 = r0.isDebugEnabled(); if (r0 == 0) goto L_0x0031; L_0x000d: r0 = log; r1 = new java.lang.StringBuilder; r1.<init>(); r3 = "Bundle "; r1 = r1.append(r3); r1 = r1.append(r6); r3 = " requests package "; r1 = r1.append(r3); r1 = r1.append(r7); r1 = r1.toString(); r0.debug(r1); L_0x0031: r3 = exportedPackages; monitor-enter(r3); r0 = exportedPackages; Catch:{ all -> 0x00c4 } r1 = new android.taobao.atlas.framework.Package; Catch:{ all -> 0x00c4 } r4 = 0; Catch:{ all -> 0x00c4 } r5 = 0; Catch:{ all -> 0x00c4 } r1.<init>(r7, r4, r5); Catch:{ all -> 0x00c4 } r0 = r0.get(r1); Catch:{ all -> 0x00c4 } r0 = (android.taobao.atlas.framework.Package) r0; Catch:{ all -> 0x00c4 } if (r0 == 0) goto L_0x004b; Catch:{ all -> 0x00c4 } L_0x0045: r1 = r0.resolved; Catch:{ all -> 0x00c4 } if (r1 != 0) goto L_0x004e; Catch:{ all -> 0x00c4 } L_0x0049: if (r8 != 0) goto L_0x004e; Catch:{ all -> 0x00c4 } L_0x004b: monitor-exit(r3); Catch:{ all -> 0x00c4 } r0 = r2; Catch:{ all -> 0x00c4 } L_0x004d: return r0; Catch:{ all -> 0x00c4 } L_0x004e: r1 = r0.classloader; Catch:{ all -> 0x00c4 } r4 = r6.classloader; Catch:{ all -> 0x00c4 } if (r1 != r4) goto L_0x0057; Catch:{ all -> 0x00c4 } L_0x0054: monitor-exit(r3); Catch:{ all -> 0x00c4 } r0 = r1; Catch:{ all -> 0x00c4 } goto L_0x004d; Catch:{ all -> 0x00c4 } L_0x0057: if (r8 == 0) goto L_0x0070; Catch:{ all -> 0x00c4 } L_0x0059: r4 = r0.resolved; Catch:{ all -> 0x00c4 } if (r4 != 0) goto L_0x0070; Catch:{ all -> 0x00c4 } L_0x005d: r4 = r0.classloader; Catch:{ all -> 0x00c4 } r4 = r9.contains(r4); Catch:{ all -> 0x00c4 } if (r4 != 0) goto L_0x0070; L_0x0065: r4 = r6.classloader; Catch:{ Exception -> 0x00bd } r9.add(r4); Catch:{ Exception -> 0x00bd } r4 = r0.classloader; Catch:{ Exception -> 0x00bd } r5 = 1; Catch:{ Exception -> 0x00bd } r4.resolveBundle(r5, r9); Catch:{ Exception -> 0x00bd } L_0x0070: r2 = r0.importingBundles; Catch:{ all -> 0x00c4 } if (r2 != 0) goto L_0x007b; Catch:{ all -> 0x00c4 } L_0x0074: r2 = new java.util.ArrayList; Catch:{ all -> 0x00c4 } r2.<init>(); Catch:{ all -> 0x00c4 } r0.importingBundles = r2; Catch:{ all -> 0x00c4 } L_0x007b: r2 = r0.importingBundles; Catch:{ all -> 0x00c4 } r2 = r2.contains(r6); Catch:{ all -> 0x00c4 } if (r2 != 0) goto L_0x0088; Catch:{ all -> 0x00c4 } L_0x0083: r0 = r0.importingBundles; Catch:{ all -> 0x00c4 } r0.add(r6); Catch:{ all -> 0x00c4 } L_0x0088: r0 = DEBUG_PACKAGES; Catch:{ all -> 0x00c4 } if (r0 == 0) goto L_0x00ba; Catch:{ all -> 0x00c4 } L_0x008c: r0 = log; Catch:{ all -> 0x00c4 } r0 = r0.isDebugEnabled(); Catch:{ all -> 0x00c4 } if (r0 == 0) goto L_0x00ba; Catch:{ all -> 0x00c4 } L_0x0094: r0 = log; Catch:{ all -> 0x00c4 } r2 = new java.lang.StringBuilder; Catch:{ all -> 0x00c4 } r2.<init>(); Catch:{ all -> 0x00c4 } r4 = "REQUESTED PACKAGE "; Catch:{ all -> 0x00c4 } r2 = r2.append(r4); Catch:{ all -> 0x00c4 } r2 = r2.append(r7); Catch:{ all -> 0x00c4 } r4 = ", RETURNED DELEGATION TO "; Catch:{ all -> 0x00c4 } r2 = r2.append(r4); Catch:{ all -> 0x00c4 } r4 = r1.bundle; Catch:{ all -> 0x00c4 } r2 = r2.append(r4); Catch:{ all -> 0x00c4 } r2 = r2.toString(); Catch:{ all -> 0x00c4 } r0.debug(r2); Catch:{ all -> 0x00c4 } L_0x00ba: monitor-exit(r3); Catch:{ all -> 0x00c4 } r0 = r1; Catch:{ all -> 0x00c4 } goto L_0x004d; Catch:{ all -> 0x00c4 } L_0x00bd: r0 = move-exception; Catch:{ all -> 0x00c4 } r0.printStackTrace(); Catch:{ all -> 0x00c4 } monitor-exit(r3); Catch:{ all -> 0x00c4 } r0 = r2; goto L_0x004d; L_0x00c4: r0 = move-exception; monitor-exit(r3); throw r0; */ throw new UnsupportedOperationException("Method not decompiled: android.taobao.atlas.framework.Framework.getImport(android.taobao.atlas.framework.BundleImpl, java.lang.String, boolean, java.util.HashSet):android.taobao.atlas.framework.BundleClassLoader"); } public static boolean isFrameworkStartupShutdown() { return frameworkStartupShutdown; } public static ClassNotFoundInterceptorCallback getClassNotFoundCallback() { return classNotFoundCallback; } public static void setClassNotFoundCallback(ClassNotFoundInterceptorCallback classNotFoundInterceptorCallback) { classNotFoundCallback = classNotFoundInterceptorCallback; } }