Android Studio
はじめに
Androidに詳しい人が周りにいないのでネットで調べながらの作業になってしまいました。
日本のプログラマーの4人に1人が使っているTeratailやおなじみのstackoverflowとかをたくさん使いましたが、もっと調べる内容をちゃんと明確にすべきだったと反省しています。
わからないところがわからない状態になりつつあるので無料の質問サイトはありがたいです。英語ができればstackoverflow、英語が苦手で日本語が好きならばteratailくらいでしょうか。
デバッグとリリース
https://developer.android.com/studio/run/index.htmldeveloper.android.com
アプリ開発の多くの場合、Android Studioではdebugとreleaseという二つのビルドタイプを設定していると思います。
Android Studioはデフォルトでdebugモードが適用されているので、別の開発環境からAndroid Studioに変えた時にどこで変更すれば良いのか迷いました。
忘れないように書いておこうと思います。
変更する場所
このselect build variantを選択すると、次のようなwindowがAndroid Studio内に現れます。Build Variantが今はreleaseとなっているのでこれをdebugにすると、debugモードになります。
debugをreleaseに変えるとそれでreleaseモードになります。
Releaseモードの追加方法
build.gradleの設定
buildtypeでデバッグとリリース時の設定を行います。この設定によってデバッグ時とリリース時でアプリの内容を変えることができます。
デバッグしやすいような機能をつけておいたり、Releaseモードで公開してはまずい情報をproguardで難読化させるなどします。
build.gradle
android { /*androidの基本設定*/ buildTypes { debug { /*デバッグ時の設定*/ } release { /*リリース時の設定*/ } }
<プロジェクト名>-release.apkの作成
アプリを世の中に公開するためには、~.release.apkを作成する必要があります。また、GooglePlayなどで公開するためにはそこに署名も入れなければいけません。
案外、やり方を忘れかけるのでメモしておきます。
「Generate Signed APK…」を選択し、署名入りのapkを作成します。
すでにkeystoreにファイルを用意してあるという人はそのまま「Choose existing」を、ない人は「Create New」で新しく作ってください。
keystoreフォルダを作るときは自分のappのすぐに下に置いておくと便利です。release.jksで指定しました。
パスワードやAlias、Certificateは埋めておきましょう。また、後から要求されたりするのでパスワードは忘れないようにしておいてください。
これで無事に完成です。~release.apkが出力されます。
おそらく「build→outputs→apk」のフォルダに出力されるはずです。
想定されるエラー
Buildしたり、Runさせようとするとこういうエラーが出てくるときがあります。
The apk for your currently selected variant (ProjectName-release-unsigned.apk) is not signed. Please specify a signing configuration for this variant
これです。つまり、うまく署名できてないというエラーですね。
対応方法
先ほどのエラー画面の下にある「Fix」を選択します。すると画面が切り替わるので画像に従って入力していってください。
+ を押すと、自動的に「config」が追加されます。あとは先ほどのパスワードやAliasを打ち込んでいきます。
まだ、「OK」は押さないでください。
次にBuildTypesのところに移動します。
同じように + を選択してreleaseの設定を行います。
「sigining config」で「config」を表示させます。これでOKを押すと無事にエラーが消えているはずです。
対応法はこちらを参考にしました。
stackoverflow.com
まとめ
Androidバグシリーズ第一弾でした。ちなみに想像以上に自分はバグに当たっているのでこれからも大量のバグと、その解決策を考えることになりそうです。
ドキュメントを読んだり、サイトを見たりして解決策を探していますが、なかなか辛い作業でした。