Android 龍旗內建應用python指令碼

2021-09-01 11:20:23 字數 3641 閱讀 1833

python指令碼**如下:

#!/usr/bin/env python

# coding: utf-8

import os,tempfile,subprocess,os,hashlib,operator

import sys

import shutil

import zipfile

import time

rootpath = os.path.abspath(os.path.join(os.getcwd(),"../../.."))

filepath = rootpath+"/zprojects/longcheer-binary"

filename = "packages.xml"

file = filepath+os.sep+filename

sourcedir = os.path.abspath(os.curdir)

sourcedirfiles = os.listdir(sourcedir)

fileexist = 3

fileexistbutnull = 5

filenotexist = 7

def isfileexists(): //判斷packages.xml是否存在

if os.path.exists(file):

if os.path.getsize(file):

print "file exists and is not null"

size=os.path.getsize(file)

os.system('ls -lh %s' %(file))

return fileexist //如果檔案存在並且不是null,返回fileexist

else:

print ("file exists but is null")

os.system('ls -lh %s' %(file))

return fileexistbutnull //如果檔案存在但是null,返回fileexistbutnull

else:

print ("file doesn't exist")

return filenotexist //返回檔案不存在

for name in sourcedirfiles: //先遍歷當前路徑下的所有apk

if '.apk' == name[-4:]: //判斷是不是apk

shutil.copyfile(sourcedir+os.sep+name,targetdir+os.sep+name) //如果是apk就開始拷貝

def createapkdirectory(): //建立解壓apk的資料夾,解壓後的資料夾名稱用該apk的名稱來命名

for name in sourcedirfiles:

if '.apk' == name[-4:]: //判斷該檔案是否為apk,name[-4:]這個取的是名稱的後四位

if(os.path.exists(name[0:-4])): //如果資料夾已經存在,刪掉

for f in os.listdir(sourcedir+os.sep+name[0:-4]):

filepath = os.path.join(name[0:-4],f)

if os.path.isfile(filepath):

os.remove(filepath)

print filepath+" was removed!"

elif os.path.isdir(filepath):

shutil.rmtree(filepath,true)

print "directory: "+filepath+" was removed"

else :

os.mkdir(name[0:-4]) //如果不存在就建立新的

def unzipapkfiles(): //此方法是解壓apk

for name in sourcedirfiles:

if '.apk' == name[-4:]:

fz = zipfile.zipfile(sourcedir+os.sep+name,'r') //讀取apk,取到所有檔名稱

for file in fz.namelist():

if(file.startswith("lib")): //判斷是否為lib庫,如果是lib再進行解壓

fz.extract(file,name[0:-4])

print name+" 已經解壓完成!"

def readpackagesandwrite(): //向packages.xml中進行寫入,因為apk有很多的庫檔案,所以我預設arm64-v8a優先,其次是armeabi-v7a,最後是armeabi,中間新增的都是packages.xml寫入的格式,

print "readpackagesandwrite"

fp=open(file,"a+")

for name in sourcedirfiles:

if(os.path.isdir(name)):

list =

fpath = ""+"\n"

fp.write(fpath)

fp.write(fapkpath)

for f in os.listdir(sourcedir+os.sep+name):

if(os.path.isdir(sourcedir+os.sep+name+os.sep+f)):

for libfiles in os.listdir(sourcedir+os.sep+name+os.sep+f):

if "arm64-v8a" in list:

for libs in os.listdir(sourcedir+os.sep+name+os.sep+f+os.sep+libfiles):

fp.write(libspath);

else :

if "armeabi-v7a" in list:

for libs in os.listdir(sourcedir+os.sep+name+os.sep+f+os.sep+libfiles):

fp.write(libspath);

else :

if "armeabi" in list:

for libs in os.listdir(sourcedir+os.sep+name+os.sep+f+os.sep+libfiles):

fp.write(libspath);

fp.write("")

fp.write("\n")

fp.close()

print "內建apk已完成,請檢查packages.xml!"

if __name__ =='__main__':

i***ists = isfileexists()

if(i***ists == fileexist):

copyapk(targetdirectory)

createapkdirectory()

unzipapkfiles()

readpackagesandwrite()

指令碼執行完成後,去檢視一下packages.xml,是不是按照指定格式寫入,packages.xml中寫入資訊如下:

c練習題 龍旗控股

龍旗控股 1 windows nt下的32位機執行環境下 char str welcome to 51 cc int array char p str int n int func int a 請計算 strlen str sizeof str sizeof array sizeof p sizeo...

城頭變換Android旗

android裝置的更新換代比f1賽車的更新換代還要頻繁。每個月都會有新的機型面世,lgoptimus 2x samsung galaxy s htc sensation xl,motorola droid razr,samsung galaxy nexus 一大堆讓你應接不暇的名字,但這對於使用者...

C 使用Xamarin開發Android應用程式

微軟移動跨平台開發 構建面向 android ios 和 windows phone應用 vs支援安裝負載 vs2017下安裝 c 開發android應用教程 c 使用xamarin開發可移植移動應用終章 11.獲取裝置資訊與常用元件,開源乙個可開發模版.閱讀全文 c 使用xamarin開發可移植移...