ソースコードのGMSパッケージを効率的に更新

10500 ワード

前言
Androidオリジナルシステムのカスタマイズにとって、google GMSパッケージのアップグレードは避けられない日常的な仕事です.ctsソフトウェアバージョンのようにgoogleが提供するGMSパッケージアプリケーションではありません.一般的なお客様のソフトウェアバージョンでは、google playstoreストアにログインし、最新のGMSソフトウェアをダウンロードする必要があります.ダウンロードしたソフトウェアを携帯電話からパソコンにエクスポートし、これらのダウンロードしたソフトウェアをソースコードのgoogleアプリケーションバージョンと比較し、apkパッケージ名を比較し、最後にソフトウェアを最新バージョンに置き換えます.
困難にぶつかる
  • ダウンロードしたソフトウェアをコンピュータにエクスポートするにはengバージョン
  • が必要です.
  • ダウンロードしたapk名はすべてbase.apkは、/vendor/google/appsの下にあるソフトウェアファイルを見つける必要があります.
  • 解決策
    第1に、userバージョンではadbがダウンロードしたファイルをコンピュータにエクスポートする権限がないため、userバージョンのbootを置き換えることが考えられる.img. 第2の困難に基づいて、私はスクリプトを作成して、必要なアップグレードファイルapkを自動的に、古いバージョンのapkに置き換えることができます.
    スクリプトはpyで作成され、親テストで使用できます.具体的なコードは次のとおりです.
    # !/usr/bin/python
    #coding=utf-8
    
    #      google apk  
    #     :
    # linux  :      
    # python replace.py
    #
    import os
    import shutil
    import sys
    #      google app   data/app
    replace_dir = [
        'com.google.android.apps.plus-1',
        'com.google.android.apps.tachyon-1',
        'com.google.android.googlequicksearchbox-1',
        'com.google.android.youtube-1',
        'com.google.android.talk-1',
        'com.google.android.calendar-1',
        'com.google.android.apps.messaging-1',
        'com.google.android.apps.docs.editors.docs-1',
        'com.google.android.apps.photos-1',
        'com.google.android.apps.books-1',
        'com.google.android.gm-1',
        'com.google.android.apps.docs-1',
        'com.google.android.inputmethod.latin-1',
        'com.google.android.music-1',
        'com.google.android.tts-1',
        'com.android.chrome-1',
        'com.android.vending-1',
        'com.google.android.apps.maps-1',
        'com.google.android.videos-1',
        'com.google.android.gms-1',
        ]
    #google/apps     apk dir
    target_dir = [
        'PlusOne',
        'Duo',
        'Velvet',
        'YouTube',
        'Hangouts',
        'CalendarGoogle',
        'Messenger',
        'EditorsDocs',
        'Photos',
        'Books',
        'Gmail2',
        'Drive',
        'LatinImeGoogle',
        'Music2',
        'GoogleTTS',
        'Chrome',
        'Phonesky',
        'Maps',
        'Videos',
        'GmsCore'
        ]
    #
    #google/apps     apk dir/   apk   
    target_apk_name = [
        'PlusOne_arm_xhdpi.apk',
        'Duo_arm_xhdpi.apk',
        'Velvet_arm_xhdpi.apk',
        'YouTube_arm_xhdpi.apk',
        'Hangouts_arm_xhdpi.apk',
        'CalendarGoogle.apk',
        'Messenger_arm_xhdpi.apk',
        'EditorsDocs_arm_xhdpi.apk',
        'Photos_arm_xhdpi.apk',
        'Books.apk',
        'Gmail2_xhdpi.apk',
        'Drive_arm_xhdpi.apk',
        'LatinImeGoogle_arm.apk',
        'Music2.apk',
        'GoogleTTS_arm.apk',
        'Chrome_arm.apk',
        'Phonesky.apk',
        'Maps_arm_xhdpi.apk',
        'Videos_arm.apk',
        'GmsCore_arm_xhdpi.apk'
        ]
    #      
    replace_apk_path=[]
    target_apk_path=[]
    
    #      (  )
    #Android    google app  
    apk_target_dir="vendor/google/apps"
    #     google           
    apk_replace_dir = "/home/work/download/app/"
    
    
    def search_file(path):#, filename, newpath)
        queue = []
        queue.append(path);
        while len(queue) > 0:
            tmp = queue.pop(0)
            if (os.path.isdir(tmp)):#         
                for item in os.listdir(tmp):#            
                    queue.append(os.path.join(tmp, item))#         queue
            elif (os.path.isfile(tmp)):#        
                name = os.path.basename(tmp)  #      
                dirname = os.path.dirname(tmp)  #       
                full_path = os.path.join(dirname, name)  #              ,      
                if os.path.splitext(name)[1]== '.apk':
                    for x in range(0,len(replace_dir)):
                        if dirname == apk_replace_dir+replace_dir[x]:
                            print("       :"+dirname)
                            print(name)
                            google_path = os.path.join(apk_target_dir,target_dir[x])
                            if os.path.isdir(google_path):
                                print("Google   :"+google_path)
                                print(apk_target_dir+"/"+target_dir[x]+"/"+target_apk_name[x])
                                replace_apk_path.append(full_path)
                                target_apk_path.append(apk_target_dir+"/"+target_dir[x]+"/"+target_apk_name[x])
                            else:
                                print("not find "+google_path)
                            break
                    else:
                        print(dirname+" not replace ..")
                # des_path = newpath+'/'+path+'_'+name  #    ,                 
                # if filename in name:#         ,   if(name.find(filename)!=-1):
                #     shutil.move(full_path, des_path)#         (  +   )
    
    
    
    print("************************************************************")
    print("        ")
    print("       :"+apk_replace_dir)
    search_file(apk_replace_dir)
    print("    
    "
    ) print("list
    "
    ) for x in xrange(1,len(replace_apk_path)): print(replace_apk_path[x]) print(target_apk_path[x]) print("
    "
    ) for x in range(0,len(replace_apk_path)): log = '[ apk '+bytes(x)+']'+'replacing '+replace_apk_path[x]+' to '+target_apk_path[x] print(log) print("
    "
    ) os.unlink(target_apk_path[x]) shutil.copy(replace_apk_path[x],target_apk_path[x]) print("success!")
    注意:
  • コードのソースパスとダウンロードしたgmsパケットパスは書き込み済みで、このファイルパスを自分で置き換えることができます.
  • に置き換えられたapkパッケージ名は、完全ではない可能性がありますが、自分で追加する必要があります.多くなっても大丈夫です.少なくなったら問題です.