(1)新建python文件,命令为pushso1.py
(2)新建一个bat文件,命名为pushso1.bat
(3)新建一个txt文件,命名为latest_so_file.txt,为空即可
pushso1.py:
#################################################################################
#
# 脚本功能:将编译完成的Android 手机 so 文件push进手机,
# 并具有记忆功能,使用时会提示是否需要push上一次的so文件
# push so完成后会自动杀进程
#
# 使用方法:
# 1 电脑连接手机,使用如下两种方式运行脚本
# 2 ubuntu电脑:命令行:python pushso1.py
# 3 windows电脑:除上述方法外,还可以双击运行配套的pushso1.bat脚本文件
# 备注:使用此脚本需要创建一个latest_so_file.txt文件,此文件会保存上一次push进手机的so文件路径
#
#################################################################################
import os
import sys
lst=[] #保存即将push的so文件及路径
#################################################################################
#
# 功能:若用户需要输入上次的so文件,会先读取latest_so_file.txt文件,并将so文件存放在lst中
#
# 实现:
# 1 用户第一次pushso只能用新输入,不能选择此项(除非第一此手动将so文件先存放在该txt文件中)
#
#################################################################################
def input_latest_so():
current_file_path = os.path.abspath(__name__)
upfilePath = os.path.dirname(current_file_path)
with open("latest_so_file.txt", "r") as f:
for line in f.readlines():
line = line.strip('\n') #去掉列表中每一个元素的换行符
lst.append(line)
print(line)
#################################################################################
#
# 功能:读取用户输入的多个so文件,并存放在lst文件中,并将这些so文件中
#
# 实现:
# 1 用户可以将so文件直接拖入命令行,每次输入以enter间隔,两次enter键结束输入(一次以为还需要输入,另一次结束输入)
#
#################################################################################
def input_new_so():
print('input so file, press Enter to continue:')
while True:
temp = input()
if temp == '':
break
lst.append(temp)
current_file_path = os.path.abspath(__name__)
upfilePath = os.path.dirname(current_file_path)
with open("latest_so_file.txt","w") as f:
for i in lst:
f.write(i) # 自带文件关闭功能,不需要再写f.close()
f.write('\n')
#################################################################################
#
# 功能:读取lst文件中包含的so文件,并push进手机
#
# 实现:
# 1 读取每行的输入,找到so文件的父级目录,判断是需要push进手机的哪个目录
#
#################################################################################
def push_so(lst):
print('\npush so start!')
for i in lst:
print(i)
file = i #获取文件路径,eg: D:\\r_trunk\\vendor\\lib\\hw\\libcamoem.so
filePath = os.path.dirname(file) #获取文件的父级目录,eg: D:\\r_trunk\\vendor\\lib\\hw
upfilePath = os.path.dirname(filePath) #获取文件的父级的父级目录,eg: D:\\r_trunk\\vendor\\lib
upfileName = file[len(upfilePath)+1:len(filePath)] #获取文件的父级的父级目录名称,eg: hw
if upfileName == 'hw':
cmd = "adb push " +file+ " /vendor/lib/hw/"
else:
cmd = "adb push " +file+ " /vendor/lib/"
os.system(cmd)
#################################################################################
#
# 功能:读取一个字符,判断是不是数字
#
# 实现:
# 1
#
#################################################################################
def is_number(s):
try:
float(s)
return True
except ValueError:
pass
try:
import unicodedata
unicodedata.numeric(s)
return True
except (TypeError, ValueError):
pass
return False
#################################################################################
#
# 功能:杀手机进程
#
# 实现:
# 1 找到正在运行的camera server 的进程线程,进而找到该进程,然后杀掉
#
#################################################################################
def kill_server():
print("\nkill camera server start!")
cmd = "adb shell ps -A | find \"android.hardware.camera.provider@2.4-service\""
lala = os.popen(cmd).readlines()
length = len(lala)
if 0 == length:
print("android.hardware.camera.provider@2.4-service not exist, kill failed!")
else:
print("中间过程: "+lala[0])
pid = 0
for i in lala[0].split(" "):
if is_number(i):
pid = int(i)
break
if pid == 0:
print("no pid")
return
cmd = "adb root"
os.system(cmd)
cmd = "adb remount"
os.system(cmd)
cmd = "adb shell kill -9 "+str(pid)
os.system(cmd)
print("kill android.hardware.camera.provider@2.4-service done!")
#################################################################################
#
# 功能:获取手机权限,询问是push上一次的so还是新的so文件
#
# 实现:
# 1 adb root & adb remount后,根据条件判断选择调用哪个函数,最后push 所需的so
#
#################################################################################
def start():
cmd = "adb root"
os.system(cmd)
cmd = "adb remount"
os.system(cmd)
print('push latest so file ?')
print('-press Enter to continue')
print('-press any other key to push new so')
temp = input()
if temp == '':
input_latest_so()
else:
input_new_so()
push_so(lst)
print("push so done!")
kill_server()
if __name__ == "__main__":
start()
pushso1.bat
@echo off
python D:\\py\\pushso1.py
ping -n 3 127.0.0.1>nul
rem pause