a.smali

.class public Lcom/getkeepsafe/relinker/a;
.super Ljava/lang/Object;
.source "ApkLibraryInstaller.java"

# interfaces
.implements Lcom/getkeepsafe/relinker/b$a;


# annotations
.annotation system Ldalvik/annotation/MemberClasses;
    value = {
        Lcom/getkeepsafe/relinker/a$a;
    }
.end annotation


# direct methods
.method public constructor <init>()V
    .registers 1

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

    return-void
.end method

.method private a(Ljava/io/InputStream;Ljava/io/OutputStream;)J
    .registers 9
    .annotation system Ldalvik/annotation/Throws;
        value = {
            Ljava/io/IOException;
        }
    .end annotation

    .prologue
    .line 191
    const-wide/16 v0, 0x0

    .line 192
    const/16 v2, 0x1000

    new-array v2, v2, [B

    .line 194
    :goto_6
    invoke-virtual {p1, v2}, Ljava/io/InputStream;->read([B)I

    move-result v3

    .line 195
    const/4 v4, -0x1

    if-ne v3, v4, :cond_11

    .line 201
    invoke-virtual {p2}, Ljava/io/OutputStream;->flush()V

    .line 202
    return-wide v0

    .line 198
    :cond_11
    const/4 v4, 0x0

    invoke-virtual {p2, v2, v4, v3}, Ljava/io/OutputStream;->write([BII)V

    .line 199
    int-to-long v4, v3

    add-long/2addr v0, v4

    .line 200
    goto :goto_6
.end method

.method private a(Landroid/content/Context;[Ljava/lang/String;Ljava/lang/String;Lcom/getkeepsafe/relinker/c;)Lcom/getkeepsafe/relinker/a$a;
    .registers 18

    .prologue
    .line 66
    const/4 v2, 0x0

    .line 67
    invoke-direct {p0, p1}, Lcom/getkeepsafe/relinker/a;->a(Landroid/content/Context;)[Ljava/lang/String;

    move-result-object v5

    array-length v6, v5

    const/4 v1, 0x0

    move v3, v1

    move-object v4, v2

    :goto_9
    if-ge v3, v6, :cond_81

    aget-object v7, v5, v3

    .line 68
    const/4 v1, 0x0

    .line 69
    :goto_e
    add-int/lit8 v2, v1, 0x1

    const/4 v8, 0x5

    if-ge v1, v8, :cond_83

    .line 71
    :try_start_13
    new-instance v1, Ljava/util/zip/ZipFile;

    new-instance v8, Ljava/io/File;

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

    const/4 v9, 0x1

    invoke-direct {v1, v8, v9}, Ljava/util/zip/ZipFile;-><init>(Ljava/io/File;I)V
    :try_end_1e
    .catch Ljava/io/IOException; {:try_start_13 .. :try_end_1e} :catch_26

    move-object v2, v1

    .line 77
    :goto_1f
    if-nez v2, :cond_29

    .line 67
    :goto_21
    add-int/lit8 v1, v3, 0x1

    move v3, v1

    move-object v4, v2

    goto :goto_9

    .line 73
    :catch_26
    move-exception v1

    move v1, v2

    .line 74
    goto :goto_e

    .line 81
    :cond_29
    const/4 v1, 0x0

    .line 82
    :goto_2a
    add-int/lit8 v4, v1, 0x1

    const/4 v8, 0x5

    if-ge v1, v8, :cond_7b

    .line 86
    array-length v8, p2

    const/4 v1, 0x0

    :goto_31
    if-ge v1, v8, :cond_79

    aget-object v9, p2, v1

    .line 87
    new-instance v10, Ljava/lang/StringBuilder;

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

    const-string v11, "lib"

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

    move-result-object v10

    sget-char v11, Ljava/io/File;->separatorChar:C

    invoke-virtual {v10, v11}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder;

    move-result-object v10

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

    move-result-object v9

    sget-char v10, Ljava/io/File;->separatorChar:C

    invoke-virtual {v9, v10}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder;

    move-result-object v9

    move-object/from16 v0, p3

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

    move-result-object v9

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

    move-result-object v9

    .line 90
    const-string v10, "Looking for %s in APK %s..."

    const/4 v11, 0x2

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

    const/4 v12, 0x0

    aput-object v9, v11, v12

    const/4 v12, 0x1

    aput-object v7, v11, v12

    move-object/from16 v0, p4

    invoke-virtual {v0, v10, v11}, Lcom/getkeepsafe/relinker/c;->a(Ljava/lang/String;[Ljava/lang/Object;)V

    .line 92
    invoke-virtual {v2, v9}, Ljava/util/zip/ZipFile;->getEntry(Ljava/lang/String;)Ljava/util/zip/ZipEntry;

    move-result-object v9

    .line 94
    if-eqz v9, :cond_76

    .line 95
    new-instance v1, Lcom/getkeepsafe/relinker/a$a;

    invoke-direct {v1, v2, v9}, Lcom/getkeepsafe/relinker/a$a;-><init>(Ljava/util/zip/ZipFile;Ljava/util/zip/ZipEntry;)V

    .line 106
    :goto_75
    return-object v1

    .line 86
    :cond_76
    add-int/lit8 v1, v1, 0x1

    goto :goto_31

    :cond_79
    move v1, v4

    .line 98
    goto :goto_2a

    .line 101
    :cond_7b
    :try_start_7b
    invoke-virtual {v2}, Ljava/util/zip/ZipFile;->close()V
    :try_end_7e
    .catch Ljava/io/IOException; {:try_start_7b .. :try_end_7e} :catch_7f

    goto :goto_21

    .line 102
    :catch_7f
    move-exception v1

    goto :goto_21

    .line 106
    :cond_81
    const/4 v1, 0x0

    goto :goto_75

    :cond_83
    move-object v2, v4

    goto :goto_1f
.end method

.method private a(Ljava/io/Closeable;)V
    .registers 3

    .prologue
    .line 211
    if-eqz p1, :cond_5

    .line 212
    :try_start_2
    invoke-interface {p1}, Ljava/io/Closeable;->close()V
    :try_end_5
    .catch Ljava/io/IOException; {:try_start_2 .. :try_end_5} :catch_6

    .line 215
    :cond_5
    :goto_5
    return-void

    .line 214
    :catch_6
    move-exception v0

    goto :goto_5
.end method

.method private a(Landroid/content/Context;)[Ljava/lang/String;
    .registers 7

    .prologue
    const/4 v4, 0x1

    const/4 v3, 0x0

    .line 37
    invoke-virtual {p1}, Landroid/content/Context;->getApplicationInfo()Landroid/content/pm/ApplicationInfo;

    move-result-object v1

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

    const/16 v2, 0x15

    if-lt v0, v2, :cond_29

    iget-object v0, v1, Landroid/content/pm/ApplicationInfo;->splitSourceDirs:[Ljava/lang/String;

    if-eqz v0, :cond_29

    iget-object v0, v1, Landroid/content/pm/ApplicationInfo;->splitSourceDirs:[Ljava/lang/String;

    array-length v0, v0

    if-eqz v0, :cond_29

    .line 42
    iget-object v0, v1, Landroid/content/pm/ApplicationInfo;->splitSourceDirs:[Ljava/lang/String;

    array-length v0, v0

    add-int/lit8 v0, v0, 0x1

    new-array v0, v0, [Ljava/lang/String;

    .line 43
    iget-object v2, v1, Landroid/content/pm/ApplicationInfo;->sourceDir:Ljava/lang/String;

    aput-object v2, v0, v3

    .line 44
    iget-object v2, v1, Landroid/content/pm/ApplicationInfo;->splitSourceDirs:[Ljava/lang/String;

    iget-object v1, v1, Landroid/content/pm/ApplicationInfo;->splitSourceDirs:[Ljava/lang/String;

    array-length v1, v1

    invoke-static {v2, v3, v0, v4, v1}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V

    .line 47
    :goto_28
    return-object v0

    :cond_29
    new-array v0, v4, [Ljava/lang/String;

    iget-object v1, v1, Landroid/content/pm/ApplicationInfo;->sourceDir:Ljava/lang/String;

    aput-object v1, v0, v3

    goto :goto_28
.end method


# virtual methods
.method public a(Landroid/content/Context;[Ljava/lang/String;Ljava/lang/String;Ljava/io/File;Lcom/getkeepsafe/relinker/c;)V
    .registers 19

    .prologue
    .line 123
    const/4 v3, 0x0

    .line 125
    :try_start_1
    move-object/from16 v0, p3

    move-object/from16 v1, p5

    invoke-direct {p0, p1, p2, v0, v1}, Lcom/getkeepsafe/relinker/a;->a(Landroid/content/Context;[Ljava/lang/String;Ljava/lang/String;Lcom/getkeepsafe/relinker/c;)Lcom/getkeepsafe/relinker/a$a;
    :try_end_8
    .catchall {:try_start_1 .. :try_end_8} :catchall_d1

    move-result-object v5

    .line 126
    if-nez v5, :cond_21

    .line 128
    :try_start_b
    new-instance v2, Lcom/getkeepsafe/relinker/MissingLibraryException;

    move-object/from16 v0, p3

    invoke-direct {v2, v0}, Lcom/getkeepsafe/relinker/MissingLibraryException;-><init>(Ljava/lang/String;)V

    throw v2
    :try_end_13
    .catchall {:try_start_b .. :try_end_13} :catchall_13

    .line 174
    :catchall_13
    move-exception v2

    move-object v3, v5

    .line 175
    :goto_15
    if-eqz v3, :cond_20

    :try_start_17
    iget-object v4, v3, Lcom/getkeepsafe/relinker/a$a;->a:Ljava/util/zip/ZipFile;

    if-eqz v4, :cond_20

    .line 176
    iget-object v3, v3, Lcom/getkeepsafe/relinker/a$a;->a:Ljava/util/zip/ZipFile;

    invoke-virtual {v3}, Ljava/util/zip/ZipFile;->close()V
    :try_end_20
    .catch Ljava/io/IOException; {:try_start_17 .. :try_end_20} :catch_ce

    .line 178
    :cond_20
    :goto_20
    throw v2

    .line 131
    :cond_21
    const/4 v2, 0x0

    .line 132
    :goto_22
    add-int/lit8 v6, v2, 0x1

    const/4 v3, 0x5

    if-ge v2, v3, :cond_b9

    .line 133
    :try_start_27
    const-string v2, "Found %s! Extracting..."

    const/4 v3, 0x1

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

    const/4 v4, 0x0

    aput-object p3, v3, v4

    move-object/from16 v0, p5

    invoke-virtual {v0, v2, v3}, Lcom/getkeepsafe/relinker/c;->a(Ljava/lang/String;[Ljava/lang/Object;)V
    :try_end_34
    .catchall {:try_start_27 .. :try_end_34} :catchall_13

    .line 135
    :try_start_34
    invoke-virtual/range {p4 .. p4}, Ljava/io/File;->exists()Z

    move-result v2

    if-nez v2, :cond_45

    invoke-virtual/range {p4 .. p4}, Ljava/io/File;->createNewFile()Z
    :try_end_3d
    .catch Ljava/io/IOException; {:try_start_34 .. :try_end_3d} :catch_42
    .catchall {:try_start_34 .. :try_end_3d} :catchall_13

    move-result v2

    if-nez v2, :cond_45

    move v2, v6

    .line 136
    goto :goto_22

    .line 138
    :catch_42
    move-exception v2

    move v2, v6

    .line 140
    goto :goto_22

    .line 143
    :cond_45
    const/4 v2, 0x0

    .line 144
    const/4 v3, 0x0

    .line 146
    :try_start_47
    iget-object v4, v5, Lcom/getkeepsafe/relinker/a$a;->a:Ljava/util/zip/ZipFile;

    iget-object v7, v5, Lcom/getkeepsafe/relinker/a$a;->b:Ljava/util/zip/ZipEntry;

    invoke-virtual {v4, v7}, Ljava/util/zip/ZipFile;->getInputStream(Ljava/util/zip/ZipEntry;)Ljava/io/InputStream;
    :try_end_4e
    .catch Ljava/io/FileNotFoundException; {:try_start_47 .. :try_end_4e} :catch_97
    .catch Ljava/io/IOException; {:try_start_47 .. :try_end_4e} :catch_a3
    .catchall {:try_start_47 .. :try_end_4e} :catchall_ae

    move-result-object v4

    .line 147
    :try_start_4f
    new-instance v2, Ljava/io/FileOutputStream;

    move-object/from16 v0, p4

    invoke-direct {v2, v0}, Ljava/io/FileOutputStream;-><init>(Ljava/io/File;)V
    :try_end_56
    .catch Ljava/io/FileNotFoundException; {:try_start_4f .. :try_end_56} :catch_e2
    .catch Ljava/io/IOException; {:try_start_4f .. :try_end_56} :catch_dd
    .catchall {:try_start_4f .. :try_end_56} :catchall_d6

    .line 148
    :try_start_56
    invoke-direct {p0, v4, v2}, Lcom/getkeepsafe/relinker/a;->a(Ljava/io/InputStream;Ljava/io/OutputStream;)J

    move-result-wide v8

    .line 149
    invoke-virtual {v2}, Ljava/io/FileOutputStream;->getFD()Ljava/io/FileDescriptor;

    move-result-object v3

    invoke-virtual {v3}, Ljava/io/FileDescriptor;->sync()V

    .line 150
    invoke-virtual/range {p4 .. p4}, Ljava/io/File;->length()J
    :try_end_64
    .catch Ljava/io/FileNotFoundException; {:try_start_56 .. :try_end_64} :catch_e6
    .catch Ljava/io/IOException; {:try_start_56 .. :try_end_64} :catch_df
    .catchall {:try_start_56 .. :try_end_64} :catchall_d8

    move-result-wide v10

    cmp-long v3, v8, v10

    if-eqz v3, :cond_71

    .line 161
    :try_start_69
    invoke-direct {p0, v4}, Lcom/getkeepsafe/relinker/a;->a(Ljava/io/Closeable;)V

    .line 162
    invoke-direct {p0, v2}, Lcom/getkeepsafe/relinker/a;->a(Ljava/io/Closeable;)V

    move v2, v6

    goto :goto_22

    .line 161
    :cond_71
    invoke-direct {p0, v4}, Lcom/getkeepsafe/relinker/a;->a(Ljava/io/Closeable;)V

    .line 162
    invoke-direct {p0, v2}, Lcom/getkeepsafe/relinker/a;->a(Ljava/io/Closeable;)V

    .line 166
    const/4 v2, 0x1

    const/4 v3, 0x0

    move-object/from16 v0, p4

    invoke-virtual {v0, v2, v3}, Ljava/io/File;->setReadable(ZZ)Z

    .line 167
    const/4 v2, 0x1

    const/4 v3, 0x0

    move-object/from16 v0, p4

    invoke-virtual {v0, v2, v3}, Ljava/io/File;->setExecutable(ZZ)Z

    .line 168
    const/4 v2, 0x1

    move-object/from16 v0, p4

    invoke-virtual {v0, v2}, Ljava/io/File;->setWritable(Z)Z
    :try_end_8b
    .catchall {:try_start_69 .. :try_end_8b} :catchall_13

    .line 175
    if-eqz v5, :cond_96

    :try_start_8d
    iget-object v2, v5, Lcom/getkeepsafe/relinker/a$a;->a:Ljava/util/zip/ZipFile;

    if-eqz v2, :cond_96

    .line 176
    iget-object v2, v5, Lcom/getkeepsafe/relinker/a$a;->a:Ljava/util/zip/ZipFile;

    invoke-virtual {v2}, Ljava/util/zip/ZipFile;->close()V
    :try_end_96
    .catch Ljava/io/IOException; {:try_start_8d .. :try_end_96} :catch_d4

    .line 180
    :cond_96
    :goto_96
    return-void

    .line 154
    :catch_97
    move-exception v4

    move-object v12, v3

    move-object v3, v2

    move-object v2, v12

    .line 161
    :goto_9b
    :try_start_9b
    invoke-direct {p0, v3}, Lcom/getkeepsafe/relinker/a;->a(Ljava/io/Closeable;)V

    .line 162
    invoke-direct {p0, v2}, Lcom/getkeepsafe/relinker/a;->a(Ljava/io/Closeable;)V

    move v2, v6

    goto :goto_22

    .line 157
    :catch_a3
    move-exception v4

    move-object v4, v2

    .line 161
    :goto_a5
    invoke-direct {p0, v4}, Lcom/getkeepsafe/relinker/a;->a(Ljava/io/Closeable;)V

    .line 162
    invoke-direct {p0, v3}, Lcom/getkeepsafe/relinker/a;->a(Ljava/io/Closeable;)V

    move v2, v6

    goto/16 :goto_22

    .line 161
    :catchall_ae
    move-exception v4

    move-object v12, v4

    move-object v4, v2

    move-object v2, v12

    :goto_b2
    invoke-direct {p0, v4}, Lcom/getkeepsafe/relinker/a;->a(Ljava/io/Closeable;)V

    .line 162
    invoke-direct {p0, v3}, Lcom/getkeepsafe/relinker/a;->a(Ljava/io/Closeable;)V

    throw v2

    .line 172
    :cond_b9
    const-string v2, "FATAL! Couldn\'t extract the library from the APK!"

    move-object/from16 v0, p5

    invoke-virtual {v0, v2}, Lcom/getkeepsafe/relinker/c;->a(Ljava/lang/String;)V
    :try_end_c0
    .catchall {:try_start_9b .. :try_end_c0} :catchall_13

    .line 175
    if-eqz v5, :cond_96

    :try_start_c2
    iget-object v2, v5, Lcom/getkeepsafe/relinker/a$a;->a:Ljava/util/zip/ZipFile;

    if-eqz v2, :cond_96

    .line 176
    iget-object v2, v5, Lcom/getkeepsafe/relinker/a$a;->a:Ljava/util/zip/ZipFile;

    invoke-virtual {v2}, Ljava/util/zip/ZipFile;->close()V
    :try_end_cb
    .catch Ljava/io/IOException; {:try_start_c2 .. :try_end_cb} :catch_cc

    goto :goto_96

    .line 178
    :catch_cc
    move-exception v2

    goto :goto_96

    :catch_ce
    move-exception v3

    goto/16 :goto_20

    .line 174
    :catchall_d1
    move-exception v2

    goto/16 :goto_15

    .line 178
    :catch_d4
    move-exception v2

    goto :goto_96

    .line 161
    :catchall_d6
    move-exception v2

    goto :goto_b2

    :catchall_d8
    move-exception v3

    move-object v12, v3

    move-object v3, v2

    move-object v2, v12

    goto :goto_b2

    .line 157
    :catch_dd
    move-exception v2

    goto :goto_a5

    :catch_df
    move-exception v3

    move-object v3, v2

    goto :goto_a5

    .line 154
    :catch_e2
    move-exception v2

    move-object v2, v3

    move-object v3, v4

    goto :goto_9b

    :catch_e6
    move-exception v3

    move-object v3, v4

    goto :goto_9b
.end method