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脚本就已经完成了。

Android 使用python3将jar转smail