Skip to content

Commit 732014e

Browse files
committed
adding support for linux as well
1 parent 52c8b42 commit 732014e

File tree

6 files changed

+125
-36
lines changed

6 files changed

+125
-36
lines changed

bin/apkToJava

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
require_relative '../lib/apk_to_java.rb'
44
include ApkToJava::Operations
5-
include ApkToJava::Setup
5+
include ApkToJava::EnvSetup
66
include ApkToJava::PrettyPrinter
77

88
def apk_exists?

lib/apk_to_java.rb

Lines changed: 24 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,39 @@
11
require_relative 'apk_to_java/pretty_printer'
2+
require_relative 'apk_to_java/mac_setup'
3+
require_relative 'apk_to_java/linux_setup'
4+
require_relative 'apk_to_java/os'
25

36
module ApkToJava
47
include ApkToJava::PrettyPrinter
5-
DEX_TO_JAR = '/usr/local/Cellar/dex2jar/2.0/bin/d2j-dex2jar'
6-
JADX = '/usr/local/Cellar/jadx/bin/jadx-gui'
7-
8-
module Setup
9-
def install_dex2jar
10-
print_info("Installing dex2jar..")
11-
`ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" < /dev/null 2> /dev/null && brew install dex2jar`
12-
print_success "Done!"
13-
end
14-
15-
def install_jadx
16-
print_info("Installing jadx..")
17-
`cd /usr/local/Cellar && wget https://github.com/skylot/jadx/releases/download/v0.6.0/jadx-0.6.0.zip && unzip jadx-0.6.0.zip -d jadx/ && rm jadx-0.6.0.zip && cd -`
18-
print_success "Done!"
19-
end
20-
21-
def jadx_installed?
22-
File.exists? ApkToJava::JADX
8+
module EnvSetup
9+
def supported_os
10+
if ApkToJava::OS.mac?
11+
ApkToJava::MacSetup.new
12+
elsif ApkToJava::OS.linux?
13+
ApkToJava::LinuxSetup.new
14+
end
2315
end
2416

25-
def dex_to_jar_installed?
26-
File.exists? ApkToJava::DEX_TO_JAR
17+
def initialize_setup
18+
print_info("Initializing setup!!")
19+
os = supported_os
20+
if !os.nil?
21+
os.install_dex2jar if !os.dex_to_jar_installed?
22+
os.install_jadx if !os.jadx_installed?
23+
print_success("Setup done :)")
24+
else
25+
print_error "Sorry! apkToJava supports only MAC and Linux"
26+
end
2727
end
2828

2929
def env_setup?
30-
dex_to_jar_installed? && jadx_installed?
31-
end
32-
33-
def initialize_setup
34-
print_info("Initializing setup!!")
35-
install_dex2jar if !dex_to_jar_installed?
36-
install_jadx if !jadx_installed?
37-
print_success("Setup done :)")
30+
supported_os.env_setup?
3831
end
3932
end
4033

4134
module Operations
4235
TEMP_DIR = 'apkToJavaTmp'
36+
include ApkToJava::EnvSetup
4337

4438
def copy_apk(apk)
4539
`mkdir #{TEMP_DIR}`
@@ -51,16 +45,12 @@ def unzip(apk_name)
5145
`unzip #{TEMP_DIR}/#{apk_name}.zip -d #{TEMP_DIR}/`
5246
end
5347

54-
def create_dex
55-
`#{ApkToJava::DEX_TO_JAR} #{TEMP_DIR}/classes.dex`
56-
end
57-
5848
def path_to_dex
5949
`pwd`.chomp + "/#{TEMP_DIR}/classes.dex"
6050
end
6151

6252
def create_jar(dex_file)
63-
`#{ApkToJava::DEX_TO_JAR} #{dex_file} --force`
53+
`#{supported_os.dex2jar} #{dex_file} --force`
6454
end
6555

6656
def path_to_jar
@@ -74,15 +64,14 @@ def clean_up
7464
end
7565

7666
def open_code_in_gui(jar_file)
77-
`#{ApkToJava::JADX} #{jar_file} &`
67+
`#{supported_os.jadx} #{jar_file} &`
7868
end
7969

8070
def convert_to_dex(apk)
8171
print_info "Converting to dex.."
8272
copy_apk apk
8373
apk_name = apk.split('/').last.split('.').first
8474
unzip apk_name
85-
create_dex
8675
print_success "Done!"
8776
path_to_dex
8877
end

lib/apk_to_java/linux_setup.rb

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
module ApkToJava
2+
class LinuxSetup < Setup
3+
DEX_TO_JAR_URL = "'https://drive.google.com/uc?id=0BxXHKToe2BBtbmJocnE0SlhNNXc&export=download'"
4+
DEX_TO_JAR = '/lib/dex2jar/dex2jar-0.0.9.15/d2j-dex2jar.sh'
5+
JADX = '/lib/jadx/bin/jadx-gui'
6+
7+
def dex2jar
8+
"sudo sh " + DEX_TO_JAR
9+
end
10+
11+
def jadx
12+
JADX
13+
end
14+
15+
def download_dex2jar
16+
"wget --no-check-certificate #{DEX_TO_JAR_URL} -O dex2jar.zip && sudo unzip dex2jar.zip -d dex2jar && rm dex2jar.zip"
17+
end
18+
19+
def install_dex2jar
20+
print_info("Installing dex2jar..")
21+
`cd /lib && sudo #{download_dex2jar} && cd -`
22+
print_success "Done!"
23+
end
24+
25+
def install_jadx
26+
print_info("Installing jadx..")
27+
`cd /lib && sudo #{download_jadx} && cd -`
28+
print_success "Done!"
29+
end
30+
end
31+
end

lib/apk_to_java/mac_setup.rb

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
require_relative './setup.rb'
2+
3+
module ApkToJava
4+
class MacSetup < Setup
5+
DEX_TO_JAR = '/usr/local/Cellar/dex2jar/2.0/bin/d2j-dex2jar'
6+
JADX = '/usr/local/Cellar/jadx/bin/jadx-gui'
7+
8+
def install_dex2jar
9+
print_info("Installing dex2jar..")
10+
`ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" < /dev/null 2> /dev/null`
11+
`brew install dex2jar`
12+
print_success "Done!"
13+
end
14+
15+
def dex2jar
16+
DEX_TO_JAR
17+
end
18+
19+
def jadx
20+
JADX
21+
end
22+
23+
def install_jadx
24+
print_info("Installing jadx..")
25+
`cd /usr/local/Cellar && #{download_jadx} && cd -`
26+
print_success "Done!"
27+
end
28+
end
29+
end

lib/apk_to_java/os.rb

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
module ApkToJava
2+
module OS
3+
def OS.windows?
4+
(/cygwin|mswin|mingw|bccwin|wince|emx/ =~ RUBY_PLATFORM) != nil
5+
end
6+
7+
def OS.mac?
8+
(/darwin/ =~ RUBY_PLATFORM) != nil
9+
end
10+
11+
def OS.unix?
12+
!OS.windows?
13+
end
14+
15+
def OS.linux?
16+
OS.unix? and not OS.mac?
17+
end
18+
end
19+
end

lib/apk_to_java/setup.rb

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
module ApkToJava
2+
class Setup
3+
JADX_URL = "'https://drive.google.com/uc?id=0BxXHKToe2BBtMGZMQXR5NFhGSUE&export=download'"
4+
5+
def download_jadx
6+
"wget --no-check-certificate #{JADX_URL} -O jadx.zip && sudo unzip jadx.zip -d jadx/ && rm jadx.zip"
7+
end
8+
9+
def jadx_installed?
10+
File.exists? self.class::JADX
11+
end
12+
13+
def dex_to_jar_installed?
14+
File.exists? self.class::DEX_TO_JAR
15+
end
16+
17+
def env_setup?
18+
dex_to_jar_installed? && jadx_installed?
19+
end
20+
end
21+
end

0 commit comments

Comments
 (0)