import zipfile #导入文件解压模块

import os,sys #导入os模块

import xml.dom.minidom #导入XML相关模块

from xml.dom.minidom import parse #导入XML相关模块

import shutil #导入文件处理模块

iconAttrName = "android:icon"#android的icon

roundIconAttrName = "android:roundIcon"#高版本上会有一个圆形的icon

outPath = sys.path[0]"/packUtil/"#解压目录

zipFileName = "yuanyuan.zip"#源文件的压缩文件

fileName = "yuanyuan"#解压后的文件目录

manifestPath = "/app/src/main/AndroidManifest.xml"#android配置文件目录

resPath = "/app/src/main/res/"#资源文件的目录

replaceLogoName = "ic_launcher.png"#替换的logo名称

replaceRoundLogoName = "ic_launcher_round.png"#替换的圆形logo名称

androidManifestTag = "application"#Android配置清单文件

cmd_gen_apk = "gradlew assembleRelease"#生成android包的命令,生成目录/app/build/outputs/apk/release/app-release.apk,

#找到application里面的根节点,获取到icon和roundicon的对应的图片名称

def parseXmlAndReplaceLogo(xmlPath):

domTree = parse(xmlPath)

rootNode = domTree.documentElement

applicationInfo = rootNode.getElementsByTagName(androidManifestTag)

app = applicationInfo[0]

if app.hasAttribute(iconAttrName):

print(app.getAttribute(iconAttrName))

replaceIcon(app.getAttribute(iconAttrName),1)

if app.hasAttribute(roundIconAttrName):

print(app.getAttribute(roundIconAttrName))

replaceIcon(app.getAttribute(roundIconAttrName),2)

#判断图片的位置,一般是在mipmap中,但是不排除部分开发者的不规范,放在drawable下面

#获取到路径和图片名称

def replaceIcon(dirAndName,type):

if "drawable" in dirAndName:

replaceMipMap(dirAndName.split("/")[1],type,"drawable")

elif "mipmap" in dirAndName:

replaceMipMap(dirAndName.split("/")[1],type,"mipmap")

else:

print("未找到相对应的图片")

#开始替换图片,logo文件只支持png

def replaceMipMap(logoFileName,type,dirstart):

print("开始替换文件..."+logoFileName)

resAllPath = outPath+fileName+resPath

resDirs = os.listdir(resAllPath)

newFileName = replaceLogoName

if type==2:

newFileName = replaceRoundLogoName

for f in resDirs:

if(f.startswith(dirstart)):

print("获取到文件目录:"+f)

print("移除文件:"+resAllPath+f+"/"+logoFileName+".png")

logoFilePath = resAllPath+f+"/"+logoFileName+".png"

if(os.path.exists(logoFilePath)):

os.remove(logoFilePath)

else:

continue

root = os.getcwd()

if(f.endswith("hdpi")):

shutil.copy(root+"/icon/icon-hdpi/"+newFileName,resAllPath+f+"/"+logoFileName+".png")

elif(f.endswith("ldpi")):

shutil.copy(root+"/icon/icon-ldpi/"+newFileName,resAllPath+f+"/"+logoFileName+".png")

elif(f.endswith("mdpi")):

shutil.copy(root+"/icon/icon-mdpi/"+newFileName,resAllPath+f+"/"+logoFileName+".png")

elif(f.endswith("xhdpi")):

shutil.copy(root+"/icon/icon-xhdpi/"+newFileName,resAllPath+f+"/"+logoFileName+".png")

elif(f.endswith("xxhdpi")):

shutil.copy(root+"/icon/icon-xxhdpi/"+newFileName,resAllPath+f+"/"+logoFileName+".png")

elif(f.endswith("xxxhdpi")):

shutil.copy(root+"/icon/icon-xxxhdpi/"+newFileName,resAllPath+f+"/"+logoFileName+".png")

else:

print("未找到对应尺寸的图片替换")

print("替换完成。。。")

#检查java环境配置

def configJavaEnv():

print("检查java环境")

conDomTree = parse("config.xml")

rootNode = conDomTree.documentElement

javaPath = rootNode.getElementsByTagName("javaPath")[0].childNodes[0].data

print("找到java环境位置:"+javaPath)

return javaPath

#写入环境配置

def writeJavaEnvToProperties(value):

file = open("gradle.properties",mode="r+")

testline = "org.gradle.java.home="+value

isConfig = False

for line in file:

if(testline==line.strip()):

isConfig = True

break;

if(not isConfig):

file.writelines("\n"+testline)

file.flush()

file.close()

print("已写入配置文件")

#改变工作目录到android Project目录

def changeDir(workPath):

os.chdir(workPath)

#生成安装包

def genReleaseApk():

os.system(cmd_gen_apk)

print("开始解压压缩包文件...")

file = zipfile.ZipFile(zipFileName,"r")

file.extractall(path=outPath)

file.close()

print("文件解压完毕,查找配置文件AndroidManifest文件...")

xmlFilePath = outPath+fileName+manifestPath

parseXmlAndReplaceLogo(xmlFilePath)#解析xml并替换图标

#配置javahome

gradleJdkPath = configJavaEnv()

print("切换工作目录...")

workPath = sys.path[0]+"/"+fileName

changeDir(workPath)

print("准备写入配置文件...")

writeJavaEnvToProperties(gradleJdkPath)

#生成安装包

genReleaseApk()

linux替换包的脚本,Andorid 自动替换logo打包脚本(支持windows和linux)相关推荐

  1. linux win im,IM即时通讯软件“喧喧”介绍:支持Windows、Linux、Mac系统

    喧喧是一款免费.开源.安全的IM即时通信软件,它支持Windows.Linux.Mac系统,Linux平台提供64位/32位的.tar.gz..deb..rpm软件包下载,兼容Ubuntu和CentO ...

  2. 解决Linux依赖包的烦恼,教你如何打包依赖,覆盖常用Linux

    前言 有时候遇到Linux无法连接互联网的时候,安装软件就成了一个很头大的麻烦事,各种依赖安装,那么怎么去解决这个问题呢?文章末有一键脚本 打包,是一个不错的选择,下面开始实践! 目录 ------- ...

  3. 条形码识别软件linux,条形码读取器Barcode Reader Toolkit 2021全新升级!支持Windows和Linux,算法升级!...

    Barcode Reader Toolkit for Windows是一个工具包,允许开发人员在其应用程序中添加条形码检测.该工具包将图像文件或内存位图作为输入,并返回有关每个条形码的信息,包括值,类 ...

  4. windows兼容Linux php,支持windows与linux的php计划任务的实现方法

    本文实例讲述了支持windows与linux的php计划任务的实现方法.包括了在winows下利用winodows计划任务来操作,还有在linux中利用linux的方法来实现.分享给大家供大家参考.具 ...

  5. 免费的XShell替代品,同时支持Windows,macOS,Linux!又来一款国产良心工具....

    来源:toutiao.com/i6694563184428188171 引言 FinalShell是一款免费的国产的集SSH工具.服务器管理.远程桌面加速的良心软件,同时支持Windows,macOS ...

  6. jadx 支持 Windows、Linux、 macOS,能够帮我们打开.apk, .dex, .jar,.zip等格式的文件

    作者:JavaGuide 链接:https://www.zhihu.com/question/20264247/answer/2306405289 来源:知乎 著作权归作者所有.商业转载请联系作者获得 ...

  7. X86/ARM USB2.0/USB3.0转网口,支持Windows、Linux、Android、wince

    USB to LAN方案 1.方案介绍 2.准备测试资料 3.linux系统下测试 4.android系统下测试 USB转LAN方案IC有: USB 3.0千兆以太网  ( AX88179)      ...

  8. GmBox – 支持批量下载谷歌音乐MP3的客户端 (免费开源支持Windows、Linux与Mac)

    谷歌音乐对于国人来说绝对是一个伟大的服务,它不仅所有MP3都是合法版权,而且还完全免费开放给大家下载.之前我们介绍过一款 谷歌音乐盒 的PC客户端,可以比网页版更方便地试听与下载正版音乐,可惜它只能在 ...

  9. 【githubdailyshare】可定制、现代化的跨平台文件管理器:Xplorer。支持 Windows、Linux、macOS

    印尼高中生 Kimlim 开发的一款可定制.现代化的跨平台文件管理器:Xplorer. 支持 Windows.Linux.macOS 等主流桌面系统,允许直接预览图片.文档.视频,免费开放,基于 Ap ...

最新文章

  1. 9 大主题卷积神经网络(CNN)的 PyTorch 实现
  2. 注册窗口类RegisterClassEx   AfxRegisterWndClass
  3. python编程入门 电子书-Python编程从入门到实践PDF电子书
  4. 图解VC++ opengl环境配置和几个入门例子
  5. svn 命令行_小型工作室搭建SVN经验
  6. [android]netd与NetworkManagementService初印象
  7. 动态硬盘转基本盘转换器
  8. Cisco防火墙概述和产品线
  9. python编程语言期中试题_MOOC Python编程的第六周测试,MOOCPython,语言,程序设计,测试题...
  10. 【整理】关于Android图形系统的一些事实真相
  11. 浅论汽车电子行业的汽车开放系统架构AUTOSAR
  12. AI赋能智慧图书馆,能否出现真正的书天堂?
  13. android 二维码扫描动画实现
  14. CSS图片保持原比例
  15. dll修复精灵无法链接服务器,教你一键dll修复精灵怎么使用
  16. android mmm 编译错误,Android 7.1 使用mmm编译模块失败
  17. 计算机组成原理-作业1
  18. 重拾Eclipse开发
  19. MD5.js,前端MD5加密
  20. Eclipse开发Android各种怪病

热门文章

  1. light oj 1011Marriage Ceremonies
  2. hibernate的native sql查询
  3. [转]Android最佳实践之:StrictMode介绍
  4. What is Gameplay
  5. 多线程同步之 WaitableTimer (等待定时器对象)[续三]
  6. Linux查找文件内容(grep)
  7. linux shell 下载并执行
  8. linux c 命令行参数处理函数 getopt()和getopt_long()
  9. wireshark 总体结构
  10. C语言实现修改文本文件中的特定行