diff examples/inject_redir.py @ 131:044bfc415577

Fix issue of data map verification. - Dalvik complain that data map generated by inject_redir.py is unexpected. - Test case map_verify_error_test() - Refactor inject_redir.py to paraspace.injection.inject_redir().
author Thinker K.F. Li <thinker@codemud.net>
date Tue, 09 Aug 2011 11:47:43 +0800
parents b381aa95fbad
children
line wrap: on
line diff
--- a/examples/inject_redir.py	Tue Aug 09 00:07:04 2011 +0800
+++ b/examples/inject_redir.py	Tue Aug 09 11:47:43 2011 +0800
@@ -7,10 +7,7 @@
 #
 from paraspace.dexfile import DEXFile, DEXFile_linked
 from paraspace.dex_deptracker import prepare_dep_decls
-from paraspace.dex_deptracker import restore_dependencies
-from paraspace.dex_deptracker import dex_sort_sorted_arrays
-from paraspace.injection import inject_classdefs, make_methodidxs_redir_map
-from paraspace.injection import dexfile_redirect_types
+from paraspace.injection import inject_redir
 import sys
 
 if len(sys.argv) != 6:
@@ -21,42 +18,28 @@
     sys.exit(1)
     pass
 
-src_dexname = sys.argv[1]
-inj_classname = sys.argv[2]
-dst_dexname = sys.argv[3]
-redir_classname = sys.argv[4]
-output_name = sys.argv[5]
 
-decls = prepare_dep_decls()
-
-src_dex = DEXFile.open(src_dexname)
-src_linked = DEXFile_linked.build_dependencies(src_dex, decls)
-
-dst_dex = DEXFile.open(dst_dexname)
-dst_linked = DEXFile_linked.build_dependencies(dst_dex, decls)
-
-inj_classdef = src_linked.find_class_name(inj_classname)
-injected_classdefs = inject_classdefs(dst_linked, src_linked, [inj_classdef])
-
-redir_typeid = dst_linked.find_typeid_name(redir_classname)
-redir_typeidx = dst_linked.get_idx_typeid(redir_typeid)
-inj_typeid = dst_linked.find_typeid_name(inj_classname)
-inj_typeidx = dst_linked.get_idx_typeid(inj_typeid)
-typeidxs_redir = {redir_typeidx: inj_typeidx}
-
-methodidxs_redir = \
-    make_methodidxs_redir_map(dst_linked, dst_linked, typeidxs_redir)
-
-injected_typeidxs = [dst_linked.get_idx_classdef(classdef)
-                     for classdef in injected_classdefs]
-dexfile_redirect_types(dst_linked, typeidxs_redir, methodidxs_redir,
-                       excludes=injected_typeidxs)
-
-dex_sort_sorted_arrays(dst_linked)
-restore_dependencies(dst_linked, decls)
-
-restore_raw = dst_linked.to_str()
-
-ofile = open(output_name, 'w')
-ofile.write(restore_raw)
-ofile.close()
+if __name__ == '__main__':
+    src_dexname = sys.argv[1]
+    inj_classname = sys.argv[2]
+    dst_dexname = sys.argv[3]
+    redir_classname = sys.argv[4]
+    output_name = sys.argv[5]
+    
+    decls = prepare_dep_decls()
+    
+    src_dex = DEXFile.open(src_dexname)
+    src_linked = DEXFile_linked.build_dependencies(src_dex, decls)
+    
+    dst_dex = DEXFile.open(dst_dexname)
+    dst_linked = DEXFile_linked.build_dependencies(dst_dex, decls)
+    
+    inject_redir(src_linked, inj_classname,
+                 dst_linked, redir_classname, decls)
+    
+    restore_raw = dst_linked.to_str()
+    
+    ofile = open(output_name, 'w')
+    ofile.write(restore_raw)
+    ofile.close()
+    pass