Skip to content

Commit ffc3f56

Browse files
committed
adding validations and some refactoring
1 parent a09293e commit ffc3f56

File tree

2 files changed

+79
-34
lines changed

2 files changed

+79
-34
lines changed

bin/apkToJava

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,40 @@ include ApkToJava::Operations
55
include ApkToJava::Setup
66
include ApkToJava::PrettyPrinter
77

8-
def execute
8+
def apk_exists?
9+
File.exists? ARGV[0]
10+
end
11+
12+
def has_apk_extension?
13+
ARGV[0].split('/').last.split('.').last == 'apk'
14+
end
15+
16+
def wrong_usage
17+
print_info "Wrong Usage! Right usage is -"
18+
print_success "apkToJava path/to/apk/file"
19+
end
20+
21+
def valid_usage?
922
apk_file = ARGV[0]
10-
initialize_setup if !env_setup?
11-
view_as_java_code apk_file
23+
if ARGV.size > 1 || ARGV.empty?
24+
wrong_usage
25+
false
26+
elsif !apk_exists?
27+
print_error "#{apk_file} file does not exists!"
28+
false
29+
elsif !has_apk_extension?
30+
print_error "#{apk_file} is not an APK file!"
31+
false
32+
else
33+
true
34+
end
35+
end
36+
37+
def execute
38+
if valid_usage?
39+
initialize_setup if !env_setup?
40+
view_as_java_code ARGV[0]
41+
end
1242
end
1343

1444
execute

lib/apk_to_java.rb

Lines changed: 46 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@ def install_jadx
1919
end
2020

2121
def jadx_installed?
22-
!`ls #{ApkToJava::JADX}`.empty?
22+
File.exists? ApkToJava::JADX
2323
end
2424

2525
def dex_to_jar_installed?
26-
!`ls #{ApkToJava::DEX_TO_JAR}`.empty?
26+
File.exists? ApkToJava::DEX_TO_JAR
2727
end
2828

2929
def env_setup?
@@ -39,53 +39,68 @@ def initialize_setup
3939
end
4040

4141
module Operations
42-
def convert_to_dex(apk)
43-
print_info "Converting to dex.."
44-
`mkdir apkToJava`
45-
`cp #{apk} apkToJava/`
46-
apk_name = apk.split('/').last.split('.').first
47-
apk = "apkToJava/#{apk_name}"
48-
`mv apkToJava/#{apk_name}.apk apkToJava/#{apk_name}.zip`
49-
`unzip apkToJava/#{apk_name}.zip -d apkTojava/`
50-
`#{ApkToJava::DEX_TO_JAR} apkTojava/classes.dex`
51-
print_success "Done!"
52-
`pwd`.chomp + "/apkTojava/classes.dex"
42+
TEMP_DIR = 'apkToJavaTmp'
43+
44+
def copy_apk(apk)
45+
`mkdir #{TEMP_DIR}`
46+
`cp #{apk} #{TEMP_DIR}/`
5347
end
5448

55-
def dex_to_jar(apk)
56-
remove_existing_jar if jar_exists?
57-
dex_file = convert_to_dex apk
58-
print_info "Converting dex to jar.."
59-
command = ApkToJava::DEX_TO_JAR + " #{dex_file}"
60-
`#{command}`
61-
print_success "Done!"
62-
`pwd`.chomp + '/classes-dex2jar.jar'
49+
def unzip(apk_name)
50+
`mv #{TEMP_DIR}/#{apk_name}.apk #{TEMP_DIR}/#{apk_name}.zip`
51+
`unzip #{TEMP_DIR}/#{apk_name}.zip -d #{TEMP_DIR}/`
52+
end
53+
54+
def create_dex
55+
`#{ApkToJava::DEX_TO_JAR} #{TEMP_DIR}/classes.dex`
6356
end
6457

65-
def jar_exists?
66-
print `ls #{`pwd`.chomp}/classes-dex2jar.jar`
67-
!`ls #{`pwd`.chomp}/classes-dex2jar.jar`.empty?
58+
def path_to_dex
59+
`pwd`.chomp + "/#{TEMP_DIR}/classes.dex"
6860
end
6961

70-
def remove_existing_jar
71-
print_info "Removing existing jar.."
72-
`rm #{`pwd`.chomp}/classes-dex2jar.jar`
62+
def create_jar(dex_file)
63+
`#{ApkToJava::DEX_TO_JAR} #{dex_file} --force`
64+
end
65+
66+
def path_to_jar
67+
`pwd`.chomp + '/classes-dex2jar.jar'
7368
end
7469

7570
def clean_up
7671
print_info "Cleaning the mess.."
77-
`rm -rf apkToJava`
72+
`rm -rf #{TEMP_DIR}`
7873
print_success "done!"
7974
end
8075

76+
def open_code_in_gui(jar_file)
77+
`#{ApkToJava::JADX} #{jar_file} &`
78+
end
79+
80+
def convert_to_dex(apk)
81+
print_info "Converting to dex.."
82+
copy_apk apk
83+
apk_name = apk.split('/').last.split('.').first
84+
unzip apk_name
85+
create_dex
86+
print_success "Done!"
87+
path_to_dex
88+
end
89+
90+
def dex_to_jar(apk)
91+
dex_file = convert_to_dex apk
92+
print_info "Converting dex to jar.."
93+
create_jar dex_file
94+
print_success "Done!"
95+
path_to_jar
96+
end
97+
8198
def view_as_java_code(apk)
8299
jar_file = dex_to_jar apk
83100
clean_up
84101
print_info "Opening in gui interface.."
85-
86-
command = ApkToJava::JADX + " #{jar_file} &"
87102
print_success "Please be patient, apkToJava might take some time to load your project in gui interface"
88-
`#{command}`
103+
open_code_in_gui jar_file
89104
end
90105
end
91106
end

0 commit comments

Comments
 (0)