我们知道Android apk在发布之前需要进行混淆。如果我们发布一个jar,但是并不希望别人轻松的看到我们的代码逻辑,这个时候就需要对jar包进行混淆了,下面是以前用ruby写的一个jar打包混淆工具,包含三个功能。 1.简单的对目录下的class文件打包。 2.对jar包进行混淆。 3.指定class文件不打入jar包。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
build_file_name = __FILE__ PROGUARD=true $path_tool_proguard ="/opt/adt/sdk/tools/proguard/lib/proguard.jar"#混淆工具的目录 classes_dir = File.dirname(build_file_name) shell_abs_path= File.absolute_path(build_file_name) project_path = shell_abs_path.sub("/bin/classes/#{$0}","") $config_progruad = "#{project_path}/proguard.txt"#混淆配置文件 $jar_output=classes_dir+"/classes.jar" $com_dir="com" $proguard_output=classes_dir+"/proguard.jar" $dex_output=classes_dir+"/urlparser.jar" $except_class = [ "com/kankan/anime/parser/IParser.class"#指定不需要打包的class文件 ] pack_class = [] def except?(file_name) $except_class.each{|c| if(file_name[c]) return true end } return false end def delete_unpack_class(jar_output) $except_class.each{|clazz| puts %x{zip -d #{jar_output} #{clazz}} } end def package(proguard) puts %x{jar -cvf "#{$jar_output}" #{$com_dir}} if proguard puts %x{java -jar #{$path_tool_proguard} @#{$config_progruad}} out = $proguard_output else out = $jar_output end delete_unpack_class(out) puts %x{dx --dex --output="#{$dex_output}" "#{out}"} end package(PROGUARD) |