android studio gradle的external libraries下的lib,提取到某个文件夹

  • Post author:
  • Post category:其他


1.场景gradle工程转安卓系统编译,如果需要提取gradle的external libraries包位于.idea/libraries的(python脚本)

2. Gradle__androidx_constraintlayout这样android自带的不需要导入的(把这个.idea里面复制到外面某个文件夹,手动剔除安卓自带的);./app/libs 下的一般不会太多,自己处理

2.有lib名和lib存放地址后,写一个脚本收集到某个目录下(大部分lib可提取,少部分的需要自己手动处理)

—————————————-xxxx.py———————————–

import xml.dom.minidom as xmldom

import os,re,shutil

#定义需要提取的gradle 工程目录下.idea/libraries,

path_libs_idea = “path_xxxx/idea/libraries”


allLibs = [] #查询到的libs

filePathList = []

destPath = ‘E:\xxx_dest_path’ #lib包想要存储到什么目录

def file_name_list(file_dir):

L=[]

for root, dirs, files in os.walk(file_dir):

for file in files:

if os.path.splitext(file)[1] == ‘.xml’:

L.append(os.path.join(root, file))

return L


def getJarPath(jarPath):

pattern = ‘jar://(.*)!/’

matchPath=re.search(pattern, jarPath, flags=0)

if matchPath:

# print(“jarPath.group() : “, matchPath.group())

# print(“jarPath.group() : “, matchPath.group(1))

return matchPath.group(1)

else:

# print(“not find path in “, jarPath)

return None

def getJarName(jarPath):

pathMath = jarPath.split(‘/’)

jarName = “”

for pa in pathMath:

jarName = pa

return jarName

#解析xml等

def getLibsLocPath(file):

jarData = {}

# 得到文件对象

dom_obj = xmldom.parse(file)

# 获得子标签

libraryTableComponet = dom_obj.getElementsByTagName(“component”)

# 获得子标签属性

libraryTableComponet[0].getElementsByTagName(“library”)[0].getAttribute(“name”)

jarTempPath = libraryTableComponet[0].getElementsByTagName(“library”)[0].getElementsByTagName(“CLASSES”)[0].getElementsByTagName(“root”)[0].getAttribute(“url”)

jarPath = getJarPath(jarTempPath)

#添加libs

allLibs.append(libraryTableComponet[0].getElementsByTagName(“library”)[0].getAttribute(“name”))

if jarPath:

jarData[‘path’] = jarPath

jarData[‘name’] = getJarName(jarPath)

jarData[‘package’] = libraryTableComponet[0].getElementsByTagName(“library”)[0].getAttribute(“name”)

filePathList.append(jarPath)

return jarData

else:

return None

if __name__ == “__main__”:

#定义容器

libPathList= []

files = file_name_list(path_libs_idea)

for file in files:

# print(file)

# 获得子标签属性

tempFile = getLibsLocPath(file)

if tempFile:

libPathList.append(tempFile)

# for kv in libPathList:

#     #输出获得的 lib名和lib路径

#     print(kv)

for path in filePathList:

try:

print(path)

shutil.move(path,destPath)

except:

print(“找不到文件或文件名冲突:” + path)

#查询到的libs

for lib in allLibs:

print(lib)



版权声明:本文为feihuiwu123原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。