写这个玩意的背景:在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