杏吧 v5.0版本的 MD5 值为:6060d82046650ce71383e136711e525f
以下内容为反编译后的 LogUtils.java 源代码,内容仅作参考
package com.blankj.utilcode.util;
import android.content.ClipData;
import android.content.ComponentName;
import android.content.Intent;
import android.graphics.Rect;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.support.v4.media.a;
import android.util.Log;
import androidx.camera.camera2.internal.y;
import androidx.camera.core.c;
import androidx.collection.SimpleArrayMap;
import androidx.exifinterface.media.ExifInterface;
import androidx.media3.exoplayer.upstream.CmcdData;
import com.blankj.utilcode.util.UtilsBridge;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.io.File;
import java.io.FilenameFilter;
import java.io.StringReader;
import java.io.StringWriter;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Formatter;
import java.util.Iterator;
import java.util.Locale;
import java.util.Objects;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
public final class LogUtils {
public static SimpleDateFormat e;
public static final char[] f598a = {'V', 'D', 'I', 'W', 'E', 'A'};
public static final String f599b = System.getProperty("file.separator");
public static final String c = System.getProperty("line.separator");
public static final Config d = new Config();
public static final ExecutorService f = Executors.newSingleThreadExecutor();
public static final SimpleArrayMap<Class, IFormatter> g = new SimpleArrayMap<>();
class AnonymousClass1 implements Runnable {
@Override
public final void run() {
throw null;
}
}
class AnonymousClass2 implements FilenameFilter {
@Override
public final boolean accept(File file, String str) {
char[] cArr = LogUtils.f598a;
return str.matches("^" + LogUtils.d.f601b + "_[0-9]{4}_[0-9]{2}_[0-9]{2}_.*$");
}
}
public static final class Config {
public final String f600a;
public final String f601b = "util";
public final String c = ".txt";
public final boolean d = true;
public final boolean e = true;
public final String f = "";
public final boolean g = true;
public final boolean h = true;
public final boolean f602i = true;
public final boolean f603j = true;
public final int f604k = 2;
public final int l = 2;
public final int m = 1;
public final int n = -1;
public final String o = UtilsBridge.c();
public final UtilsBridge.FileHead p = new UtilsBridge.FileHead("Log");
public Config() {
if ("mounted".equals(Environment.getExternalStorageState()) && Utils.a().getExternalFilesDir(null) != null) {
StringBuilder sb = new StringBuilder();
sb.append(Utils.a().getExternalFilesDir(null));
String str = LogUtils.f599b;
this.f600a = a.u(sb, str, "log", str);
return;
}
StringBuilder sb2 = new StringBuilder();
sb2.append(Utils.a().getFilesDir());
String str2 = LogUtils.f599b;
this.f600a = a.u(sb2, str2, "log", str2);
}
public final String toString() {
String replace;
String str;
StringBuilder sb = new StringBuilder("process: ");
String str2 = "";
String str3 = this.o;
if (str3 == null) {
replace = "";
} else {
replace = str3.replace(":", "_");
}
sb.append(replace);
String str4 = LogUtils.c;
sb.append(str4);
sb.append("logSwitch: ");
sb.append(this.d);
sb.append(str4);
sb.append("consoleSwitch: ");
sb.append(this.e);
sb.append(str4);
sb.append("tag: ");
String str5 = this.f;
if (UtilsBridge.i(str5)) {
str = "";
} else {
str = str5;
}
if (str.equals("")) {
str2 = "null";
} else if (!UtilsBridge.i(str5)) {
str2 = str5;
}
a.D(sb, str2, str4, "headSwitch: ");
sb.append(this.h);
sb.append(str4);
sb.append("fileSwitch: false");
sb.append(str4);
sb.append("dir: ");
a.D(sb, this.f600a, str4, "filePrefix: ");
a.D(sb, this.f601b, str4, "borderSwitch: ");
sb.append(this.f602i);
sb.append(str4);
sb.append("singleTagSwitch: ");
sb.append(this.f603j);
sb.append(str4);
sb.append("consoleFilter: ");
char[] cArr = LogUtils.f598a;
sb.append(cArr[this.f604k - 2]);
sb.append(str4);
sb.append("fileFilter: ");
sb.append(cArr[this.l - 2]);
sb.append(str4);
sb.append("stackDeep: ");
sb.append(this.m);
sb.append(str4);
sb.append("stackOffset: 0");
sb.append(str4);
sb.append("saveDays: ");
sb.append(this.n);
sb.append(str4);
sb.append("formatter: ");
sb.append(LogUtils.g);
sb.append(str4);
sb.append("fileWriter: null");
sb.append(str4);
a.E(sb, "onConsoleOutputListener: null", str4, "onFileOutputListener: null", str4);
sb.append("fileExtraHeader: ");
sb.append(this.p.b());
return sb.toString();
}
}
public interface IFileWriter {
}
public static abstract class IFormatter<T> {
public abstract String a();
}
public static final class LogFormatter {
public static String a(Bundle bundle) {
String c;
String obj;
String a2;
Iterator<String> it = bundle.keySet().iterator();
if (!it.hasNext()) {
return "Bundle {}";
}
StringBuilder sb = new StringBuilder(128);
sb.append("Bundle { ");
while (true) {
String next = it.next();
Object obj2 = bundle.get(next);
sb.append(next);
sb.append('=');
if (obj2 instanceof Bundle) {
if (obj2 == bundle) {
a2 = "(this Bundle)";
} else {
a2 = a((Bundle) obj2);
}
sb.append(a2);
} else {
if (obj2 == null) {
char[] cArr = LogUtils.f598a;
c = "null";
} else {
SimpleArrayMap<Class, IFormatter> simpleArrayMap = LogUtils.g;
if (!simpleArrayMap.isEmpty()) {
Class<?> cls = obj2.getClass();
if (cls.isAnonymousClass() || cls.isSynthetic()) {
Type[] genericInterfaces = cls.getGenericInterfaces();
if (genericInterfaces.length == 1) {
Type type = genericInterfaces[0];
while (type instanceof ParameterizedType) {
type = ((ParameterizedType) type).getRawType();
}
obj = type.toString();
} else {
Type genericSuperclass = cls.getGenericSuperclass();
while (genericSuperclass instanceof ParameterizedType) {
genericSuperclass = ((ParameterizedType) genericSuperclass).getRawType();
}
obj = genericSuperclass.toString();
}
if (obj.startsWith("class ")) {
obj = obj.substring(6);
} else if (obj.startsWith("interface ")) {
obj = obj.substring(10);
}
try {
cls = Class.forName(obj);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
IFormatter iFormatter = simpleArrayMap.get(cls);
if (iFormatter != null) {
c = iFormatter.a();
}
}
c = c(-1, obj2);
}
sb.append(c);
}
if (!it.hasNext()) {
sb.append(" }");
return sb.toString();
}
sb.append(", ");
}
}
public static String b(Intent intent) {
boolean z;
String b2;
StringBuilder sb = new StringBuilder(128);
sb.append("Intent { ");
String action = intent.getAction();
boolean z2 = false;
boolean z3 = true;
if (action != null) {
sb.append("act=");
sb.append(action);
z = false;
} else {
z = true;
}
Set<String> categories = intent.getCategories();
if (categories != null) {
if (!z) {
sb.append(' ');
}
sb.append("cat=[");
for (String str : categories) {
if (!z3) {
sb.append(',');
}
sb.append(str);
z3 = false;
}
sb.append("]");
z = false;
}
Uri data = intent.getData();
if (data != null) {
if (!z) {
sb.append(' ');
}
sb.append("dat=");
sb.append(data);
z = false;
}
String type = intent.getType();
if (type != null) {
if (!z) {
sb.append(' ');
}
sb.append("typ=");
sb.append(type);
z = false;
}
int flags = intent.getFlags();
if (flags != 0) {
if (!z) {
sb.append(' ');
}
sb.append("flg=0x");
sb.append(Integer.toHexString(flags));
z = false;
}
String str2 = intent.getPackage();
if (str2 != null) {
if (!z) {
sb.append(' ');
}
sb.append("pkg=");
sb.append(str2);
z = false;
}
ComponentName component = intent.getComponent();
if (component != null) {
if (!z) {
sb.append(' ');
}
sb.append("cmp=");
sb.append(component.flattenToShortString());
z = false;
}
Rect sourceBounds = intent.getSourceBounds();
if (sourceBounds != null) {
if (!z) {
sb.append(' ');
}
sb.append("bnds=");
sb.append(sourceBounds.toShortString());
z = false;
}
ClipData clipData = intent.getClipData();
if (clipData != null) {
if (!z) {
sb.append(' ');
}
ClipData.Item itemAt = clipData.getItemAt(0);
if (itemAt == null) {
sb.append("ClipData.Item {}");
} else {
sb.append("ClipData.Item { ");
String htmlText = itemAt.getHtmlText();
if (htmlText != null) {
a.D(sb, "H:", htmlText, "}");
} else {
CharSequence text = itemAt.getText();
if (text != null) {
sb.append("T:");
sb.append(text);
sb.append("}");
} else {
Uri uri = itemAt.getUri();
if (uri != null) {
sb.append("U:");
sb.append(uri);
sb.append("}");
} else {
Intent intent2 = itemAt.getIntent();
if (intent2 != null) {
sb.append("I:");
sb.append(b(intent2));
sb.append("}");
} else {
sb.append("NULL}");
}
}
}
}
}
z = false;
}
Bundle extras = intent.getExtras();
if (extras != null) {
if (!z) {
sb.append(' ');
}
sb.append("extras={");
sb.append(a(extras));
sb.append('}');
} else {
z2 = z;
}
Intent selector = intent.getSelector();
if (selector != null) {
if (!z2) {
sb.append(' ');
}
sb.append("sel={");
if (selector == intent) {
b2 = "(this Intent)";
} else {
b2 = b(selector);
}
sb.append(b2);
sb.append("}");
}
sb.append(" }");
return sb.toString();
}
public static String c(int i2, Object obj) {
if (obj.getClass().isArray()) {
if (obj instanceof Object[]) {
return Arrays.deepToString((Object[]) obj);
}
if (obj instanceof boolean[]) {
return Arrays.toString((boolean[]) obj);
}
if (obj instanceof byte[]) {
return Arrays.toString((byte[]) obj);
}
if (obj instanceof char[]) {
return Arrays.toString((char[]) obj);
}
if (obj instanceof double[]) {
return Arrays.toString((double[]) obj);
}
if (obj instanceof float[]) {
return Arrays.toString((float[]) obj);
}
if (obj instanceof int[]) {
return Arrays.toString((int[]) obj);
}
if (obj instanceof long[]) {
return Arrays.toString((long[]) obj);
}
if (obj instanceof short[]) {
return Arrays.toString((short[]) obj);
}
throw new IllegalArgumentException("Array has incompatible type: " + obj.getClass());
} else if (obj instanceof Throwable) {
return UtilsBridge.d((Throwable) obj);
} else {
if (obj instanceof Bundle) {
return a((Bundle) obj);
}
if (obj instanceof Intent) {
return b((Intent) obj);
}
if (i2 == 32) {
if (obj instanceof CharSequence) {
String obj2 = obj.toString();
try {
int length = obj2.length();
for (int i3 = 0; i3 < length; i3++) {
char charAt = obj2.charAt(i3);
if (charAt == '{') {
obj2 = new JSONObject(obj2).toString(4);
break;
} else if (charAt == '[') {
obj2 = new JSONArray(obj2).toString(4);
break;
} else if (Character.isWhitespace(charAt)) {
}
}
return obj2;
} catch (JSONException e) {
e.printStackTrace();
return obj2;
}
}
try {
ConcurrentHashMap concurrentHashMap = GsonUtils.f596a;
Gson gson = (Gson) concurrentHashMap.get("logUtilsGson");
if (gson == null) {
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.l = true;
gsonBuilder.g = true;
gson = gsonBuilder.a();
concurrentHashMap.put("logUtilsGson", gson);
}
return gson.g(obj);
} catch (Throwable unused) {
return obj.toString();
}
} else if (i2 == 48) {
String obj3 = obj.toString();
try {
StreamSource streamSource = new StreamSource(new StringReader(obj3));
StreamResult streamResult = new StreamResult(new StringWriter());
Transformer newTransformer = TransformerFactory.newInstance().newTransformer();
newTransformer.setOutputProperty("indent", "yes");
newTransformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", ExifInterface.GPS_MEASUREMENT_2D);
newTransformer.transform(streamSource, streamResult);
String obj4 = streamResult.getWriter().toString();
return obj4.replaceFirst(">", ">" + LogUtils.c);
} catch (Exception e2) {
e2.printStackTrace();
return obj3;
}
} else {
return obj.toString();
}
}
}
}
public interface OnConsoleOutputListener {
}
public interface OnFileOutputListener {
}
@Retention(RetentionPolicy.SOURCE)
public @interface TYPE {
}
public static final class TagHead {
public final String f605a;
public final String[] f606b;
public final String c;
public TagHead(String str, String str2, String[] strArr) {
this.f605a = str;
this.f606b = strArr;
this.c = str2;
}
}
public LogUtils() {
throw new UnsupportedOperationException("u can't instantiate me...");
}
public static void a(String str, String str2) {
Config config;
File[] listFiles;
String str3;
if (d.n > 0 && (listFiles = new File(str).getParentFile().listFiles(new FilenameFilter() {
@Override
public final boolean accept(File file, String str4) {
char[] cArr = LogUtils.f598a;
return str4.matches("^" + LogUtils.d.f601b + "_[0-9]{4}_[0-9]{2}_[0-9]{2}_.*$");
}
})) != null && listFiles.length > 0) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy_MM_dd", Locale.getDefault());
try {
long time = simpleDateFormat.parse(str2).getTime() - (config.n * 86400000);
for (final File file : listFiles) {
String name = file.getName();
name.getClass();
Matcher matcher = Pattern.compile("[0-9]{4}_[0-9]{2}_[0-9]{2}").matcher(name);
if (matcher.find()) {
str3 = matcher.group();
} else {
str3 = "";
}
if (simpleDateFormat.parse(str3).getTime() <= time) {
f.execute(new Runnable() {
@Override
public final void run() {
File file2 = file;
if (!file2.delete()) {
Objects.toString(file2);
}
}
});
}
}
} catch (ParseException e2) {
e2.printStackTrace();
}
}
}
public static String b(StackTraceElement stackTraceElement) {
String fileName = stackTraceElement.getFileName();
if (fileName != null) {
return fileName;
}
String className = stackTraceElement.getClassName();
String[] split = className.split("\\.");
if (split.length > 0) {
className = split[split.length - 1];
}
int indexOf = className.indexOf(36);
if (indexOf != -1) {
className = className.substring(0, indexOf);
}
return c.a(className, ".java");
}
public static void c(Object obj) {
boolean z;
int i2;
TagHead tagHead;
Object obj2;
String c2;
int i3;
int i4;
String[] split;
Config config = d;
String str = config.f;
String str2 = "";
if (UtilsBridge.i(str)) {
str = "";
}
int i5 = 1;
int i6 = 0;
Object[] objArr = {obj};
if (config.d && (z = config.e)) {
int i7 = config.f604k;
if (3 >= i7 || 3 >= config.l) {
boolean z2 = config.g;
boolean z3 = config.h;
if (!z2 && !z3) {
str = config.f;
} else {
StackTraceElement[] stackTrace = new Throwable().getStackTrace();
if (3 >= stackTrace.length) {
String b2 = b(stackTrace[3]);
if (z2 && UtilsBridge.i(str)) {
int indexOf = b2.indexOf(46);
if (indexOf == -1) {
str = b2;
} else {
str = b2.substring(0, indexOf);
}
}
tagHead = new TagHead(str, ": ", null);
} else {
StackTraceElement stackTraceElement = stackTrace[3];
String b3 = b(stackTraceElement);
if (z2 && UtilsBridge.i(str)) {
int indexOf2 = b3.indexOf(46);
if (indexOf2 == -1) {
str = b3;
} else {
str = b3.substring(0, indexOf2);
}
}
if (z3) {
String name = Thread.currentThread().getName();
String formatter = new Formatter().format("%s, %s.%s(%s:%d)", name, stackTraceElement.getClassName(), stackTraceElement.getMethodName(), b3, Integer.valueOf(stackTraceElement.getLineNumber())).toString();
String p = a.p(" [", formatter, "]: ");
int i8 = config.m;
if (i8 <= 1) {
tagHead = new TagHead(str, p, new String[]{formatter});
} else {
int min = Math.min(i8, stackTrace.length - 3);
String[] strArr = new String[min];
strArr[0] = formatter;
String formatter2 = new Formatter().format(y.b("%", name.length() + 2, CmcdData.Factory.STREAMING_FORMAT_SS), "").toString();
for (int i9 = 1; i9 < min; i9++) {
StackTraceElement stackTraceElement2 = stackTrace[i9 + 3];
strArr[i9] = new Formatter().format("%s%s.%s(%s:%d)", formatter2, stackTraceElement2.getClassName(), stackTraceElement2.getMethodName(), b(stackTraceElement2), Integer.valueOf(stackTraceElement2.getLineNumber())).toString();
}
TagHead tagHead2 = new TagHead(str, p, strArr);
i2 = 1;
tagHead = tagHead2;
obj2 = objArr[0];
if (obj2 == null) {
c2 = "null";
} else {
c2 = LogFormatter.c(32, obj2);
}
if (c2.length() == 0) {
c2 = "log nothing";
}
if (z && 3 >= i7) {
boolean z4 = config.f603j;
String str3 = tagHead.f605a;
String[] strArr2 = tagHead.f606b;
boolean z5 = config.f602i;
if (z4) {
StringBuilder sb = new StringBuilder();
String str4 = c;
if (z5) {
a.E(sb, " ", str4, "┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────", str4);
if (strArr2 != null) {
for (String str5 : strArr2) {
sb.append("│ ");
sb.append(str5);
sb.append(str4);
}
sb.append("├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄");
sb.append(str4);
}
for (String str6 : c2.split(str4)) {
sb.append("│ ");
sb.append(str6);
sb.append(str4);
}
sb.append("└────────────────────────────────────────────────────────────────────────────────────────────────────────────────");
} else {
if (strArr2 != null) {
sb.append(" ");
sb.append(str4);
for (String str7 : strArr2) {
sb.append(str7);
sb.append(str4);
}
}
sb.append(c2);
}
String sb2 = sb.toString();
int length = sb2.length();
int i10 = 1100;
if (z5) {
i4 = (length - 113) / 1100;
} else {
i4 = length / 1100;
}
if (i4 > 0) {
if (z5) {
d(3, str3, sb2.substring(0, 1100) + str4 + "└────────────────────────────────────────────────────────────────────────────────────────────────────────────────");
while (i2 < i4) {
StringBuilder sb3 = new StringBuilder(" ");
sb3.append(str4);
sb3.append("┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────");
sb3.append(str4);
sb3.append("│ ");
int i11 = i10 + 1100;
sb3.append(sb2.substring(i10, i11));
sb3.append(str4);
sb3.append("└────────────────────────────────────────────────────────────────────────────────────────────────────────────────");
d(3, str3, sb3.toString());
i2++;
i10 = i11;
}
if (i10 != length - 113) {
d(3, str3, " " + str4 + "┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────" + str4 + "│ " + sb2.substring(i10, length));
return;
}
return;
}
d(3, str3, sb2.substring(0, 1100));
while (i2 < i4) {
StringBuilder sb4 = new StringBuilder(" ");
sb4.append(str4);
int i12 = i10 + 1100;
sb4.append(sb2.substring(i10, i12));
d(3, str3, sb4.toString());
i2++;
i10 = i12;
}
if (i10 != length) {
d(3, str3, " " + str4 + sb2.substring(i10, length));
return;
}
return;
}
d(3, str3, sb2);
return;
}
if (config.f602i) {
d(3, str3, "┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────");
}
if (strArr2 != null) {
for (String str8 : strArr2) {
if (z5) {
str8 = y.c("│ ", str8);
}
d(3, str3, str8);
}
if (z5) {
d(3, str3, "├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄");
}
}
int length2 = c2.length();
int i13 = length2 / 1100;
if (i13 > 0) {
int i14 = 0;
while (i6 < i13) {
int i15 = i14 + 1100;
e(3, str3, c2.substring(i14, i15));
i6++;
i14 = i15;
}
i3 = 3;
if (i14 != length2) {
e(3, str3, c2.substring(i14, length2));
}
} else {
i3 = 3;
e(3, str3, c2);
}
if (config.f602i) {
d(i3, str3, "└────────────────────────────────────────────────────────────────────────────────────────────────────────────────");
return;
}
return;
}
return;
}
} else {
i5 = 1;
}
}
i2 = 1;
obj2 = objArr[0];
if (obj2 == null) {
}
if (c2.length() == 0) {
}
if (z) {
return;
}
return;
}
str2 = str;
int i16 = i5;
tagHead = new TagHead(str2, ": ", null);
i2 = i16;
obj2 = objArr[0];
if (obj2 == null) {
}
if (c2.length() == 0) {
}
if (z) {
}
}
}
}
public static void d(int i2, String str, String str2) {
Log.println(i2, str, str2);
d.getClass();
}
public static void e(int i2, String str, String str2) {
String[] split;
if (!d.f602i) {
d(i2, str, str2);
return;
}
for (String str3 : str2.split(c)) {
d(i2, str, "│ " + str3);
}
}
}