BoostNative.smali

.class final Lcom/bytedance/boost_multidex/BoostNative;
.super Ljava/lang/Object;
.source ""


# static fields
.field private static volatile alreadyInit:Z

.field private static supportFastLoadDex:Z


# direct methods
.method static constructor <clinit>()V
    .registers 2

    invoke-static {}, Lcom/bytedance/boost_multidex/Monitor;->get()Lcom/bytedance/boost_multidex/Monitor;

    move-result-object v0

    const-string v1, "boost_multidex"

    invoke-virtual {v0, v1}, Lcom/bytedance/boost_multidex/Monitor;->loadLibrary(Ljava/lang/String;)V

    return-void
.end method

.method constructor <init>()V
    .registers 1

    invoke-direct {p0}, Ljava/lang/Object;-><init>()V

    return-void
.end method

.method private static checkSupportFastLoad(Lcom/bytedance/boost_multidex/Result;)V
    .registers 6

    const-string v0, "android.os.SystemProperties"

    :try_start_2
    invoke-static {v0}, Ljava/lang/Class;->forName(Ljava/lang/String;)Ljava/lang/Class;
    :try_end_5
    .catchall {:try_start_2 .. :try_end_5} :catchall_ae

    move-result-object v0

    const-string v1, "get"

    const/4 v2, 0x2

    :try_start_9
    new-array v2, v2, [Ljava/lang/Class;

    const/4 v3, 0x0

    const-class v4, Ljava/lang/String;

    aput-object v4, v2, v3

    const/4 v3, 0x1

    const-class v4, Ljava/lang/String;

    aput-object v4, v2, v3

    invoke-virtual {v0, v1, v2}, Ljava/lang/Class;->getDeclaredMethod(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;

    move-result-object v1

    sget v0, Landroid/os/Build$VERSION;->SDK_INT:I

    const/16 v2, 0x13

    if-lt v0, v2, :cond_61

    const/4 v0, 0x0

    const/4 v2, 0x2

    new-array v2, v2, [Ljava/lang/Object;

    const/4 v3, 0x0

    const-string/jumbo v4, "persist.sys.dalvik.vm.lib"

    aput-object v4, v2, v3

    const/4 v3, 0x1

    const/4 v4, 0x0

    aput-object v4, v2, v3

    invoke-virtual {v1, v0, v2}, Ljava/lang/reflect/Method;->invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Ljava/lang/String;

    iput-object v0, p0, Lcom/bytedance/boost_multidex/Result;->vmLibName:Ljava/lang/String;

    invoke-static {}, Lcom/bytedance/boost_multidex/Monitor;->get()Lcom/bytedance/boost_multidex/Monitor;

    move-result-object v2

    new-instance v3, Ljava/lang/StringBuilder;

    invoke-direct {v3}, Ljava/lang/StringBuilder;-><init>()V

    const-string v4, "VM lib is "

    invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v3

    invoke-virtual {v3, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v3

    invoke-virtual {v3}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v3

    invoke-virtual {v2, v3}, Lcom/bytedance/boost_multidex/Monitor;->logInfo(Ljava/lang/String;)V

    const-string v2, "libart.so"

    invoke-virtual {v2, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

    move-result v0

    if-eqz v0, :cond_61

    invoke-static {}, Lcom/bytedance/boost_multidex/Monitor;->get()Lcom/bytedance/boost_multidex/Monitor;

    move-result-object v0

    const-string v1, "VM lib is art, skip!"

    invoke-virtual {v0, v1}, Lcom/bytedance/boost_multidex/Monitor;->logWarning(Ljava/lang/String;)V

    :goto_60
    return-void

    :cond_61
    const/4 v0, 0x0

    const/4 v2, 0x2

    new-array v2, v2, [Ljava/lang/Object;

    const/4 v3, 0x0

    const-string/jumbo v4, "ro.yunos.version"

    aput-object v4, v2, v3

    const/4 v3, 0x1

    const/4 v4, 0x0

    aput-object v4, v2, v3

    invoke-virtual {v1, v0, v2}, Ljava/lang/reflect/Method;->invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Ljava/lang/String;

    if-eqz v0, :cond_7d

    invoke-virtual {v0}, Ljava/lang/String;->isEmpty()Z

    move-result v1

    if-eqz v1, :cond_8a

    :cond_7d
    new-instance v1, Ljava/io/File;

    const-string v2, "/system/lib/libvmkid_lemur.so"

    invoke-direct {v1, v2}, Ljava/io/File;-><init>(Ljava/lang/String;)V

    invoke-virtual {v1}, Ljava/io/File;->exists()Z

    move-result v1

    if-eqz v1, :cond_bc

    :cond_8a
    const/4 v1, 0x1

    iput-boolean v1, p0, Lcom/bytedance/boost_multidex/Result;->isYunOS:Z

    invoke-static {}, Lcom/bytedance/boost_multidex/Monitor;->get()Lcom/bytedance/boost_multidex/Monitor;

    move-result-object v1

    new-instance v2, Ljava/lang/StringBuilder;

    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V

    const-string v3, "Yun os is "

    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v2

    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v0

    const-string v2, ", skip boost!"

    invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v0

    invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v0

    invoke-virtual {v1, v0}, Lcom/bytedance/boost_multidex/Monitor;->logWarning(Ljava/lang/String;)V
    :try_end_ad
    .catchall {:try_start_9 .. :try_end_ad} :catchall_ae

    goto :goto_60

    :catchall_ae
    move-exception v0

    invoke-virtual {p0, v0}, Lcom/bytedance/boost_multidex/Result;->addUnFatalThrowable(Ljava/lang/Throwable;)V

    invoke-static {}, Lcom/bytedance/boost_multidex/Monitor;->get()Lcom/bytedance/boost_multidex/Monitor;

    move-result-object v1

    const-string v2, "Fail to init"

    invoke-virtual {v1, v2, v0}, Lcom/bytedance/boost_multidex/Monitor;->logWarning(Ljava/lang/String;Ljava/lang/Throwable;)V

    goto :goto_60

    :cond_bc
    :try_start_bc
    sget v0, Landroid/os/Build$VERSION;->SDK_INT:I

    const-class v1, Ljava/lang/RuntimeException;

    invoke-static {v0, v1}, Lcom/bytedance/boost_multidex/BoostNative;->initialize(ILjava/lang/Class;)Z

    move-result v0

    sput-boolean v0, Lcom/bytedance/boost_multidex/BoostNative;->supportFastLoadDex:Z

    sget-boolean v0, Lcom/bytedance/boost_multidex/BoostNative;->supportFastLoadDex:Z

    iput-boolean v0, p0, Lcom/bytedance/boost_multidex/Result;->supportFastLoadDex:Z
    :try_end_ca
    .catchall {:try_start_bc .. :try_end_ca} :catchall_ae

    goto :goto_60
.end method

.method private static native initialize(ILjava/lang/Class;)Z
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "(I",
            "Ljava/lang/Class",
            "<",
            "Ljava/lang/RuntimeException;",
            ">;)Z"
        }
    .end annotation
.end method

.method static declared-synchronized isSupportFastLoad()Z
    .registers 2

    const-class v1, Lcom/bytedance/boost_multidex/BoostNative;

    monitor-enter v1

    :try_start_3
    sget-boolean v0, Lcom/bytedance/boost_multidex/BoostNative;->alreadyInit:Z

    if-nez v0, :cond_11

    invoke-static {}, Lcom/bytedance/boost_multidex/Result;->get()Lcom/bytedance/boost_multidex/Result;

    move-result-object v0

    invoke-static {v0}, Lcom/bytedance/boost_multidex/BoostNative;->checkSupportFastLoad(Lcom/bytedance/boost_multidex/Result;)V

    const/4 v0, 0x1

    sput-boolean v0, Lcom/bytedance/boost_multidex/BoostNative;->alreadyInit:Z

    :cond_11
    sget-boolean v0, Lcom/bytedance/boost_multidex/BoostNative;->supportFastLoadDex:Z
    :try_end_13
    .catchall {:try_start_3 .. :try_end_13} :catchall_15

    monitor-exit v1

    return v0

    :catchall_15
    move-exception v0

    monitor-exit v1

    throw v0
.end method

.method static native loadDirectDex(Ljava/lang/String;[B)Ljava/lang/Object;
.end method

.method static native makeOptDexFile(Ljava/lang/String;Ljava/lang/String;)Z
.end method

.method static native obtainCheckSum(Ljava/lang/String;)J
.end method

.method static native recoverAction()V
.end method