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
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
.method private a(Ljava/io/InputStream;Ljava/io/OutputStream;)J
.registers 8
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
const/16 v0, 0x1000
.line 41
new-array v0, v0, [B
const-wide/16 v1, 0x0
.line 42
:goto_6
invoke-virtual {p1, v0}, Ljava/io/InputStream;->read([B)I
move-result v3
const/4 v4, -0x1
if-ne v3, v4, :cond_11
.line 43
invoke-virtual {p2}, Ljava/io/OutputStream;->flush()V
return-wide v1
:cond_11
const/4 v4, 0x0
.line 44
invoke-virtual {p2, v0, v4, v3}, Ljava/io/OutputStream;->write([BII)V
int-to-long v3, v3
add-long/2addr v1, v3
goto :goto_6
.end method
.method private a(Landroid/content/Context;[Ljava/lang/String;Ljava/lang/String;Lcom/getkeepsafe/relinker/e;)Lcom/getkeepsafe/relinker/a$a;
.registers 21
move-object/from16 v0, p2
.line 7
invoke-direct/range {p0 .. p1}, Lcom/getkeepsafe/relinker/a;->a(Landroid/content/Context;)[Ljava/lang/String;
move-result-object v1
array-length v2, v1
const/4 v3, 0x0
const/4 v4, 0x0
move-object v6, v3
const/4 v5, 0x0
:goto_b
if-ge v5, v2, :cond_80
aget-object v7, v1, v5
const/4 v8, 0x0
:goto_10
add-int/lit8 v9, v8, 0x1
const/4 v10, 0x5
const/4 v11, 0x1
if-ge v8, v10, :cond_24
.line 8
:try_start_16
new-instance v8, Ljava/util/zip/ZipFile;
new-instance v12, Ljava/io/File;
invoke-direct {v12, v7}, Ljava/io/File;-><init>(Ljava/lang/String;)V
invoke-direct {v8, v12, v11}, Ljava/util/zip/ZipFile;-><init>(Ljava/io/File;I)V
:try_end_20
.catch Ljava/io/IOException; {:try_start_16 .. :try_end_20} :catch_22
move-object v6, v8
goto :goto_24
:catch_22
move v8, v9
goto :goto_10
:cond_24
:goto_24
if-nez v6, :cond_2b
:cond_26
move-object/from16 v13, p3
move-object/from16 v10, p4
goto :goto_7c
:cond_2b
const/4 v8, 0x0
:goto_2c
add-int/lit8 v9, v8, 0x1
if-ge v8, v10, :cond_26
.line 9
array-length v8, v0
const/4 v12, 0x0
:goto_32
if-ge v12, v8, :cond_75
aget-object v13, v0, v12
.line 10
new-instance v14, Ljava/lang/StringBuilder;
invoke-direct {v14}, Ljava/lang/StringBuilder;-><init>()V
const-string v15, "lib"
invoke-virtual {v14, v15}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
sget-char v15, Ljava/io/File;->separatorChar:C
invoke-virtual {v14, v15}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder;
invoke-virtual {v14, v13}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
sget-char v13, Ljava/io/File;->separatorChar:C
invoke-virtual {v14, v13}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder;
move-object/from16 v13, p3
invoke-virtual {v14, v13}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v14}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v14
const/4 v15, 0x2
.line 11
new-array v15, v15, [Ljava/lang/Object;
aput-object v14, v15, v4
aput-object v7, v15, v11
const-string v4, "Looking for %s in APK %s..."
move-object/from16 v10, p4
invoke-virtual {v10, v4, v15}, Lcom/getkeepsafe/relinker/e;->a(Ljava/lang/String;[Ljava/lang/Object;)V
.line 12
invoke-virtual {v6, v14}, Ljava/util/zip/ZipFile;->getEntry(Ljava/lang/String;)Ljava/util/zip/ZipEntry;
move-result-object v4
if-eqz v4, :cond_70
.line 13
new-instance v0, Lcom/getkeepsafe/relinker/a$a;
invoke-direct {v0, v6, v4}, Lcom/getkeepsafe/relinker/a$a;-><init>(Ljava/util/zip/ZipFile;Ljava/util/zip/ZipEntry;)V
return-object v0
:cond_70
add-int/lit8 v12, v12, 0x1
const/4 v4, 0x0
const/4 v10, 0x5
goto :goto_32
:cond_75
move-object/from16 v13, p3
move-object/from16 v10, p4
move v8, v9
const/4 v10, 0x5
goto :goto_2c
:goto_7c
add-int/lit8 v5, v5, 0x1
const/4 v4, 0x0
goto :goto_b
:cond_80
return-object v3
.end method
.method private a(Ljava/io/Closeable;)V
.registers 2
if-eqz p1, :cond_5
.line 45
: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_5
:catch_5
:cond_5
return-void
.end method
.method private a(Landroid/content/Context;)[Ljava/lang/String;
.registers 6
.line 1
invoke-virtual {p1}, Landroid/content/Context;->getApplicationInfo()Landroid/content/pm/ApplicationInfo;
move-result-object p1
.line 2
sget v0, Landroid/os/Build$VERSION;->SDK_INT:I
const/4 v1, 0x0
const/4 v2, 0x1
const/16 v3, 0x15
if-lt v0, v3, :cond_20
iget-object v0, p1, Landroid/content/pm/ApplicationInfo;->splitSourceDirs:[Ljava/lang/String;
if-eqz v0, :cond_20
array-length v3, v0
if-eqz v3, :cond_20
.line 3
array-length v3, v0
add-int/2addr v3, v2
new-array v3, v3, [Ljava/lang/String;
.line 4
iget-object p1, p1, Landroid/content/pm/ApplicationInfo;->sourceDir:Ljava/lang/String;
aput-object p1, v3, v1
.line 5
array-length p1, v0
invoke-static {v0, v1, v3, v2, p1}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
return-object v3
.line 6
:cond_20
new-array v0, v2, [Ljava/lang/String;
iget-object p1, p1, Landroid/content/pm/ApplicationInfo;->sourceDir:Ljava/lang/String;
aput-object p1, v0, v1
return-object v0
.end method
# virtual methods
.method public a(Landroid/content/Context;[Ljava/lang/String;Ljava/lang/String;Ljava/io/File;Lcom/getkeepsafe/relinker/e;)V
.registers 16
const/4 v0, 0x0
.line 14
:try_start_1
invoke-direct {p0, p1, p2, p3, p5}, Lcom/getkeepsafe/relinker/a;->a(Landroid/content/Context;[Ljava/lang/String;Ljava/lang/String;Lcom/getkeepsafe/relinker/e;)Lcom/getkeepsafe/relinker/a$a;
move-result-object p1
:try_end_5
.catchall {:try_start_1 .. :try_end_5} :catchall_a1
if-eqz p1, :cond_99
const/4 p2, 0x0
const/4 v1, 0x0
:goto_9
add-int/lit8 v2, v1, 0x1
const/4 v3, 0x5
if-ge v1, v3, :cond_88
:try_start_e
const-string v1, "Found %s! Extracting..."
const/4 v3, 0x1
.line 15
new-array v4, v3, [Ljava/lang/Object;
aput-object p3, v4, p2
invoke-virtual {p5, v1, v4}, Lcom/getkeepsafe/relinker/e;->a(Ljava/lang/String;[Ljava/lang/Object;)V
:try_end_18
.catchall {:try_start_e .. :try_end_18} :catchall_9f
.line 16
:try_start_18
invoke-virtual {p4}, Ljava/io/File;->exists()Z
move-result v1
if-nez v1, :cond_26
invoke-virtual {p4}, Ljava/io/File;->createNewFile()Z
move-result v1
:try_end_22
.catch Ljava/io/IOException; {:try_start_18 .. :try_end_22} :catch_86
.catchall {:try_start_18 .. :try_end_22} :catchall_9f
if-nez v1, :cond_26
goto/16 :goto_86
.line 17
:cond_26
:try_start_26
iget-object v1, p1, Lcom/getkeepsafe/relinker/a$a;->a:Ljava/util/zip/ZipFile;
iget-object v4, p1, Lcom/getkeepsafe/relinker/a$a;->b:Ljava/util/zip/ZipEntry;
invoke-virtual {v1, v4}, Ljava/util/zip/ZipFile;->getInputStream(Ljava/util/zip/ZipEntry;)Ljava/io/InputStream;
move-result-object v1
:try_end_2e
.catch Ljava/io/FileNotFoundException; {:try_start_26 .. :try_end_2e} :catch_80
.catch Ljava/io/IOException; {:try_start_26 .. :try_end_2e} :catch_7a
.catchall {:try_start_26 .. :try_end_2e} :catchall_71
.line 18
:try_start_2e
new-instance v4, Ljava/io/FileOutputStream;
invoke-direct {v4, p4}, Ljava/io/FileOutputStream;-><init>(Ljava/io/File;)V
:try_end_33
.catch Ljava/io/FileNotFoundException; {:try_start_2e .. :try_end_33} :catch_6f
.catch Ljava/io/IOException; {:try_start_2e .. :try_end_33} :catch_6d
.catchall {:try_start_2e .. :try_end_33} :catchall_6b
.line 19
:try_start_33
invoke-direct {p0, v1, v4}, Lcom/getkeepsafe/relinker/a;->a(Ljava/io/InputStream;Ljava/io/OutputStream;)J
move-result-wide v5
.line 20
invoke-virtual {v4}, Ljava/io/FileOutputStream;->getFD()Ljava/io/FileDescriptor;
move-result-object v7
invoke-virtual {v7}, Ljava/io/FileDescriptor;->sync()V
.line 21
invoke-virtual {p4}, Ljava/io/File;->length()J
move-result-wide v7
:try_end_42
.catch Ljava/io/FileNotFoundException; {:try_start_33 .. :try_end_42} :catch_82
.catch Ljava/io/IOException; {:try_start_33 .. :try_end_42} :catch_7c
.catchall {:try_start_33 .. :try_end_42} :catchall_68
cmp-long v9, v5, v7
if-eqz v9, :cond_4d
.line 22
:try_start_46
invoke-direct {p0, v1}, Lcom/getkeepsafe/relinker/a;->a(Ljava/io/Closeable;)V
.line 23
:goto_49
invoke-direct {p0, v4}, Lcom/getkeepsafe/relinker/a;->a(Ljava/io/Closeable;)V
goto :goto_86
.line 24
:cond_4d
invoke-direct {p0, v1}, Lcom/getkeepsafe/relinker/a;->a(Ljava/io/Closeable;)V
.line 25
invoke-direct {p0, v4}, Lcom/getkeepsafe/relinker/a;->a(Ljava/io/Closeable;)V
.line 26
invoke-virtual {p4, v3, p2}, Ljava/io/File;->setReadable(ZZ)Z
.line 27
invoke-virtual {p4, v3, p2}, Ljava/io/File;->setExecutable(ZZ)Z
.line 28
invoke-virtual {p4, v3}, Ljava/io/File;->setWritable(Z)Z
:try_end_5c
.catchall {:try_start_46 .. :try_end_5c} :catchall_9f
if-eqz p1, :cond_67
.line 29
:try_start_5e
iget-object p2, p1, Lcom/getkeepsafe/relinker/a$a;->a:Ljava/util/zip/ZipFile;
if-eqz p2, :cond_67
.line 30
iget-object p1, p1, Lcom/getkeepsafe/relinker/a$a;->a:Ljava/util/zip/ZipFile;
invoke-virtual {p1}, Ljava/util/zip/ZipFile;->close()V
:try_end_67
.catch Ljava/io/IOException; {:try_start_5e .. :try_end_67} :catch_67
:catch_67
:cond_67
return-void
:catchall_68
move-exception p2
move-object v0, v4
goto :goto_73
:catchall_6b
move-exception p2
goto :goto_73
:catch_6d
move-object v4, v0
goto :goto_7c
:catch_6f
move-object v4, v0
goto :goto_82
:catchall_71
move-exception p2
move-object v1, v0
.line 31
:goto_73
:try_start_73
invoke-direct {p0, v1}, Lcom/getkeepsafe/relinker/a;->a(Ljava/io/Closeable;)V
.line 32
invoke-direct {p0, v0}, Lcom/getkeepsafe/relinker/a;->a(Ljava/io/Closeable;)V
throw p2
:catch_7a
move-object v1, v0
move-object v4, v1
.line 33
:catch_7c
:goto_7c
invoke-direct {p0, v1}, Lcom/getkeepsafe/relinker/a;->a(Ljava/io/Closeable;)V
goto :goto_49
:catch_80
move-object v1, v0
move-object v4, v1
:catch_82
:goto_82
invoke-direct {p0, v1}, Lcom/getkeepsafe/relinker/a;->a(Ljava/io/Closeable;)V
goto :goto_49
:catch_86
:goto_86
move v1, v2
goto :goto_9
:cond_88
const-string p2, "FATAL! Couldn\'t extract the library from the APK!"
.line 34
invoke-virtual {p5, p2}, Lcom/getkeepsafe/relinker/e;->a(Ljava/lang/String;)V
:try_end_8d
.catchall {:try_start_73 .. :try_end_8d} :catchall_9f
if-eqz p1, :cond_98
.line 35
:try_start_8f
iget-object p2, p1, Lcom/getkeepsafe/relinker/a$a;->a:Ljava/util/zip/ZipFile;
if-eqz p2, :cond_98
.line 36
iget-object p1, p1, Lcom/getkeepsafe/relinker/a$a;->a:Ljava/util/zip/ZipFile;
invoke-virtual {p1}, Ljava/util/zip/ZipFile;->close()V
:try_end_98
.catch Ljava/io/IOException; {:try_start_8f .. :try_end_98} :catch_98
:catch_98
:cond_98
return-void
.line 37
:cond_99
:try_start_99
new-instance p2, Lcom/getkeepsafe/relinker/MissingLibraryException;
invoke-direct {p2, p3}, Lcom/getkeepsafe/relinker/MissingLibraryException;-><init>(Ljava/lang/String;)V
throw p2
:try_end_9f
.catchall {:try_start_99 .. :try_end_9f} :catchall_9f
:catchall_9f
move-exception p2
goto :goto_a3
:catchall_a1
move-exception p2
move-object p1, v0
:goto_a3
if-eqz p1, :cond_ae
.line 38
:try_start_a5
iget-object p3, p1, Lcom/getkeepsafe/relinker/a$a;->a:Ljava/util/zip/ZipFile;
if-eqz p3, :cond_ae
.line 39
iget-object p1, p1, Lcom/getkeepsafe/relinker/a$a;->a:Ljava/util/zip/ZipFile;
invoke-virtual {p1}, Ljava/util/zip/ZipFile;->close()V
:try_end_ae
.catch Ljava/io/IOException; {:try_start_a5 .. :try_end_ae} :catch_ae
.line 40
:catch_ae
:cond_ae
goto :goto_b0
:goto_af
throw p2
:goto_b0
goto :goto_af
.end method