1. 程式人生 > >Android 使用python3將jar轉smail

Android 使用python3將jar轉smail

廢話不多說,直接上程式碼
class JarManager(object):

    def getJarList(self,file_dir):
        result = []
        for root, dirs, files in os.walk(file_dir):
            result = files  # 當前路徑下所有非目錄子檔案
        return result

    def excuteJar2Dex(self,path,jars):
        for jar in jars:
            dexPath = path+"\\build\\"+str(jar.split('.jar')[0:][0])+".dex "
            dexcmd = path+"\\tools\dx --dex --output="+dexPath + path+"\\channel\\"+jar
            os.popen(dexcmd)
            time.sleep(8)
            if os.path.exists(dexPath):
                smailCmd = "java -jar "+path+"\\tools\\"+"baksmali.jar -o "+path+"\\smail\\"+"\\ "+dexPath
                os.popen(smailCmd)
                time.sleep(5)

if __name__ == "__main__":
    jarManager = JarManager()
    path = (os.path.dirname(os.path.abspath(__file__)))
    jarNameList = jarManager.getJarList(path+"\channel\\")
    jarManager.excuteJar2Dex(path,jarNameList)

實現邏輯:

1.獲取當前目錄

  path = (os.path.dirname(os.path.abspath(__file__)))

2.獲取指定目錄下所有的jar檔案,返回型別為集合

jarNameList = jarManager.getJarList(path+"\channel\\")

def getJarList(self,file_dir):
    result = []
    for root, dirs, files in os.walk(file_dir):
        result = files  # 當前路徑下所有非目錄子檔案
    return result

3.將獲取到的jar檔案全部轉為dex檔案,這裡需要依賴dx.bat和dx.jar

3.1,迴圈集合取出所有的jar檔案

3.2,拼接需要執行的cmd命令

3.3,執行cmd命令

for jar in jars:
    dexPath = path+"\\build\\"+str(jar.split('.jar')[0:][0])+".dex "
    dexcmd = path+"\\tools\dx --dex --output="+dexPath + path+"\\channel\\"+jar
    os.popen(dexcmd)

4.將執行命令得到的dex檔案轉為smail檔案,這裡需要依賴baksmail.jar檔案

smailCmd = "java -jar "+path+"\\tools\\"+"baksmali.jar -o "+path+"\\smail\\"+"\\ "+dexPath
os.popen(smailCmd)

到這裡python指令碼就已經完成了。