Google Playでのアプリケーションの公開を自動化する

Google Playで公開しようとしているAndroidアプリケーションまたは既に公開されているAndroidアプリケーションがあり、開発中の場合、クローズドベータテスト中であり、顧客/テスターが定期的にアセンブリを組み立てて転送する必要がある場合は、このプロセスを自動化する



英語でドキュメントを個別に処理することもできますが、プロセスが難しいか何かうまくいかない場合は、出版物が役立つことを願っています



開始する前に、アプリケーションの最初のバージョンを手動で公開する必要があります



アクセス設定



Google Playデベロッパーコンソールを開き、 [設定][ APIアクセス ]に移動します

コンソールはGoogle APIプロジェクトにリンクする必要があります。 プロジェクトがない場合、現時点では、[新しいプロジェクトの作成]ボタンのみがインターフェイスから利用できます。





ある場合、これらのプロジェクトのリストが利用可能になります。 もちろん、リンクボタンはそれらを接続します。





しかし、新しいプロジェクトを作成する例を見てみましょう。 Google APIコンソールから作成するか、既にお持ちのGoogle Playデベロッパーコンソールから直接作成して、[ 新しいプロジェクト作成 ]ボタンをクリックします。



Google APIプロジェクトを作成するのがこれが初めての場合、ポップアップウィンドウが表示されます。ここにすべてを受け入れます





これでプロジェクトとサービスアカウントが作成されました。この場合は自動的に作成されます





次に、このアカウントがGoogle Playと連携して役割を付与できるようにする必要があります。 ここから直接行うこともできます 。[ アクセスを許可 ]をクリックします 。 ユーザーアカウントと右側のメニュー(バックグラウンドで表示)が表示され、電子メールやその他の必須フィールドが既に入力されているポップアップウィンドウが開きます。 [ ユーザーを追加]をクリックします





これで、ユーザーが正常に追加されたことがわかります。





次に、ライブラリを操作してアプリケーションの新しいバージョンを公開できるように、公開キーと秘密キーのペアを生成する必要があります。 これを行うには、Google APIコンソールでプロジェクトリストを開き、目的のプロジェクトをクリックします。デフォルトでは、 Google Play Android Developerと呼ばれます。





次に、メニュー項目資格情報資格情報の 作成をクリックして、 サービスアカウントキーを選択します





リストからCompute Engineのデフォルトのサービスアカウントを選択し、ラジオボタンをP12に転送します。 作成をクリックします





設定により、 Google Play Android Developer-%slice id%.p12という名前のいくつかの公開鍵と秘密鍵がコンピューターに保存されました







プログラミングを始めましょう



Googleは現在、Google Play Developer APIを操作するためのjavaおよびpythonライブラリを提供しています。 Javaのバリアントを検討します。これを行うには、ライブラリとサンプルを含むzipアーカイブダウンロードします。

IDEを開き、プロジェクトを作成します。ProductionManagerを呼び出して、次のライブラリを接続します。



Google PlayファイルAndroid Developer-%スライスid%.p12をプロジェクトのリソースフォルダーにコピーし、スペースがなくなるように名前を変更しました。読み込もうとすると例外が発生したようです。 多くの人がアクセスできるVCSでこのプロジェクトのソースコードを保持する場合は、おそらく継続的な統合サーバーにファイルを保存することをお勧めします。



それに応じてアプリケーションをビルドして公開する前に、最新バージョンのコード(versionCode)を見つけて更新するようにリクエストします。これは、ステップ1(これらは1、2、3 ...のみ)で算術的に進むことが好きだからです。裁量で、CIサーバーのbuildNumberまたはVCSのrevesionNumberに置き換えるだけです



更新バージョン
private Edits getApplicationEdits() throws Exception { String applicationName = "ApplicationName"; String serviceAccountId = "--@developer.gserviceaccount.com" HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport(); JsonFactory jsonFactory = JacksonFactory.getDefaultInstance(); KeyStore keyStore = SecurityUtils.getPkcs12KeyStore(); InputStream inputStream = ProductionManager.class.getResourceAsStream("/resources/key.p12"); PrivateKey privateKey = SecurityUtils.loadPrivateKeyFromKeyStore(keyStore, inputStream, "notasecret", "privatekey", "notasecret"); inputStream.close(); GoogleCredential credential = new GoogleCredential .Builder() .setTransport(httpTransport) .setJsonFactory(jsonFactory) .setServiceAccountId(serviceAccountId) .setServiceAccountScopes(Collections.singleton(AndroidPublisherScopes.ANDROIDPUBLISHER)) .setServiceAccountPrivateKey(privateKey) .build(); AndroidPublisher androidPublisher = new AndroidPublisher .Builder(httpTransport, jsonFactory, credential) .setApplicationName(applicationName) .build(); return androidPublisher.edits(); } private void updateVersionCode() throws Exception { String packageName = "com.package.name"; Edits edits = getApplicationEdits(); String editId = edits .insert(packageName, null) .execute() .getId(); ApksListResponse apksResponse = edits .apks() .list(packageName, editId) .execute(); List<Integer> versions = new ArrayList<Integer>(); List<Apk> apks = apksResponse.getApks(); if (apks == null) { throw new Exception("responsed list of apks is null"); } for (Apk apk : apks) { versions.add(apk.getVersionCode()); } if (versions.isEmpty()) { throw new Exception("previous versions are not detected"); } int lastVersionCode = Collections.max(versions); if (lastVersionCode == 0) { throw new Exception("version is 0"); } //TODO update version code //++lastVersionCode }
      
      







アプリケーション出版物
 private void publishApplication() throws Exception { String packageName = "com.package.name"; String track = "beta";//release String setupFilePath = "/path/to/setup/file/app.apk"; Edits edits = getApplicationEdits(); String editId = edits .insert(packageName, null) .execute() .getId(); FileContent mediaContent = new FileContent("application/vnd.android.package-archive", new File(setupFilePath)); Upload uploadRequest = edits .apks() .upload(packageName, editId, mediaContent); Apk apk = uploadRequest.execute(); List<Integer> versions = new ArrayList<>(); versions.add(apk.getVersionCode()); edits .tracks() .update(packageName, editId, track, new Track().setVersionCodes(versions)) .execute(); edits .commit(packageName, editId) .execute(); }
      
      







実行可能jarをコンパイルします。 ここで、インストールファイルの作成とCIサーバーでの公開を構成する必要があります。TeamCityを使用します。 4つのビルドステップがあります。

  1. versionCodeを更新します。 処理中のパラメーターを使用してjarファイルを実行し、updateVersionCode()メソッドを呼び出します。 これがTeamCityの外観です



  2. versionNameを更新
  3. APKの生成。 コマンドラインを使用することができ、特別なステップを選択できます。gradleとIntelliJ IDEAがあります。2番目のケースでは、アーティファクト名を指定する必要があります
  4. アプリケーションを公開します。 また、jarファイルを別のパラメーターで実行し、publishApplication()メソッドを呼び出します




ご清聴ありがとうございました。



All Articles