package com.bytedance.pangle.res; import android.content.res.AssetManager; import android.content.res.Resources; import android.os.Build; import android.text.TextUtils; import androidx.constraintlayout.core.motion.utils.TypedValues; import com.baidu.idl.face.platform.FaceEnvironment; import com.bytedance.pangle.Zeus; import com.bytedance.pangle.log.ZeusLogger; import com.bytedance.pangle.util.FieldUtils; import com.bytedance.pangle.util.MethodUtils; import com.bytedance.pangle.util.h; import com.bytedance.pangle.util.i; import java.lang.reflect.Array; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; public final class a { private static Map<String, Integer> a = new HashMap(); private LinkedHashMap<String, Integer> b; static { List<String> a2 = i.a(); if (a2 != null && a2.size() > 0) { for (String str : a2) { a.put(str, 0); } } } public a() { LinkedHashMap<String, Integer> linkedHashMap = new LinkedHashMap<>(); this.b = linkedHashMap; linkedHashMap.put(Zeus.getAppApplication().getApplicationInfo().sourceDir, 0); } public final AssetManager a(AssetManager assetManager, String str, boolean z) { AssetManager assetManager2; if (h.a()) { if (Build.VERSION.SDK_INT >= 21 && Build.VERSION.SDK_INT <= 25) { assetManager2 = c(assetManager, str, z); if (!i.a(assetManager2, str)) { assetManager2 = b(assetManager, str, z); } } else { assetManager2 = b(assetManager, str, z); } } else { assetManager2 = a(assetManager, str); } synchronized (this.b) { this.b.put(str, 0); } ZeusLogger.i(ZeusLogger.TAG_LOAD, "AssetManagerProcessor updateAssetManager, newAssetManager=" + assetManager2 + ", assets=" + i.b(assetManager2)); return assetManager2; } private static AssetManager b(AssetManager assetManager, String str, boolean z) { String str2 = "addAssetPath"; String str3 = z ? "addAssetPathAsSharedLibrary" : str2; Method accessibleMethod = MethodUtils.getAccessibleMethod(AssetManager.class, str3, String.class); if (accessibleMethod != null || !z) { str2 = str3; } else { accessibleMethod = MethodUtils.getAccessibleMethod(AssetManager.class, str2, String.class); ZeusLogger.e(ZeusLogger.TAG_LOAD, "AssetManagerProcessor AssetManager.addAssetPath() invoke addAssetPathAsSharedLibrary failed. use addAssetPath."); } if (accessibleMethod != null) { int i = 3; while (true) { int i2 = i - 1; if (i < 0) { break; } try { int intValue = ((Integer) accessibleMethod.invoke(assetManager, str)).intValue(); if (intValue != 0) { ZeusLogger.i(ZeusLogger.TAG_LOAD, "AssetManagerProcessor invoke AssetManager.addAssetPath() success, cookie = " + intValue + ", path = " + str); break; } ZeusLogger.e(ZeusLogger.TAG_LOAD, "AssetManagerProcessor invoke AssetManager.addAssetPath() failed, cookie = ".concat(String.valueOf(intValue))); i = i2; } catch (Exception e) { ZeusLogger.e(ZeusLogger.TAG_LOAD, "AssetManagerProcessor invoke AssetManager.addAssetPath() failed. asSharedLibrary = " + z + ", methodName = " + str2, e); } } } else { ZeusLogger.e(ZeusLogger.TAG_LOAD, "AssetManagerProcessor reflect AssetManager.addAssetPath() failed. addAssetPathMethod == null. asSharedLibrary = ".concat(String.valueOf(z))); } return assetManager; } private static AssetManager c(AssetManager assetManager, String str, boolean z) { Throwable th = null; int i = 3; while (true) { int i2 = i - 1; if (i < 0) { break; } try { synchronized (assetManager) { int i3 = 0; for (int i4 = 0; i4 < 3; i4++) { try { if (h.b()) { i3 = ((Integer) MethodUtils.invokeMethod(assetManager, "addAssetPathNative", new Object[]{str}, new Class[]{String.class})).intValue(); } else if (Build.VERSION.SDK_INT >= 24 && Build.VERSION.SDK_INT <= 25) { i3 = ((Integer) MethodUtils.invokeMethod(assetManager, "addAssetPathNative", new Object[]{str, Boolean.valueOf(z)}, new Class[]{String.class, Boolean.TYPE})).intValue(); } if (i3 != 0) { break; } } catch (Throwable th2) { throw th2; } } if (i3 != 0) { Object readField = FieldUtils.readField(assetManager, "mStringBlocks"); int length = readField != null ? Array.getLength(readField) : 0; int intValue = ((Integer) MethodUtils.invokeMethod(assetManager, "getStringBlockCount", new Object[0])).intValue(); Object newInstance = Array.newInstance(readField.getClass().getComponentType(), intValue); for (int i5 = 0; i5 < intValue; i5++) { if (i5 < length) { Array.set(newInstance, i5, Array.get(readField, i5)); } else { Array.set(newInstance, i5, MethodUtils.invokeConstructor(readField.getClass().getComponentType(), new Object[]{Long.valueOf(((Long) MethodUtils.invokeMethod(assetManager, "getNativeStringBlock", new Object[]{Integer.valueOf(i5)}, new Class[]{Integer.TYPE})).longValue()), Boolean.TRUE}, new Class[]{Long.TYPE, Boolean.TYPE})); } } FieldUtils.writeField(assetManager, "mStringBlocks", newInstance); ZeusLogger.d(ZeusLogger.TAG_LOAD, "AssetManagerProcessor appendAssetPathSafely success, sourceDir = ".concat(String.valueOf(str))); } } } catch (Throwable th3) { th = th3; i = i2; } } if (th != null) { ZeusLogger.e(ZeusLogger.TAG_LOAD, "AssetManagerProcessor appendAssetPathSafely failed, sourceDir = ".concat(String.valueOf(str)), th); } return assetManager; } private AssetManager a(AssetManager assetManager, String str) { AssetManager assetManager2; List<String> a2 = i.a(assetManager); ArrayList<String> arrayList = new ArrayList(); StringBuilder sb = new StringBuilder(); for (String str2 : a2) { if (!a.containsKey(str2) && !this.b.containsKey(str2) && !str2.equals(str)) { arrayList.add(str2); } } ZeusLogger.d(ZeusLogger.TAG_LOAD, "AssetManagerProcessor newAssetManager, runtimeAdditionalAssets"); try { if (assetManager.getClass().getName().equals("android.content.res.BaiduAssetManager")) { assetManager2 = (AssetManager) Class.forName("android.content.res.BaiduAssetManager").getConstructor(new Class[0]).newInstance(new Object[0]); } else { assetManager2 = (AssetManager) AssetManager.class.newInstance(); } ZeusLogger.i(ZeusLogger.TAG_LOAD, "AssetManagerProcessor newAssetManager = ".concat(String.valueOf(assetManager2))); synchronized (this.b) { for (Map.Entry<String, Integer> entry : this.b.entrySet()) { if (!a.containsKey(entry.getKey())) { sb.append(entry.getKey()); b(assetManager2, entry.getKey(), false); } } } if (!sb.toString().contains(Zeus.getAppApplication().getApplicationInfo().sourceDir)) { b(assetManager2, Zeus.getAppApplication().getApplicationInfo().sourceDir, false); ZeusLogger.e(ZeusLogger.TAG_LOAD, "AssetManagerProcessor newAssetManager lost host path : " + a.containsKey(Zeus.getAppApplication().getApplicationInfo().sourceDir)); } sb.append(str); b(assetManager2, str, false); if (!arrayList.isEmpty()) { for (String str3 : arrayList) { sb.append(str3); b(assetManager2, str3, false); } } if ((Build.VERSION.SDK_INT >= 21 && Build.VERSION.SDK_INT < 23) && !sb.toString().toLowerCase().contains("webview")) { try { Resources resources = Zeus.getAppApplication().getResources(); String str4 = Zeus.getAppApplication().createPackageContext(resources.getString(resources.getIdentifier("android:string/config_webViewPackageName", TypedValues.Custom.S_STRING, FaceEnvironment.OS)), 0).getApplicationInfo().sourceDir; if (!TextUtils.isEmpty(str4)) { b(assetManager2, str4, false); } } catch (Exception e) { ZeusLogger.e(ZeusLogger.TAG_LOAD, "AssetManagerProcessor newAssetManager appendAsset webview failed.", e); } } assetManager = assetManager2; } catch (Exception e2) { ZeusLogger.e(ZeusLogger.TAG_LOAD, "AssetManagerProcessor newAssetManager failed.", e2); b(assetManager, str, false); } try { MethodUtils.invokeMethod(assetManager, "ensureStringBlocks", new Object[0]); ZeusLogger.i(ZeusLogger.TAG_LOAD, "AssetManagerProcessor ensureStringBlocks"); } catch (Exception e3) { ZeusLogger.e(ZeusLogger.TAG_LOAD, "AssetManagerProcessor ensureStringBlocks failed.", e3); } return assetManager; } }