写这个玩意的背景:在u8多渠道打包里,需要分析jar包,并把里面的文件按目录和类型分别放在root和assets文件夹里,之前师兄都是手动解压,一个一个文件夹找文件,效率比较低,刚好最近手上的android项目已经做完了,就决定写一个自动化分析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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
# -*- coding: utf-8 -*- import os import shutil import zipfile count = 1 def getSumDir(): sumfilelist = os.listdir(os.getcwd()) for dir in sumfilelist: if ".idea" not in dir : classify( dir ) def getlibDir(): sumfilelist = os.listdir(os.getcwd()) for dir in sumfilelist: if "libs" in dir : jieyajar( dir ) def jieyajar( dir ): files = os.listdir( dir ) for jars in files: if "jar" in jars: zfile = zipfile.ZipFile( 'libs/' + jars, 'r' ) if not os.path.exists(os.getcwd() + '/jarlog/' + jars): os.makedirs(os.getcwd() + '/jarlog/' + jars) zfile.extractall(os.getcwd() + '/jarlog/' + jars) if not os.path.exists(os.getcwd() + '/jars/' ): os.makedirs(os.getcwd() + '/jars/' ) zfile.extractall(os.getcwd() + '/jars/' ) zfile.close for file in os.listdir(os.getcwd()): if "jars" in file : classify( file ) # def classify(path): # if os.path.isfile(path): # if ".class" not in path: # if "assets" in os.path.dirname(path): # if not os.path.exists(os.path.dirname(os.getcwd()) + '/assets/' + os.path.dirname(path)): # os.makedirs(os.path.dirname(os.getcwd()) + '/assets/' + os.path.dirname(path)) # shutil.copy(path, os.path.dirname(os.getcwd()) + '/assets/' + os.path.dirname(path)) # else: # if not os.path.exists(os.path.dirname(os.getcwd())+'/root/'+os.path.dirname(path)): # os.makedirs(os.path.dirname(os.getcwd())+'/root/'+os.path.dirname(path)) # shutil.copy(path,os.path.dirname(os.getcwd())+'/root/'+os.path.dirname(path)) # else : # list = os.listdir(path) # for dir in list: # classify(path+"/"+dir) def classify(path): global count if os.path.isfile(path): if ".class" not in path: if not os.path.exists(os.getcwd() + '/root/' + os.path.dirname(path)): os.makedirs(os.getcwd() + '/root/' + os.path.dirname(path)) shutil.copy(path, os.getcwd() + '/root/' + os.path.dirname(path)) else : if 'assets' in path and count = = 1 : count = count + 1 shutil.copytree(os.getcwd() + '/' + path, os.getcwd() + '/assets' ) elif 'META-INF' not in path: list = os.listdir(path) for dir in list : classify(path + "/" + dir ) # getSumDir() getlibDir() |
嗯,主要就是对文件夹和文件的操作。。
以上这篇用python解压分析jar包实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/u013692888/article/details/75011528