RockChip 平台LCD初始化代码转化工具 — python版


工作中为了调试客户给的lcd,通常需要写入初始化参数,但客户提供的初始化代码,通常是各种测试夹具的单片机代码,和rockchip平台的lcd初始化代码的格式差异非常大,若是手动修改,几百行的代码,修改的起来非常的枯燥,而且比较容易出错,于是,我抽空写了一个简单的工具,做自动转化,这里做个记录:
继续阅读“RockChip 平台LCD初始化代码转化工具 — python版”

自制工具:修改hosts文件,访问google等网站


由于工作原因,需要经常访问google等网站查询问题,因此常见的方法就是使用vpn或者通过修改hosts文件来实现对google 的访问。

但一般情况下免费的vpn很难找到,收费的vpn仅仅是访问google也不划算,因此常用的就是修改hosts的方式,修改hosts的方法也很简单,主要就是找到有效的hosts文件,然后替换掉系统的hosts文件即可,常用系统的host文件的路径如下:

  • windows系统的host文件路径:C:\WINDOWS\system32\drivers\etc
  • Android(安卓)系统hosts路径: /etc/hosts
  • Mac(苹果电脑)系统hosts路径: /etc/hosts
  • iPhone(iOS)系统hosts路径: /etc/hosts
  • Linux系统hosts路径: /etc/hosts
  • 绝大多数Unix系统路径: /etc/hosts

针对windows系统我这边编写了一个工具,用来更新和替换hosts文件,下载地址:
https://whonee.net/wp-content/uploads/2017/06/google-2-1-1.zip


下面针对工具的逻辑和编写思路记录一下,以作后续参考:

  • 首先需要找到一个有效的hosts文件,搜索发现github上热心的好人上传了hosts文件,路径如下:https://raw.githubusercontent.com/racaljk/hosts/master/hosts。

github单独下载一个文件方法:
1. 打开网页,找到要下载的文件,点击进入单独显示此文件的页面,如下图:

在raw图标上点击右键,复制链接地址,就可以得到单独文件的下载地址。

2. 需要windows cmd下的下载工具,推荐使用wget,下载wget需要使用带有ssl功能的版本。

3. 编写脚本,脚本如下所示:

@echo off
echo # 
echo # 保存旧hosts
echo # 

if exist "%~dp0hosts\hosts" (
    move "%~dp0hosts\hosts" "%~dp0hosts\hosts_%date:~0,4%_%date:~5,2%_%date:~8,2%_%time:~0,2%_%time:~3,2%_%time:~6,2%";
    echo # 
    echo # hosts 保存成功,即将更新hosts。
    echo # 
)else (
    echo # 
    echo # hosts文件不存在,将下载更新hosts文件。
    echo # 
)
echo #  
echo #  开始下载更新hosts文件
echo #  
wget.exe -q -P hosts --no-check-certificate https://raw.githubusercontent.com/racaljk/hosts/master/hosts

if exist "%~dp0hosts\hosts" (
    echo # 
    echo # 更新hosts文件完毕!
    echo # 
    goto start_update
)else (
    echo # 
    echo # 更新文件失败,请检查地址是否有效。
    echo #  
    goto end
)
cls
:start_update
echo # 
echo # 暂停后,需要更新hosts,请继续,若不想更新,请直接关闭窗口。
echo # 
pause

echo #
echo # 开始更新hosts文件到系统
echo #
copy /y "%~dp0hosts\hosts" "%SystemRoot%\System32\drivers\etc\hosts"
ipconfig /flushdns
echo # 
echo # 您的hosts已更新,已可以用登录以下地址访问google等网站:
echo #
echo # https://www.google.com/ # 必须是https加密连接。
echo #
goto end

:end
pause>nul

4. 若需要还原hosts文件,只需要输入如下指令即可:

@echo 127.0.0.1 localhost > %SystemRoot%\System32\drivers\etc\hosts

自制工具:利用python批量获取apk中的库文件。


客制化软件时,经常遇到需要将客户提供的apk预置到系统内,但是预置apk需要将apk中的库文件预先提取出来放到system/lib目录中,因此提取apk的库文件成为了一种需求。
常见的方法是手动用rar打开apk,导出库,然后保存,但是遇到大量apk需要预置的时候,会有不小的工作量,因此按照手动导出的逻辑,简单编写一个工具,代码如下:

'''
TOOLS: tools for get apks lib.
AUTOR: whonee
DATA : 20160109
'''
import os
import sys
import shutil

'''
    MODIFY IT FOR YOU PATH
'''
RAR_CMD = 'D://progra~1/WinRAR/winrar.exe'
PATH = 'D://py_tools/get_apk_lib/apk'
LIBPATH = 'D://py_tools/get_apk_lib/lib'

'''
    MAIN FUNCTION
'''
def rename(dirname = PATH):    
    listFile = os.listdir(dirname)    
    print(listFile)
    for file in listFile:
        filename = os.path.splitext(file)
        if(filename[1] == '.apk'):
            name = filename[0] + '.zip'
            print(name)
            os.rename(os.path.join(dirname, file),os.path.join(dirname,name))
    
    
def unzip(dirname = PATH,cmd = RAR_CMD):
    listFile = os.listdir(dirname)
    CMD = cmd + ' x {} {}'
    os.chdir(dirname)
    for file in listFile:
        filename = os.path.splitext(file)
        if(filename[1] == '.zip'):
            rarCmd = CMD.format(file,(filename[0]+os.sep))
            print(rarCmd)
            os.system(rarCmd)

def restname(dirname = PATH):    
    listFile = os.listdir(dirname)
    for file in listFile:
        filename = os.path.splitext(file)
        if(filename[1] == '.zip'):
            name = filename[0] + '.apk'
            print(name)
            os.rename(os.path.join(dirname, file),os.path.join(dirname,name))      
    
def findlib(dirname = PATH):
    listFile = os.listdir(dirname)   
    libdir = dirname + os.sep + 'alllib'
    if not os.path.exists(libdir):
        os.mkdir(libdir)
    for file in listFile:  
        # Bill Z 指出错误修改,可能处理到了alllib文件夹。
        if ( file == "alllib" ):                                                           
           continue              
        fulldirfile=os.path.join(os.path.abspath(dirname),file)
        if os.path.isdir(fulldirfile):
            #print(file + ' is path')
            os.chdir(fulldirfile)
            if os.path.exists('lib'):
                print(file + ' have lib')
                directdir = '../alllib/{}_lib'.format(file)
                shutil.move('lib',directdir)
            os.chdir('..')
            try:
                shutil.rmtree(fulldirfile)
            except:
                pass
            
def sort(dirname = PATH):
    libdir = dirname + os.sep + 'alllib'
    os.chdir(libdir)
    libfolderlist = os.listdir(libdir)
    for folder in libfolderlist:
        fulldirfile = os.path.join(libdir,folder)
        print("APK NAME: ",fulldirfile)
        os.chdir(fulldirfile)
        listlib = os.listdir(fulldirfile)
        for libfolder in listlib:
            print('HAVE LIB FOLDER: ',libfolder)
            if not (libfolder == 'x86' and libfolder == 'x64'):
                rootlib = os.path.join(fulldirfile,libfolder)
                os.chdir(rootlib)
                alllib = os.listdir(rootlib) 
                for lib in alllib:
                    srclibname = os.path.join(rootlib,lib)
                    #print(srclibname)
                    tarlibname = os.path.join(LIBPATH,lib)
                    print('USERFUL LIB: ',srclibname)
                    #print(tarlibname)
                    shutil.copy(srclibname,tarlibname)
    print("all lib will be copy to lib folder ,\
    if you want to find the base lib ,please into 'apk/alllib'")
              
def main():
    if not os.path.exists(RAR_CMD):
        print("winrar.exe is not exists, please input rar path likes: 'c://Progra~1/WinRAR/winrar' \n")        
        cmd = input('rar path: ')
        if not os.path.exists(cmd):
            print('input error rar path exit !')
            exit()
    path = PATH
    rename(path)
    unzip(path)
    findlib(path)
    restname(path)
    sort(path)    
    anykey = input("Sucessful ! please input Enter key to exit!")
    if anykey:    
        print('quit')
        exit()
        
    
if __name__ == '__main__':
    main()

在对应的文件夹放上apk,执行此工具之后就可以到指定的文件夹去寻找已经导出OK的库了。