OptimizeService.smali
.class public Lcom/bytedance/boost_multidex/OptimizeService;
.super Landroid/app/IntentService;
.source ""
# static fields
.field static volatile sAlreadyOpt:Z
# instance fields
.field mDexDir:Ljava/io/File;
.field mOptDexDir:Ljava/io/File;
.field mRootDir:Ljava/io/File;
.field mZipDir:Ljava/io/File;
# direct methods
.method public constructor <init>()V
.registers 3
const-string v0, "OptimizeService"
invoke-direct {p0, v0}, Landroid/app/IntentService;-><init>(Ljava/lang/String;)V
invoke-static {}, Lcom/bytedance/boost_multidex/Monitor;->get()Lcom/bytedance/boost_multidex/Monitor;
move-result-object v0
if-nez v0, :cond_f
const/4 v0, 0x0
invoke-static {v0}, Lcom/bytedance/boost_multidex/Monitor;->init(Lcom/bytedance/boost_multidex/Monitor;)V
:cond_f
invoke-static {}, Lcom/bytedance/boost_multidex/Monitor;->get()Lcom/bytedance/boost_multidex/Monitor;
move-result-object v0
const-string v1, "Starting OptimizeService"
invoke-virtual {v0, v1}, Lcom/bytedance/boost_multidex/Monitor;->logDebug(Ljava/lang/String;)V
return-void
.end method
.method private handleOptimize()V
.registers 16
sget-boolean v0, Lcom/bytedance/boost_multidex/OptimizeService;->sAlreadyOpt:Z
if-eqz v0, :cond_f
invoke-static {}, Lcom/bytedance/boost_multidex/Monitor;->get()Lcom/bytedance/boost_multidex/Monitor;
move-result-object v0
const-string/jumbo v1, "opt had already done, skip"
invoke-virtual {v0, v1}, Lcom/bytedance/boost_multidex/Monitor;->logInfo(Ljava/lang/String;)V
:goto_e
return-void
:cond_f
const/4 v0, 0x1
sput-boolean v0, Lcom/bytedance/boost_multidex/OptimizeService;->sAlreadyOpt:Z
invoke-static {}, Lcom/bytedance/boost_multidex/Monitor;->get()Lcom/bytedance/boost_multidex/Monitor;
move-result-object v0
invoke-virtual {v0}, Lcom/bytedance/boost_multidex/Monitor;->doBeforeHandleOpt()V
const-string v0, "dex.number"
new-instance v11, Lcom/bytedance/boost_multidex/Locker;
new-instance v1, Ljava/io/File;
iget-object v2, p0, Lcom/bytedance/boost_multidex/OptimizeService;->mRootDir:Ljava/io/File;
const-string v3, "boost_multidex.install.lock"
invoke-direct {v1, v2, v3}, Ljava/io/File;-><init>(Ljava/io/File;Ljava/lang/String;)V
invoke-direct {v11, v1}, Lcom/bytedance/boost_multidex/Locker;-><init>(Ljava/io/File;)V
invoke-virtual {v11}, Lcom/bytedance/boost_multidex/Locker;->lock()V
:try_start_2c
invoke-virtual {p0}, Landroid/app/IntentService;->getApplicationInfo()Landroid/content/pm/ApplicationInfo;
move-result-object v1
if-eqz v1, :cond_2a0
new-instance v12, Ljava/io/File;
iget-object v1, v1, Landroid/content/pm/ApplicationInfo;->sourceDir:Ljava/lang/String;
invoke-direct {v12, v1}, Ljava/io/File;-><init>(Ljava/lang/String;)V
const-string v1, "boost_multidex.records"
const/4 v2, 0x0
invoke-virtual {p0, v1, v2}, Landroid/app/IntentService;->getSharedPreferences(Ljava/lang/String;I)Landroid/content/SharedPreferences;
move-result-object v13
const/4 v1, 0x0
invoke-interface {v13, v0, v1}, Landroid/content/SharedPreferences;->getInt(Ljava/lang/String;I)I
move-result v14
const/4 v0, 0x2
move v10, v0
:goto_47
if-gt v10, v14, :cond_28b
new-instance v0, Ljava/lang/StringBuilder;
invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
const-string v1, "dex.obj.type"
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v0
invoke-virtual {v0, v10}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v0
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
const/4 v1, 0x0
invoke-interface {v13, v0, v1}, Landroid/content/SharedPreferences;->getInt(Ljava/lang/String;I)I
move-result v0
new-instance v2, Ljava/io/File;
iget-object v1, p0, Lcom/bytedance/boost_multidex/OptimizeService;->mDexDir:Ljava/io/File;
new-instance v3, Ljava/lang/StringBuilder;
invoke-direct {v3}, Ljava/lang/StringBuilder;-><init>()V
invoke-virtual {v3, v10}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v3
const-string v4, ".dex"
invoke-virtual {v3, v4}, 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-direct {v2, v1, v3}, Ljava/io/File;-><init>(Ljava/io/File;Ljava/lang/String;)V
new-instance v3, Ljava/io/File;
iget-object v1, p0, Lcom/bytedance/boost_multidex/OptimizeService;->mOptDexDir:Ljava/io/File;
new-instance v4, Ljava/lang/StringBuilder;
invoke-direct {v4}, Ljava/lang/StringBuilder;-><init>()V
invoke-virtual {v4, v10}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v4
const-string v5, ".odex"
invoke-virtual {v4, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v4
invoke-virtual {v4}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v4
invoke-direct {v3, v1, v4}, Ljava/io/File;-><init>(Ljava/io/File;Ljava/lang/String;)V
if-nez v0, :cond_137
new-instance v1, Ljava/util/zip/ZipFile;
invoke-direct {v1, v12}, Ljava/util/zip/ZipFile;-><init>(Ljava/io/File;)V
new-instance v4, Ljava/lang/StringBuilder;
invoke-direct {v4}, Ljava/lang/StringBuilder;-><init>()V
const-string v5, "classes"
invoke-virtual {v4, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v4
invoke-virtual {v4, v10}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v4
const-string v5, ".dex"
invoke-virtual {v4, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v4
invoke-virtual {v4}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v4
invoke-virtual {v1, v4}, Ljava/util/zip/ZipFile;->getEntry(Ljava/lang/String;)Ljava/util/zip/ZipEntry;
move-result-object v4
invoke-static {v1, v4}, Lcom/bytedance/boost_multidex/Utility;->obtainEntryBytesInZip(Ljava/util/zip/ZipFile;Ljava/util/zip/ZipEntry;)[B
move-result-object v4
new-instance v1, Lcom/bytedance/boost_multidex/DexHolder$ApkBuffer;
invoke-direct {v1, v10, v4, v2, v3}, Lcom/bytedance/boost_multidex/DexHolder$ApkBuffer;-><init>(I[BLjava/io/File;Ljava/io/File;)V
:goto_c2
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, "Process beginning holder "
invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v3
invoke-virtual {v1}, Ljava/lang/Object;->toString()Ljava/lang/String;
move-result-object v4
invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v3
const-string v4, ", type: "
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(I)Ljava/lang/StringBuilder;
move-result-object v0
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
invoke-virtual {v2, v0}, Lcom/bytedance/boost_multidex/Monitor;->logInfo(Ljava/lang/String;)V
:goto_ea
if-eqz v1, :cond_286
invoke-static {}, Landroid/os/Environment;->getDataDirectory()Ljava/io/File;
move-result-object v0
invoke-virtual {v0}, Ljava/io/File;->getFreeSpace()J
move-result-wide v4
const-wide/32 v2, 0x1312d00
cmp-long v0, v4, v2
if-gez v0, :cond_1ab
invoke-static {}, Lcom/bytedance/boost_multidex/Monitor;->get()Lcom/bytedance/boost_multidex/Monitor;
move-result-object v0
new-instance v1, Ljava/lang/StringBuilder;
invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
const-string v2, "Free space is too small: "
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v1, v4, v5}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder;
move-result-object v1
const-string v2, ", compare to "
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
const-wide/32 v2, 0x8f0d180
invoke-virtual {v1, v2, v3}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
invoke-virtual {v0, v1}, Lcom/bytedance/boost_multidex/Monitor;->logWarning(Ljava/lang/String;)V
:try_end_122
.catchall {:try_start_2c .. :try_end_122} :catchall_140
invoke-virtual {v11}, Lcom/bytedance/boost_multidex/Locker;->close()V
invoke-static {}, Lcom/bytedance/boost_multidex/Monitor;->get()Lcom/bytedance/boost_multidex/Monitor;
move-result-object v0
const-string v1, "Exit quietly"
invoke-virtual {v0, v1}, Lcom/bytedance/boost_multidex/Monitor;->logInfo(Ljava/lang/String;)V
invoke-virtual {p0}, Landroid/app/IntentService;->stopSelf()V
const/4 v0, 0x0
invoke-static {v0}, Ljava/lang/System;->exit(I)V
goto/16 :goto_e
:cond_137
const/4 v1, 0x1
if-ne v0, v1, :cond_15f
:try_start_13a
new-instance v1, Lcom/bytedance/boost_multidex/DexHolder$DexBuffer;
invoke-direct {v1, v10, v2, v3}, Lcom/bytedance/boost_multidex/DexHolder$DexBuffer;-><init>(ILjava/io/File;Ljava/io/File;)V
:try_end_13f
.catchall {:try_start_13a .. :try_end_13f} :catchall_140
goto :goto_c2
:catchall_140
move-exception v0
:try_start_141
invoke-static {}, Lcom/bytedance/boost_multidex/Monitor;->get()Lcom/bytedance/boost_multidex/Monitor;
move-result-object v1
const-string v2, "Failed to install extracted secondary dex files"
invoke-virtual {v1, v2, v0}, Lcom/bytedance/boost_multidex/Monitor;->logWarning(Ljava/lang/String;Ljava/lang/Throwable;)V
:try_end_14a
.catchall {:try_start_141 .. :try_end_14a} :catchall_2a8
invoke-virtual {v11}, Lcom/bytedance/boost_multidex/Locker;->close()V
invoke-static {}, Lcom/bytedance/boost_multidex/Monitor;->get()Lcom/bytedance/boost_multidex/Monitor;
move-result-object v0
const-string v1, "Exit quietly"
invoke-virtual {v0, v1}, Lcom/bytedance/boost_multidex/Monitor;->logInfo(Ljava/lang/String;)V
invoke-virtual {p0}, Landroid/app/IntentService;->stopSelf()V
const/4 v0, 0x0
invoke-static {v0}, Ljava/lang/System;->exit(I)V
goto/16 :goto_e
:cond_15f
const/4 v1, 0x2
if-ne v0, v1, :cond_16a
:try_start_162
new-instance v1, Lcom/bytedance/boost_multidex/DexHolder$DexOpt;
const/4 v4, 0x0
invoke-direct {v1, v10, v2, v3, v4}, Lcom/bytedance/boost_multidex/DexHolder$DexOpt;-><init>(ILjava/io/File;Ljava/io/File;Z)V
goto/16 :goto_c2
:cond_16a
const/4 v1, 0x3
if-ne v0, v1, :cond_1a8
new-instance v2, Ljava/io/File;
iget-object v1, p0, Lcom/bytedance/boost_multidex/OptimizeService;->mZipDir:Ljava/io/File;
new-instance v3, Ljava/lang/StringBuilder;
invoke-direct {v3}, Ljava/lang/StringBuilder;-><init>()V
invoke-virtual {v3, v10}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v3
const-string v4, ".zip"
invoke-virtual {v3, v4}, 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-direct {v2, v1, v3}, Ljava/io/File;-><init>(Ljava/io/File;Ljava/lang/String;)V
new-instance v3, Ljava/io/File;
iget-object v1, p0, Lcom/bytedance/boost_multidex/OptimizeService;->mZipDir:Ljava/io/File;
new-instance v4, Ljava/lang/StringBuilder;
invoke-direct {v4}, Ljava/lang/StringBuilder;-><init>()V
invoke-virtual {v4, v10}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v4
const-string v5, ".odex"
invoke-virtual {v4, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v4
invoke-virtual {v4}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v4
invoke-direct {v3, v1, v4}, Ljava/io/File;-><init>(Ljava/io/File;Ljava/lang/String;)V
new-instance v1, Lcom/bytedance/boost_multidex/DexHolder$ZipOpt;
invoke-direct {v1, v10, v2, v3}, Lcom/bytedance/boost_multidex/DexHolder$ZipOpt;-><init>(ILjava/io/File;Ljava/io/File;)V
goto/16 :goto_c2
:cond_1a8
const/4 v1, 0x0
goto/16 :goto_c2
:cond_1ab
invoke-static {}, Lcom/bytedance/boost_multidex/Monitor;->get()Lcom/bytedance/boost_multidex/Monitor;
move-result-object v0
new-instance v2, Ljava/lang/StringBuilder;
invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
const-string v3, "Free space is enough: "
invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v2
invoke-virtual {v2, v4, v5}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder;
move-result-object v2
const-string v3, ", continue..."
invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v2
invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v2
invoke-virtual {v0, v2}, Lcom/bytedance/boost_multidex/Monitor;->logInfo(Ljava/lang/String;)V
invoke-static {}, Lcom/bytedance/boost_multidex/Monitor;->get()Lcom/bytedance/boost_multidex/Monitor;
move-result-object v0
new-instance v2, Ljava/lang/StringBuilder;
invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
const-string v3, "Process holder, "
invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v2
invoke-virtual {v2, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
move-result-object v2
invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v2
invoke-virtual {v0, v2}, Lcom/bytedance/boost_multidex/Monitor;->logDebug(Ljava/lang/String;)V
:try_end_1e5
.catchall {:try_start_162 .. :try_end_1e5} :catchall_140
:try_start_1e5
invoke-static {}, Ljava/lang/System;->nanoTime()J
move-result-wide v2
invoke-virtual {v1, v13}, Lcom/bytedance/boost_multidex/DexHolder;->toFasterHolder(Landroid/content/SharedPreferences;)Lcom/bytedance/boost_multidex/DexHolder;
:try_end_1ec
.catchall {:try_start_1e5 .. :try_end_1ec} :catchall_254
move-result-object v9
if-eqz v9, :cond_2c0
:try_start_1ef
invoke-static {}, Ljava/lang/System;->nanoTime()J
move-result-wide v0
sub-long v2, v0, v2
invoke-virtual {v9}, Lcom/bytedance/boost_multidex/DexHolder;->getInfo()Lcom/bytedance/boost_multidex/DexHolder$StoreInfo;
move-result-object v0
invoke-static {}, Lcom/bytedance/boost_multidex/Monitor;->get()Lcom/bytedance/boost_multidex/Monitor;
move-result-object v1
new-instance v6, Ljava/lang/StringBuilder;
invoke-direct {v6}, Ljava/lang/StringBuilder;-><init>()V
const-string v7, "Put info, "
invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v6
iget v7, v0, Lcom/bytedance/boost_multidex/DexHolder$StoreInfo;->index:I
invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v6
const-string v7, " file is "
invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v6
iget-object v0, v0, Lcom/bytedance/boost_multidex/DexHolder$StoreInfo;->file:Ljava/io/File;
invoke-virtual {v0}, Ljava/io/File;->getPath()Ljava/lang/String;
move-result-object v0
invoke-virtual {v6, v0}, 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;->logDebug(Ljava/lang/String;)V
invoke-static {}, Landroid/os/Environment;->getDataDirectory()Ljava/io/File;
move-result-object v0
invoke-virtual {v0}, Ljava/io/File;->getFreeSpace()J
move-result-wide v0
sub-long v6, v0, v4
invoke-static {}, Lcom/bytedance/boost_multidex/Monitor;->get()Lcom/bytedance/boost_multidex/Monitor;
move-result-object v1
invoke-virtual {v9}, Ljava/lang/Object;->toString()Ljava/lang/String;
move-result-object v8
invoke-virtual/range {v1 .. v8}, Lcom/bytedance/boost_multidex/Monitor;->reportAfterInstall(JJJLjava/lang/String;)V
:try_end_23a
.catchall {:try_start_1ef .. :try_end_23a} :catchall_2bd
move-object v1, v9
:goto_23b
:try_start_23b
new-instance v0, Lcom/bytedance/boost_multidex/Locker;
new-instance v2, Ljava/io/File;
iget-object v3, p0, Lcom/bytedance/boost_multidex/OptimizeService;->mRootDir:Ljava/io/File;
const-string v4, "boost_multidex.prepare.lock"
invoke-direct {v2, v3, v4}, Ljava/io/File;-><init>(Ljava/io/File;Ljava/lang/String;)V
invoke-direct {v0, v2}, Lcom/bytedance/boost_multidex/Locker;-><init>(Ljava/io/File;)V
invoke-virtual {v0}, Lcom/bytedance/boost_multidex/Locker;->test()Z
move-result v2
if-eqz v2, :cond_268
invoke-virtual {v0}, Lcom/bytedance/boost_multidex/Locker;->close()V
goto/16 :goto_ea
:catchall_254
move-exception v0
:goto_255
invoke-static {}, Lcom/bytedance/boost_multidex/Monitor;->get()Lcom/bytedance/boost_multidex/Monitor;
move-result-object v2
const-string v3, "Fail to be faster"
invoke-virtual {v2, v3, v0}, Lcom/bytedance/boost_multidex/Monitor;->logErrorAfterInstall(Ljava/lang/String;Ljava/lang/Throwable;)V
invoke-static {}, Lcom/bytedance/boost_multidex/Result;->get()Lcom/bytedance/boost_multidex/Result;
move-result-object v2
iget-object v2, v2, Lcom/bytedance/boost_multidex/Result;->unFatalThrowable:Ljava/util/List;
invoke-interface {v2, v0}, Ljava/util/List;->add(Ljava/lang/Object;)Z
goto :goto_23b
:cond_268
invoke-static {}, Lcom/bytedance/boost_multidex/Monitor;->get()Lcom/bytedance/boost_multidex/Monitor;
move-result-object v0
const-string v1, "Other process is waiting for installing"
invoke-virtual {v0, v1}, Lcom/bytedance/boost_multidex/Monitor;->logInfo(Ljava/lang/String;)V
:try_end_271
.catchall {:try_start_23b .. :try_end_271} :catchall_140
invoke-virtual {v11}, Lcom/bytedance/boost_multidex/Locker;->close()V
invoke-static {}, Lcom/bytedance/boost_multidex/Monitor;->get()Lcom/bytedance/boost_multidex/Monitor;
move-result-object v0
const-string v1, "Exit quietly"
invoke-virtual {v0, v1}, Lcom/bytedance/boost_multidex/Monitor;->logInfo(Ljava/lang/String;)V
invoke-virtual {p0}, Landroid/app/IntentService;->stopSelf()V
const/4 v0, 0x0
invoke-static {v0}, Ljava/lang/System;->exit(I)V
goto/16 :goto_e
:cond_286
add-int/lit8 v0, v10, 0x1
move v10, v0
goto/16 :goto_47
:cond_28b
invoke-virtual {v11}, Lcom/bytedance/boost_multidex/Locker;->close()V
invoke-static {}, Lcom/bytedance/boost_multidex/Monitor;->get()Lcom/bytedance/boost_multidex/Monitor;
move-result-object v0
const-string v1, "Exit quietly"
invoke-virtual {v0, v1}, Lcom/bytedance/boost_multidex/Monitor;->logInfo(Ljava/lang/String;)V
invoke-virtual {p0}, Landroid/app/IntentService;->stopSelf()V
const/4 v0, 0x0
invoke-static {v0}, Ljava/lang/System;->exit(I)V
goto/16 :goto_e
:cond_2a0
:try_start_2a0
new-instance v0, Ljava/lang/RuntimeException;
const-string v1, "No ApplicationInfo available, i.e. running on a test Context: BoostMultiDex support library is disabled."
invoke-direct {v0, v1}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
throw v0
:try_end_2a8
.catchall {:try_start_2a0 .. :try_end_2a8} :catchall_140
:catchall_2a8
move-exception v0
invoke-virtual {v11}, Lcom/bytedance/boost_multidex/Locker;->close()V
invoke-static {}, Lcom/bytedance/boost_multidex/Monitor;->get()Lcom/bytedance/boost_multidex/Monitor;
move-result-object v1
const-string v2, "Exit quietly"
invoke-virtual {v1, v2}, Lcom/bytedance/boost_multidex/Monitor;->logInfo(Ljava/lang/String;)V
invoke-virtual {p0}, Landroid/app/IntentService;->stopSelf()V
const/4 v1, 0x0
invoke-static {v1}, Ljava/lang/System;->exit(I)V
throw v0
:catchall_2bd
move-exception v0
move-object v1, v9
goto :goto_255
:cond_2c0
move-object v1, v9
goto/16 :goto_23b
.end method
.method public static startOptimizeService(Landroid/content/Context;)V
.registers 3
new-instance v0, Landroid/content/Intent;
const-class v1, Lcom/bytedance/boost_multidex/OptimizeService;
invoke-direct {v0, p0, v1}, Landroid/content/Intent;-><init>(Landroid/content/Context;Ljava/lang/Class;)V
invoke-virtual {p0, v0}, Landroid/content/Context;->startService(Landroid/content/Intent;)Landroid/content/ComponentName;
return-void
.end method
# virtual methods
.method public onCreate()V
.registers 4
invoke-super {p0}, Landroid/app/IntentService;->onCreate()V
:try_start_3
invoke-virtual {p0}, Landroid/app/IntentService;->getFilesDir()Ljava/io/File;
move-result-object v0
invoke-virtual {v0}, Ljava/io/File;->exists()Z
move-result v1
if-nez v1, :cond_10
invoke-static {v0}, Lcom/bytedance/boost_multidex/Utility;->mkdirChecked(Ljava/io/File;)V
:cond_10
const-string v1, "boost_multidex"
invoke-static {v0, v1}, Lcom/bytedance/boost_multidex/Utility;->ensureDirCreated(Ljava/io/File;Ljava/lang/String;)Ljava/io/File;
move-result-object v0
iput-object v0, p0, Lcom/bytedance/boost_multidex/OptimizeService;->mRootDir:Ljava/io/File;
iget-object v0, p0, Lcom/bytedance/boost_multidex/OptimizeService;->mRootDir:Ljava/io/File;
const-string v1, "dex_cache"
invoke-static {v0, v1}, Lcom/bytedance/boost_multidex/Utility;->ensureDirCreated(Ljava/io/File;Ljava/lang/String;)Ljava/io/File;
move-result-object v0
iput-object v0, p0, Lcom/bytedance/boost_multidex/OptimizeService;->mDexDir:Ljava/io/File;
iget-object v0, p0, Lcom/bytedance/boost_multidex/OptimizeService;->mRootDir:Ljava/io/File;
const-string v1, "odex_cache"
invoke-static {v0, v1}, Lcom/bytedance/boost_multidex/Utility;->ensureDirCreated(Ljava/io/File;Ljava/lang/String;)Ljava/io/File;
move-result-object v0
iput-object v0, p0, Lcom/bytedance/boost_multidex/OptimizeService;->mOptDexDir:Ljava/io/File;
iget-object v0, p0, Lcom/bytedance/boost_multidex/OptimizeService;->mRootDir:Ljava/io/File;
const-string/jumbo v1, "zip_cache"
invoke-static {v0, v1}, Lcom/bytedance/boost_multidex/Utility;->ensureDirCreated(Ljava/io/File;Ljava/lang/String;)Ljava/io/File;
move-result-object v0
iput-object v0, p0, Lcom/bytedance/boost_multidex/OptimizeService;->mZipDir:Ljava/io/File;
:try_end_37
.catch Ljava/io/IOException; {:try_start_3 .. :try_end_37} :catch_38
:goto_37
return-void
:catch_38
move-exception v0
invoke-static {}, Lcom/bytedance/boost_multidex/Monitor;->get()Lcom/bytedance/boost_multidex/Monitor;
move-result-object v1
const-string v2, "fail to create files"
invoke-virtual {v1, v2, v0}, Lcom/bytedance/boost_multidex/Monitor;->logError(Ljava/lang/String;Ljava/lang/Throwable;)V
const/4 v0, 0x1
sput-boolean v0, Lcom/bytedance/boost_multidex/OptimizeService;->sAlreadyOpt:Z
goto :goto_37
.end method
.method protected onHandleIntent(Landroid/content/Intent;)V
.registers 5
if-eqz p1, :cond_5
:try_start_2
invoke-direct {p0}, Lcom/bytedance/boost_multidex/OptimizeService;->handleOptimize()V
:try_end_5
.catch Ljava/io/IOException; {:try_start_2 .. :try_end_5} :catch_6
:cond_5
:goto_5
return-void
:catch_6
move-exception v0
invoke-static {}, Lcom/bytedance/boost_multidex/Monitor;->get()Lcom/bytedance/boost_multidex/Monitor;
move-result-object v1
const-string v2, "fail to handle opt"
invoke-virtual {v1, v2, v0}, Lcom/bytedance/boost_multidex/Monitor;->logError(Ljava/lang/String;Ljava/lang/Throwable;)V
goto :goto_5
.end method