原 Android打包之跨平台打包

2021-09-06 20:50:40 字數 4303 閱讀 3500

android自動打包流程詳細圖:

在前面一些部落格我們知道了如何通過命令列打包,如何通過eclipse打包,如何通過編寫shell指令碼來進行打包,但是這些都不能很好的跨平台進行打包。

因python本身具有很好的跨平台特性,故本博就是通過使用python來進行編寫跨平台打包指令碼,指令碼如下(build.py):

#

!/bin/python

#import

osimport

reimport

sysimport

time

import

shutil

import

hashlib

build_root = os.path.dirname(os.path.abspath('

__file__'))

build_source_name = '

source

'build_apk_name = '

fullscreenactivity-release.apk

'release_apk_path = build_root + '

/release_apks

'publish_apks = build_root + '

/publish_apks

'android_sdk = os.environ.get('

android_sdk')

build_tool_ant_path = android_sdk + '

/tools/ant

'build_bin_path = '

bin'

build_bin_classes_path = '

classes

'source_dir = build_root + '

/' +build_source_name

rev_cmd = "

svn info

"rev_pattern = r"

last changed rev: ([0-9]*)"#

delete file folder

defdelete_file_folder(src):

ifos.path.isfile(src):

try:

os.remove(src)

except

:

pass

elif

os.path.isdir(src):

for item in

os.listdir(src):

itemsrc =os.path.join(src,item)

delete_file_folder(itemsrc)

try:

os.rmdir(src)

except

:

pass

#calc file md5

defcalcmd5(filepath):

with open(filepath,'rb

') as f:

md5obj =hashlib.md5()

md5obj.update(f.read())

hash =md5obj.hexdigest()

return

hash

#get source code from svn repository

defget_source_code():

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

print release_apk_path + '

exists!

'else

: os.makedirs(release_apk_path)

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

os.chdir(source_dir)

os.system(

'svn update')

else

: os.makedirs(source_dir)

os.chdir(source_dir)

os.system(

'svn checkout .')

#clear classes file folder

defclear_classes_folder():

classes_abs_path = source_dir + '

/' +build_bin_classes_path

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

delete_file_folder(classes_abs_path)

else

: os.makedirs(classes_abs_path)

#get svn revision

defget_revision():

rev =os.popen(rev_cmd).read()

m =re.search(rev_pattern, rev)

if m ==none:

return

none

return m.group(1)

#get current time

defget_time():

return time.strftime('

%y-%m-%d_%h-%m-%s

', time.localtime(time.time()))

#ant build

defant_build():

os.system(

'android update project -p . --target android-19')

os.system(

'ant clean & ant release')

#copy apk file to target folder

defcopy_apk():

apk_file = source_dir + '

/' + build_bin_path + '

/' +build_apk_name

target_apk_file = release_apk_path + '

/' +build_apk_name

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

shutil.copyfile(apk_file, target_apk_file)

else

:

print apk_file + '

is not exists!'#

delete source code files

defdelete_source_file():

delete_file_folder(source_dir)

#publish apk

defpublish(date, rev):

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

print publish_apks + '

exists!

'else

: os.makedirs(publish_apks)

md5 = calcmd5(release_apk_path + '

/' +build_apk_name)

apk_file = release_apk_path + '

/' +build_apk_name

publish_file = publish_apks + '

/' + date + '

_' + rev + '

_' + '

release.apk

'shutil.move(apk_file, publish_file)

delete_file_folder(release_apk_path)

#main function

defmain():

get_source_code()

clear_classes_folder()

rev =get_revision()

date =get_time()

ant_build()

copy_apk()

publish(date, rev)

if__name__ == '

__main__':

main()

最後執行:python build.py即可。

Kivy跨平台開源框架之Android打包

打包成 android 可執行檔案的3種方式 1 可以使用 python for android 為 android 建立乙個包。2 可以使用 buildozer 工具自動完成整個過程。3 可以使用 kivy launcher 打包,這樣不用編譯就能執行 kivy 應用。對於新手,建議使用 buil...

全志平台編譯和打包系統(2)打包系統

1.前言 打包的好處 其他平台是將kernel uboot rootfs編譯好後直接分開燒寫到flash中,分開的話必然需要使用者在燒寫的時候,指定燒寫的bin檔案。把這些整合到乙個韌體檔案中的話,在燒寫這些到flash的時候會自動去韌體裡面搜尋需要的內容,這樣對使用者更透明。打包指令碼為liche...

原 C 跨平台呼叫C 的函式指標

此文主要講一下列子,通過列子就能很清楚的看到是如何用c 去呼叫c 的 的 列子 在c 的乙個標準win32 api 庫cclic.dll中有乙個函式void winapi getfunctionaddress unsigned int sn 此函式通過傳sn序號得到函式指標即乙個函式的位址.之後再通...