Cordovaコマンドラインインターフェイスを使用して署名済みAPKファイルを作成する方法


169

という名前のサンプルアプリケーションを作成しましたcheckStatus。次に、署名済みAPKファイルを作成します。したがって、テスト用に別のデバイスにインストールできます。

このため、私はグーグル検索し、このドキュメントを見つけました。

ドキュメントに従って、プロジェクトディレクトリに切り替えて、次のコマンドを実行しました。

keytool -genkey -v -keystore key-name.keystore -alias alias-name -keyalg RSA -keysize 2048 -validity 10000

上記のコマンドを実行した後、という名前のファイルを取得しましkey-name.keystoreprojectRoot/key-name.keystore

次に、そのファイルをにコピーアンドペーストしましたprojectRoot/platforms/android/key-name.keystore

その後、という名前のファイルを作成し、にant.properties保存しましたprojectRoot/platforms/android

ファイル内に次のコードを記述しました。

key.store=projectRoot/key-name.keystore
key.alias=myApp

その後、次のコマンドを実行して解放しました

Cordova builds android --release

次のエラーがスローされます。

 /home/projectRoot/platforms/android/cordova/node_modules/q/q.js:126
                throw e;
                      ^
Error code 1 for command: ant with args: release,-f,/home/projectRoot/platforms/android/build.xml,-Dout.dir=ant-build,-Dgen.absolute.dir=ant-gen

 Error: /home/projectRoot/platforms/android/cordova/build: Command failed with exit code 8
at ChildProcess.whenDone (/usr/lib/node_modules/cordova/node_modules/cordova-lib/src/cordova/superspawn.js:135:23)
at ChildProcess.EventEmitter.emit (events.js:98:17)
at maybeClose (child_process.js:753:16)
at Process.ChildProcess._handle.onexit (child_process.js:820:5)

そこで今回は以下のようにファイルのkey.store値を変更しant.propertiesました。

 key.store=/home/projectRoot/platforms/android/key-name.keystore

もう一度、cordova build android --releaseコマンドを実行しました。同じエラーがスローされます。

誰かが私が間違ったことを教えてもらえますか?


3
コルドバ5以降、プロセスは少し異なります。 ilee.co.uk/Sign-Releases-with-Cordova-Android/...
Sombriks

回答:


305

ステップ1:

D:\projects\Phonegap\Example> cordova plugin rm org.apache.cordova.console --save

ファイル--saveからプラグインを削除するようにを追加しconfig.xmlます。

ステップ2:

Androidのリリースビルドを生成するには、最初にAndroidManifest.xml、platforms / android にあるファイルに小さな変更を加える必要があります。ファイルを編集して、行を変更します。

<application android:debuggable="true" android:hardwareAccelerated="true" android:icon="@drawable/icon" android:label="@string/app_name">

そして変化 android:debuggablefalseます:

<application android:debuggable="false" android:hardwareAccelerated="true" android:icon="@drawable/icon" android:label="@string/app_name">

Cordova 6.2.0以降では、android:debuggableタグを完全に削除します。これはコルドバからの説明です:

タイプ「HardcodedDebugMode」の問題の説明:android:debuggable属性をマニフェストから除外するのが最善です。その場合、エミュレータまたはデバイスでデバッグするAPKをビルドするときに、ツールは自動的にandroid:debuggable = trueを挿入します。APKのエクスポートなどのリリースビルドを実行すると、自動的にfalseに設定されます。

一方、マニフェストファイルで特定の値を指定すると、ツールは常にその値を使用します。これにより、デバッグ情報を含むアプリが誤って公開される可能性があります。

ステップ3:

これで、cordovaにリリースビルドを生成するように指示できます。

D:\projects\Phonegap\Example> cordova build --release android

次に、署名されていないAPKファイルを platforms/android/ant-build。この例では、ファイルはplatforms/android/ant-build/Example-release-unsigned.apk

ステップ4:

注:キーストアがあります keystoreNAME-mobileapps.keystoreこのGitリポジトリにがあります。別のリポジトリを作成する場合は、次の手順に進んでください。

キー生成:

構文:

keytool -genkey -v -keystore <keystoreName>.keystore -alias <Keystore AliasName> -keyalg <Key algorithm> -keysize <Key size> -validity <Key Validity in Days>

卵:

keytool -genkey -v -keystore NAME-mobileapps.keystore -alias NAMEmobileapps -keyalg RSA -keysize 2048 -validity 10000


keystore password? : xxxxxxx
What is your first and last name? :  xxxxxx
What is the name of your organizational unit? :  xxxxxxxx
What is the name of your organization? :  xxxxxxxxx
What is the name of your City or Locality? :  xxxxxxx
What is the name of your State or Province? :  xxxxx
What is the two-letter country code for this unit? :  xxx

次に、NAME-mobileapps.keystoreという名前でキーストアが生成されました

ステップ5:

生成されたキーストアを

旧バージョンコルドバ

D:\projects\Phonegap\Example\platforms\android\ant-build

新しいバージョンコルドバ

D:\projects\Phonegap\Example\platforms\android\build\outputs\apk

未署名のAPKに署名するには、JDKにも含まれているjarsignerツールを実行します。

構文:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore <keystorename> <Unsigned APK file> <Keystore Alias name>

卵:

D:\projects\Phonegap\Example\platforms\android\ant-build> jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore NAME-mobileapps.keystore Example-release-unsigned.apk xxxxxmobileapps

または

D:\projects\Phonegap\Example\platforms\android\build\outputs\apk> jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore NAME-mobileapps.keystore Example-release-unsigned.apk xxxxxmobileapps

Enter KeyPhrase as 'xxxxxxxx'

これにより、APKが適切に署名されます。

ステップ6:

最後に、zip alignツールを実行してAPKを最適化する必要があります。

D:\projects\Phonegap\Example\platforms\android\ant-build> zipalign -v 4 Example-release-unsigned.apk Example.apk 

または

D:\projects\Phonegap\Example\platforms\android\ant-build> C:\Phonegap\adt-bundle-windows-x86_64-20140624\sdk\build-tools\android-4.4W\zipalign -v 4 Example-release-unsigned.apk Example.apk

または

D:\projects\Phonegap\Example\platforms\android\build\outputs\apk> C:\Phonegap\adt-bundle-windows-x86_64-20140624\sdk\build-tools\android-4.4W\zipalign -v 4 Example-release-unsigned.apk Example.apk

これで、example.apkという最終リリースバイナリができました。これをGoogle Playストアでリリースできます。


9
さて、あなたの考えを受け入れます。しかし、私はプライベートgitリポジトリを持っており、モバイルアプリの作業のためのチームがあります。だから私にとっては快適です。
cfprabhu

5
なぜorg.apache.cordova.consoleを削除することが重要だったのですか?
foreyez

5
@cfprabhu手順5で「-tsaまたは-tsacertが指定されておらず、このjarにはタイムスタンプが付けられていません。」という警告が表示されます。コマンドに「-tsa timestamp.digicert.com」を追加して修正しました。他のユーザーにも役立つかもしれません
Thomas Bormans

6
OSXでのzipalignは〜/ Library / Android / sdk / build-tools / 22.0.1 / zipalign
chillwalker

2
@ThomasBormansが何らかの理由で-tsa timestamp.digicert.comNullPointerExceptionをスローしました。-tsa http://timestamp.digicert.comそれを修正するようです
トーマス

123

Cordova 4(以降)の@malcubierreの更新-

と呼ばれるファイルを作成し、release-signing.properties入れ ますAPPFOLDER\platforms\androidフォルダにます

ファイルの内容:2行目を除くすべての=の後に編集

storeFile=C:/yourlocation/app.keystore
storeType=jks
keyAlias=aliasname
keyPassword=aliaspass
storePassword=password

次に、このコマンドでリリースバージョンをビルドします。

cordova build android --release

2
ありがとう!プロパティファイルの名前/場所を変更することもできますが、build-extras.gradleファイルで指定する必要があります。ここに関連するコルドバ文書があります
2016

アプリが次のバージョン、antビルド(cordova 3)で作成された最初のバージョンに更新されません。Cordovaを6.0.0にアップグレードし、2番目のバージョンがGradleビルドで作成されました。最新のCordovaドキュメントに従って署名済みのAPKを作成しましたが、それでもアプリが更新されません。私はウェブのすべての情報を調べましたが、それでもどこかに問題があります。@Duncを助けてください
NGB

@Naveen Cordova 5.2.0を使用していますが、他のバージョン> 5でさまざまな問題が発生しました。可能あれば試してみてください。それでも問題が解決しない場合は、新しい質問をすることをお勧めします。
2016

それでも問題が解決されず、新しいバージョンのapkが既存のアプリからダウンロードされません。@Dunc
NGB

@Duncすべてのソリューション
NGB

52

現在のドキュメントでは、キーストアでbuild.jsonを指定できます。

{
     "android": {
         "debug": {
             "keystore": "..\android.keystore",
             "storePassword": "android",
             "alias": "mykey1",
             "password" : "password",
             "keystoreType": ""
         },
         "release": {
             "keystore": "..\android.keystore",
             "storePassword": "",
             "alias": "mykey2",
             "password" : "password",
             "keystoreType": ""
         }
     }
 }

次に、この方法で--buildConfig引数を指定してコマンドを実行します。

cordova run android --buildConfig

2
素晴らしい<3あなたの答えは、私がバージョン管理できるファイルについてです!
gustavohenke 2016年

3
このjsonはどのディレクトリに存在する必要がありますか?
ベルフェゴール

6
コルドバビルドandroid --release
shadi

2
build.jsonをキーストアファイルと共にルートプロジェクトフォルダーに配置します。これは私が見つけた署名のための最も効果的な手間のかからない方法です。
Joel Caton

1
何らかの理由で、ファイルパスを "../android.keystore"に変更する必要がありました。(スラッシュ)
Dilhan Jayathilake 2016年

20

ステップ1:

cordova\platforms\androidantに移動しant.propertiesて、keystoreファイル情報を含むfile という名前のファイルを作成します(このキーストアは、お気に入りのAndroid SDK、スタジオなどから生成できます)。

key.store=C:\\yourpath\\Yourkeystore.keystore
key.alias=youralias

ステップ2:

Cordovaパスに移動して実行します。

cordova build android --release

注:キーストアとキーのパスワードを尋ねるプロンプトが表示されます

YourApp-release.apkが表示されます \cordova\platforms\android\ant-build


1
これが実際の解決策です:ilee.co.uk/Sign-Releases-with-Cordova-Android
redrom

5
:コルドバ5で始まる、このプロセスは少し変化ilee.co.uk/Sign-Releases-with-Cordova-Android/...
Sombriks

Cordova 5の名前ファイルでは、「ant.properties」の代わりに「release-signing.properties」。他のすべての手順は、@ malcubierreで説明されているとおりです
Mario Orlandi

apkの新しいバージョンがCordova 6.0.0の既存のアプリからダウンロードされていません。私はまだすべてのドキュメントをフォローしましたが、まだ問題は解決していません@MarioOrlandi
NGB

11

Cordova 6.2.0では、リリースビルドを簡単に作成できます。ここで他のステップを参照してくださいステップ1、2、4

cd cordova/ #change to root cordova folder
platforms/android/cordova/clean #clean if you want
cordova build android --release -- --keystore="/path/to/keystore" --storePassword=password --alias=alias_name #password will be prompted if you have any

The system cannot find the file specifiedCordova 6.2.0 を使用するとエラーが発生します
mr5 '20

キーストアパスを置き換えましたか?もしそうなら、ここにコマンドを投稿してください。
KrIsHnA 2017年

うん。それはcordova build android --release -- --keystore="C:\release.keystore" --storePassword=****** --alias=mr5
mr5

1
パスワードを"(二重引用符)で囲んだ後、実行を開始しました。Cordovaには特殊文字の解析に関する問題があると思います。
mr5

誰かがIonicを使用している場合、このドキュメントionicframework.com/docs/cli/cordova/buildを
Nguyen Tran

7

Mac(osx)では、2つの.shファイルを生成しました。1つは最初のパブリケーション用で、もう1つは更新用です。

#!/bin/sh
echo "Ionic to Signed APK ---- b@agencys.eu // Benjamin Rathelot\n"
printf "Project dir : "
read DIR
printf "Project key alias : "
read ALIAS
cd $DIR/
cordova build --release android
cd platforms/android/build/outputs/apk/
keytool -genkey -v -keystore my-release-key.keystore -alias $ALIAS -keyalg RSA -keysize 2048 -validity 10000
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore android-release-unsigned.apk $ALIAS
zipalign -v 4 android-release-unsigned.apk signedApk.apk

アプリを更新するには:

#!/bin/sh
echo "Ionic to Signed APK ---- b@agencys.eu // Benjamin Rathelot\n"
printf "Project dir : "
read DIR
printf "Project key alias : "
read ALIAS
cd $DIR/
cordova build --release android
cd platforms/android/build/outputs/apk/
rm signedApk.apk
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore android-release-unsigned.apk $ALIAS
zipalign -v 4 android-release-unsigned.apk signedApk.apk

ホームフォルダーまたはアプリフォルダーの上位のフォルダーにいるとします。このスクリプトを使用するには、chmodを正しく設定してください。次に:

./ionicToApk.sh # or whatever depending of the name of your file, in CLI

署名されたapkは、App folder / platforms / android / build / outputs / apk /にSignedApk.apkとして配置されます。最初のスクリプトで定義された正しいキーエイリアスとパスワードを使用してください。


2

cmdでCordovaリリースAPKファイルをビルドします。

キーストアファイルパス:キーストアファイルパス(F:/cordova/myApp/xxxxx.jks)

キーストアのパスワード:xxxxx

キーストアエイリアス:xxxxx

キーストアエイリアスパスワード:xxxxx

zipalign.exe OF PATH:zipalign.exeファイルパス(C:\ Users \ユーザーXXXX \のAppData \ローカル\アンドロイド\ SDK \ビルドツール\ 25.0.2 \ zipalign)

ANDROID UNSIGNED APK NAME:android-release-unsigned.apk

Android リリースAPK名:android-release.apk

cmdで以下の手順を実行(管理者として実行)

  1. Cordovaビルド-Androidのリリース
  2. android-release-unsigned.apkファイルの場所(PROJECT \ platforms \ android \ build \ outputs \ apk)に移動します
  3. jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore < キーストアファイルパス > < ANDROID UNSIGNED APK NAME > < キーストアエイリアス >
  4. < zipalign.exeのパス > -v 4 < Androidの未署名APK名 > < ANDROIDリリースAPK名 >

1
##Generated signed apk from commandline
#variables
APP_NAME=THE_APP_NAME
APK_LOCATION=./
APP_HOME=/path/to/THE_APP
APP_KEY=/path/to/Android_key
APP_KEY_ALIAS=the_alias
APP_KEY_PASSWORD=123456789
zipalign=$ANDROID_HOME/build-tools/28.0.3/zipalign

#the logic
cd $APP_HOME
cordova build --release android
cd platforms/android/app/build/outputs/apk/release
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore $APP_KEY ./app-release-unsigned.apk $APP_KEY_ALIAS <<< $APP_KEY_PASSWORD
rm -rf "$APK_LOCATION/$APP_NAME.apk"
$zipalign -v 4 ./app-release-unsigned.apk "$APK_LOCATION/$APP_NAME.apk"
open $APK_LOCATION
#the end

0

アプリを更新する場合は、まずバージョンコードとバージョン名を確認してください。また、以前のキーストアがあることを確認してください。

アプリを更新する場合は、ステップ1、3、4に従ってください。

ステップ1:

コルドバプロジェクトに移動して、リリースビルドを生成します。

D:\projects\Phonegap\Example> cordova build --release android

次に、プラットフォーム/ android / ant-buildで署名のないAPKファイルを見つけます。この例では、ファイルは

ant-buildを使用した場合

yourproject/platforms/android/ant-build/Example-release-unsigned.apk

または

あなたがgradle-buildを使用した場合

yourProject/platforms/android/build/outputs/apk/Example-release-unsigned.apk

ステップ2:

キー生成:

構文:

keytool -genkey -v -keystore <keystoreName>.keystore -alias <Keystore AliasName> -keyalg <Key algorithm> -keysize <Key size> -validity <Key Validity in Days>

keytoolコマンドが認識しない場合は、この手順を実行してください

keytool実行可能ファイルが存在するディレクトリがパス上にあることを確認してください。(たとえば、私のWindows 7マシンでは、C:\ Program Files(x86)\ Java \ jre6 \ binにあります。)

例:

keytool -genkey -v -keystore NAME-mobileapps.keystore -alias NAMEmobileapps -keyalg RSA -keysize 2048 -validity 10000


keystore password? : xxxxxxx
What is your first and last name? :  xxxxxx
What is the name of your organizational unit? :  xxxxxxxx
What is the name of your organization? :  xxxxxxxxx
What is the name of your City or Locality? :  xxxxxxx
What is the name of your State or Province? :  xxxxx
What is the two-letter country code for this unit? :  xxx

次に、NAME-mobileapps.keystoreという名前でキーストアが生成されました

ステップ3:

生成されたキーストアをD:\ projects \ Phonegap \ Example \ platforms \ android \ ant-buildに配置します

未署名のAPKに署名するには、JDKにも含まれているjarsignerツールを実行します。

構文:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore <keystorename <Unsigned APK file> <Keystore Alias name>

調整できない場合は、次の手順を実行します

(1) [このPC]を右クリック> [プロパティ]を右クリック> [システムの詳細設定]> [環境変数]> [PATH]、[編集]の順に選択します。

(2) jdk binフォルダーのパスを環境変数に追加すると、次のようになります。

「C:\ Program Files \ Java \ jdk1.8.0_40 \ bin」。

例:

D:\projects\Phonegap\Example\platforms\android\ant-build> jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore NAME-mobileapps.keystore Example-release-unsigned.apk xxxxxmobileapps

Enter KeyPhrase as 'xxxxxxxx'

これにより、APKが適切に署名されます。

ステップ4:

最後に、zip alignツールを実行してAPKを最適化する必要があります。

zipalignが認識しない場合

(1) android sdkパスに移動し、zipalignを見つけます。通常はandroid-sdk \ build-tools \ 23.0.3にあります。

(2) 通常はパスの下にあるgenerate release apkフォルダーにzipalignファイルの貼り付けをコピーします

yourproject / platforms / android / ant-build / Example-release-unsigned.apk

D:\projects\Phonegap\Example\platforms\android\ant-build> zipalign -v 4 Example-release-unsigned.apk Example.apk 

または

D:\projects\Phonegap\Example\platforms\android\ant-build> C:\Phonegap\adt-bundle-windows-x86_64-20140624\sdk\build-tools\android-4.4W\zipalign -v 4 Example-release-unsigned.apk Example.apk

これで、example.apkという最終リリースバイナリができました。これをGoogle Playストアでリリースできます。


0

Windowsの場合、build.cmdファイルを作成しました。

(キーストアのパスとエイリアスを置き換えます)

コルドバの場合:

@echo off 
set /P spassw="Store Password: " && set /P kpassw="Key Password: " && cordova build android --release -- --keystore=../../local/my.keystore --storePassword=%spassw% --alias=tmpalias --password=%kpassw%

Ionicの場合:

@echo off 
set /P spassw="Store Password: " && set /P kpassw="Key Password: " && ionic build --prod && cordova build android --release -- --keystore=../../local/my.keystore --storePassword=%spassw% --alias=tmpalias --password=%kpassw%

ptojectのディレクトリに保存します。ダブルクリックするか、cmdで開きます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.