import argparse import httplib2 from googleapiclient.discovery import build from oauth2client.service_account import ServiceAccountCredentials from oauth2client.client import AccessTokenRefreshError # Может принимать значения "alpha", "beta", "production" или "rollout" TRACK = "alpha" scope = ["https://www.googleapis.com/auth/androidpublisher"] # Установим параметры командной строки argparser = argparse.ArgumentParser(add_help=False) argparser.add_argument("package_name", help="The package name. (e.g. com.android.sample)") argparser.add_argument("apk_file", help="The path to the APK file.") argparser.add_argument("key_file", default="key.json", help="The path to the json key file.") def build_androidpublisher_service(key_filename): creds = ServiceAccountCredentials.from_json_keyfile_name(key_filename, scope) http_auth = creds.authorize(http=httplib2.Http()) return build('androidpublisher', 'v3', http=http_auth) def generate_edit(service, package_name): edit_request = service.edits().insert(body={}, packageName=package_name) result = edit_request.execute() return result['id'] def main(): args = argparser.parse_args() package_name, apk_file, key_file = args.package_name, args.apk_file, args.key_file try: service = build_androidpublisher_service(key_file) edit_id = generate_edit(service, package_name) # Загружаем apk на сервера google apk_response = service.edits().apks().upload( editId=edit_id, packageName=package_name, media_body=apk_file ).execute() # Выводим код версии, как подтверждение успешной загрузки print("Version code {} has been uploaded".format(apk_response['versionCode'])) # Теперь надо установить Track, чтобы apk задеплоились в правильную ветку track_response = service.edits().tracks().update( editId=edit_id, packageName=package_name, track=TRACK, body={"versionCodes": [apk_response['versionCode']]} ).execute() # Выводим сообщение об успешной установке Track'а для VC print("Track {} is set for version code(s) {}".format( track_response['track'], str(track_response['versionCodes']) )) # В конце надо закрепить edit commit_request = service.edits().commit(editId=edit_id, packageName=package_name).execute() # И вывести сообщение об этом print("Edit \"{}\" has been committed".format(commit_request['id'])) except AccessTokenRefreshError: print("The credentials have been revoked or expired, re-run the app to re-authorize") if __name__ == '__main__': main()