■目次
AndroidStudio環境の作成AndroidStudioをバージョンアップしたときのメモAndroidStudioをベータ版から正式版にしたときのメモプロジェクトの作成Kotlinアプリ作成製品用、開発用などの切り分け野良アプリとして書き出すトラブルGPUImage
■AndroidStudio環境の作成
■公式ページ Download Android Studio and SDK tools | Android Developers https://developer.android.com/studio/ WindowsもMacも、インストールで詰まることは無かった インストール完了後も、何かと追加で色々とダウンロード&インストールさせられる エミュレータも、初回起動時はイメージのダウンロードが必要 Ver 3.1.4 時点では、主に以下の書籍を参考にした 基本からしっかり身につくAndroidアプリ開発入門 https://www.amazon.co.jp/dp/479739580X ■インストール参考ページ(Ver 3.1.2 時点) Android Studioインストール https://akira-watson.com/android/adt-windows.html JDKインストール http://techfun.cc/java/windows-jdk-install.html http://techfun.cc/java/windows-jdk-pathset.html ■インストールメモ(Ver 2.3.3 時点) http://www.oracle.com/technetwork/java/javase/downloads/index.htmlhttp://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html から jdk-8u91-windows-x64.exe をダウンロード&インストール https://developer.android.com/studio/ から android-studio-bundle-143.2821654-windows.exe をダウンロード&インストール Android Studio の起動時にエラーが表示されたことがあったが、JavaとJDKの再インストールで直った。 SDK Manager で、Android 4.3 〜 7.1.1 までインストール。 ■日本語化(Ver 3.1.4 時点) 以下の方法で日本語化できた studio64.exe.vmoptions は初めから config 内にあった 日本語化は Android Studio 終了中に実行しないと反映されないことがあるかも Android Studio3.1を日本語化する | HIROMARTBLOG http://hiromart.com/blog/androidstudiojapanese/ Macの場合、以下の手順で日本語化できた Mac で Android Studio 日本語化 - Android Studio | 溢れ出るダシ https://blog.kobunata.xyz/archives/2983 ■日本語化(Ver 2.3.3 時点) 以下の方法で日本語化できた。一部は英語のままだけど特に問題はなし Android Studio 2.0 を日本語化してみた | 寿司すき焼き相撲 http://s3wordpress.wpblog.jp/2016/05/18/android-studio-2-0-%E3%82%92%E6%97%A5%E6%9C%AC%E8%AA%9E%E5%8... ■SourceTreeとの連携 AndroidStduio内でgit操作は可能らしいが、SourceTreeで管理する方法 http://ameblo.jp/hunnyjams/entry-11961454576.html gitのパスは以下のようになる。環境によって変わる可能性はある C:\Program Files\Git\cmd\git.exe AndroidStudioが build/ や app/build/ などに自動でファイルを吐き出すので、 可能なら最初の段階で .gitignore の対象にしておく。一度リポジトリに入れてしまうと、後から外すのは面倒 ■ショートカットの変更 Ctrl+Yは、Redoではなく行削除が割り当てられている 一般的なショートカットと異なるので余計なトラブルのもとだが、設定で変更はできる http://qiita.com/decchi/items/f8603ccccec03a71a4d9 ■エディタの設定 ファイル → 設定 → Editor → 外観 行番号を表示する 空白を表示する ■デバッグ 画面下部の「ログキャット」をクリックすると、デバッグログを確認できる 端末、アプリ、デバッグレベルなどを絞り込んで確認する ■メモリの割り当て ※現状未設定 http://tools.android.com/tech-docs/configuration
■AndroidStudioをバージョンアップしたときのメモ
http://www.youfit.co.jp/archives/885 Ver 2.1.2 → Ver 2.2.3 のとき、この手順でバージョンアップできた Ver 2.2.3 → Ver 3.1.2 のとき、この手順でバージョンアップできた。が、メニューが英語表記に戻った Ver 3.1.2 → Ver 3.2.0 のとき、この手順でバージョンアップできた。が、メニューが英語表記に戻った ■メニューが英語表記に戻った場合 「AndroidStudio環境を作った時のメモ」の「日本語化」の手順を再度行って日本語化する Ver 2.3.3 時点のメモだが、同じ手順で日本語化できた ■Kotlin Gradle plugin version のエラーになった場合 The Android Gradle plugin supports only Kotlin Gradle plugin version 1.2.51 and higher. Project 'HelloKotlin' is using version 1.2.30. と表示された場合、指示に従ってGradleファイルを書き換える C:\Users\Refirio\AndroidStudioProjects\HelloKotlin\build.gradle ext.kotlin_version = '1.2.30' ↓ ext.kotlin_version = '1.2.51' 書き換えたら「再試行」を実行する
■AndroidStudioをベータ版から正式版にしたときのメモ
以下からAndroidStudioをダウンロード&インストール https://developer.android.com/studio/
■プロジェクトの作成
■プロジェクトの新規作成(Ver 3.1.4 時点) 以下の手順で作成できる プロジェクトが作成されたら、何も変更せずにいったんエミュレータと実機での起動を確認しておくといい Ver 3.1.4 時点では、標準でKotlinでの開発にも対応していた 新規 Android Studio プロジェクトの開始 ↓ 新規プロジェクトの作成 アプリケーション名: HelloAndroid 会社ドメイン: refirio.net プロジェクトの場所: C:\Users\Refirio\AndroidStudioProjects\HelloAndroid (アプリケーション名をもとに自動入力される) パッケージ名: net.refirio.helloandroid (アプリケーション名と会社ドメインをもとに自動入力される) Kitlinサポートを含める: (チェックするとKotlinでの開発になる) 「次へ」 ↓ ターゲットAndroidデバイス 特に変更せず「次へ」 ↓ Mobile にアクティビティを追加する 「空のアクティビティ」が選択されているので、そのまま「次へ」 ↓ アクティビティの設定 特に変更せず「完了」
■Kotlin
■入門 JavaプログラマのためのKotlin入門 - Qiita https://qiita.com/koher/items/bcc58c01c6ff2ece658f KotlinでAndroid開発 - Qiita https://qiita.com/paulbarre/items/fb4565c37287d173a78f Android開発を受注したからKotlinをガッツリ使ってみたら最高だった - Qiita https://qiita.com/omochimetaru/items/98e015b0b694dd97f323 正式採用の「Kotlin」で挑戦! 初めてのAndroidアプリ開発 〜ストップウォッチを作ってみよう〜 - エンジニアHub|若手Webエンジニアのキャリアを考える! https://employment.en-japan.com/engineerhub/entry/2017/06/23/110000 最近話題の「Kotlin」は本当に業務に使えるの? ―国内第一人者と「Yahoo!ニュース」Android版開発者が語るKotlin開発実践のコツ:CodeZine(コードジン) https://codezine.jp/article/detail/10730 ■WebViewでWebページを表示 \app\src\main\AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />
\app\src\main\res\layout\activity_main.xml
<WebView android:id="@+id/webView" android:layout_width="match_parent" android:layout_height="match_parent" />
\app\src\main\java\net\refirio\webviewtest\MainActivity.kt
package net.refirio.webviewtest import android.app.Activity import android.support.v7.app.AppCompatActivity import android.os.Bundle import android.webkit.WebResourceRequest import android.webkit.WebView import android.webkit.WebViewClient class MainActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val webView = findViewById(R.id.webView) as WebView webView.loadUrl("https://refirio.net/") webView.setWebViewClient(object : WebViewClient() { override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean { return false } }) } }
GitHub - tyfkda/GawaNativeAndroid: 全画面に配置したWebViewでAndroidアプリを作るテスト https://github.com/tyfkda/GawaNativeAndroid [Android] アプリのタイトルバーを非表示、全画面表示にする、Theme.NoTitleBar https://akira-watson.com/android/theme-notitlebar.html WebViewでlinkタップ時にブラウザに飛ばないようにする - 布団の中にいたい https://asahima.hatenablog.jp/entry/2017/01/08/000000 ■staticメソッドを定義する companion object を使ってstaticメソッドを定義する Kotlinで静的変数・メソッドを定義する方法 - goroyaのSE日記 http://gogoroya.hatenadiary.jp/entry/2017/06/05/234348 kotlinはJavaからどう見えるか? - Qiita https://qiita.com/boohbah/items/167233c7eafe17f3150b ■Kotlin RPEL ※XcodeでいうPlaygroundのようなもの プロジェクトを開いた状態で、メニューの「ツール → Kotlin → Kotlin RPEL」から実行できる
■アプリ作成
■アプリのアイコンを変更する ※未検証 Android Studio 開発【アプリアイコンの変更】 - ハコニワ デザイン http://hakoniwadesign.com/?p=4908 Androidアプリのアイコン画像を変更する方法【初心者向け】 | TechAcademyマガジン https://techacademy.jp/magazine/2710 ■スプラッシュ画面を表示する ※未検証 Splash画面でpostDelayedして一定時間画面を表示する - Qiita https://qiita.com/shanonim/items/35296c02494ffdbd7273 Androidでスプラッシュ画面を作る方法 - Qiita https://qiita.com/glayash/items/646e5c0d5de82cfc17bc ■権限の確認 Marshmallow端末で、Permission利用確認をする。 http://qiita.com/mattak/items/82ba07259cfe3a2ce4b1 Android6では AndroidManifest.xml でのパーミッション指定を行った上で、 protectionLevel が dangerous 以上のパーミッションについてはさらに権限の確認を行う必要がある ■カメラ http://mslgt.hatenablog.com/entry/2015/05/12/013013 http://blog.kotemaru.org/2015/05/23/android-camera2-sample.html Android4と5・6でカメラは仕様が大きく変わっている ■Fragment Fragmentの基本 - Qiita https://qiita.com/naoi/items/3e1125d1e1418d09f77a Android はじめてのFragment - Qiita https://qiita.com/Reyurnible/items/dffd70144da213e1208b ■プッシュ 「Googleクラウドメッセージング(GCM)」が1年後に廃止、「Firebase Cloud Messaging(FCM)」への移行が必要に:Googleのアプリメッセージング基盤が完全に交代 - @IT http://www.atmarkit.co.jp/ait/articles/1804/13/news051.html
■製品用、開発用などの切り分け
パッケージ名が同じアプリは上書きインストールされる つまり、GooglePlayからインストールした本番アプリがあると、その端末には開発版をインストールできない が、フレーバーを使用することによりこの問題を解消できる flavorDimensionsによるflavorの指定方法 - Qiita https://qiita.com/boohbah/items/389b159a1693247b15de ■前提 productFlavors production ... 製品用 develop ... 開発用 buildTypes release ... 製品用 debug ... 開発用 と設定するものとする ■プロジェクトの作成 新規 Android Studio プロジェクトの開始 ↓ 新規プロジェクトの作成 アプリケーション名: Build Test1 会社ドメイン: refirio.net プロジェクトの場所: C:\Users\refirio\AndroidStudioProjects\BuildTest1 (アプリケーション名をもとに自動入力される) パッケージ名: net.refirio.buildtest1 (アプリケーション名と会社ドメインをもとに自動入力される) Kitlinサポートを含める: チェックする 「次へ」 ↓ ターゲットAndroidデバイス 「API 19: Android 4.4 (KitKat)」にして「次へ」 ↓ Mobile にアクティビティを追加する 「空のアクティビティ」が選択されているので、そのまま「次へ」 ↓ アクティビティの設定 特に変更せず「完了」 エミュレータと実機で、アプリを起動できるかテストする ■Flavorの設定 app の build.gradle の
buildTypes {
の上(下ではない)に以下のコードを追加
flavorDimensions "mode" productFlavors { production { } develop { applicationIdSuffix ".dev" } }
さらに
buildTypes {
の中に以下のコードを追加
debug { applicationIdSuffix ".debug" }
さらに manifestPlaceholders を追加
android { defaultConfig { 〜 略 〜 manifestPlaceholders = [appName:"@string/app_name"] } productFlavors { develop { 〜 略 〜 manifestPlaceholders = [appName:"@string/app_name_dev"] } } }
app\src\main\AndroidManifest.xml のアプリ名を調整
android:label="@string/app_name" ↓ android:label="${appName}"
app\src\main\res\values\strings.xml で開発版のアプリ名を追加
<string name="app_name">Build Test1</string> <string name="app_name_dev">Build Test1 Dev</string> … 追加
■ビルドの切り替え 画面左端の「ビルド・バリアント」をクリックすると、その中の「ビルド・バリアント」部分でビルドを切り替えられる 「developDebug」と「productionDebug」を切り替えると、名前の違うアプリをそれぞれインストールできる 「developRelease」と「productionRelease」は何故かエラーになって実行できない プロジェクト作成直後も「debug」と「release」から選択できるが、この「release」も実行できない リリース版は署名の登録が必要…などがあるみたい 要勉強 Android Studio : debugビルドとReleaseビルドの切替、releaseビルドの追加方法、署名付きapk作成方法 - 生活を良くします-怠惰なプログラミング https://www.what-a-day.net/entry/2016/12/11/001948 ■ビルド設定によるプログラムの分岐 設定が完了した上で実行すると、以下にプログラムが自動作成される app\build\generated\source\buildConfig\production\debug\jp\terraport\buildtest1\BuildConfig.java この内容を利用して、以下のように分岐する
if (BuildConfig.DEBUG) { Log.d("TEST", "DEBUG") } else { Log.d("TEST", "RELEASE") } if ("develop".equals(BuildConfig.FLAVOR)) { Log.d("TEST", "develop") } else { Log.d("TEST", "production") }
■その他参考になりそうなページ アプリケーション ID の設定 | Android Developers https://developer.android.com/studio/build/application-id?hl=ja https://developer.android.com/studio/build/application-id?hl=ja#%E3%83%93%E3%83%AB%E3%83%89_%E3%83%9...
■野良アプリとして書き出す
■APKの書き出し ビルド Build Bundle(s) / APK(s) APKのビルド プロジェクトの app\build\outputs\apk\debug 内に app-debug.apk という名前で出力されている (実行しなくても、ビルドの度に自動作成されているみたい?) ■ダウンロードページの作成 /download/index.php
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>テスト</title> </head> <body> <h1>テスト</h1> <p>デバイスのブラウザより、以下のリンクからインストールをお願いします。</p> <ul> <li><a href="apk/app-debug.apk">Android用アプリをインストール</a></li> </ul> </body> </html>
■ダウンロードと起動 ※あらかじめ、APKから直接インストールできるように端末を設定しておく Android.txt の「野良アプリのインストールを許可」を参照 上記ページにChromeでアクセスし、「Android用アプリをインストール」リンクを長押しする(タップだとインストールできないことがある) ダイアログが表示されるので 「リンクをダウンロード」 を選択する。ダウンロードが完了すると 「開く」 が表示されるのでタップ 「このアプリケーションをインストールしてもよろしいですか?」 と聞いてくる 「インストール」 をタップでインストールされる もしくは、過去にダウンロード済みのファイルをタップする ダイアログが表示され 「インストール」 を選択すると 「この既存のアプリにアップデートをインストールしますか?」 と聞いてくる 「インストール」 をタップでインストールされる ■ダウンロードと起動の補足 ※文言や細かな挙動は、端末によって異なる可能性がある 「ファイルをダウンロードするには、Chromeでストレージへのアクセスを許可する必要があります」 と表示された場合、 「続行」 を選択。遷移先の画面で 「権限」の「ストレージ」 で許可して元の画面に戻る 「セキュリティ上の理由から、お使いのスマートフォンではこの提供元からの不明なアプリをインストールすることはできません」 と表示された場合、 「設定」 を選択。遷移先の画面で 「この提供元のアプリを許可」 で許可して元の画面に戻る 「この種類のファイルはお使いの端末に悪影響を与える可能性があります。」 と表示された場合、 「OK」 にするとダウンロードされる 「もう一度ダウンロードしますか?」 と聞いてきた場合、 「ダウンロード」 にするとダウンロードされる 開く際にアプリの選択を求められたら 「パッケージインストーラー」 を選択する ダウンロードしたファイルをタップして 「ファイルを開けません」 と聞いてきた場合、最初の手順でリンクをタップせずに長押ししてダウンロードする それでもインストールできない場合、AndroidStudioでの書き出し手順に問題が無いか確認する ■アンインストール 設定 → アプリケーション → (アプリ名) → アンインストール を選択すると 「このアプリをアンインストールしますか?」 と聞いてくるので 「OK」 でアンインストールされる その状態で再度インストールすると、普通にインストールされた なお、アプリ一覧画面の右上ボタンで「アプリの設定をリセット」を選択すると、諸々の許可設定などがリセットされる 間違った選択をしてインストールできなくなった場合などに試す 以下の問題は過去のものかもしれないが、インストールできない場合に確認する Android Lollipopでapkがインストールできない問題 - Qiita https://qiita.com/orangain/items/a70f5b774296e609fb75
■トラブル
■既存プロジェクトを開くとエラー 古いプロジェクトを開くと、以下のようなエラーが表示されるものがあった Calendar エラー :(52, 0) Could not find property 'debugKeystore' on SigningConfig_Decorated{name=debug, storeFile=C:\Users\refirio\.android\debug.keystore, storePassword=android, keyAlias=AndroidDebugKey, keyPassword=android, storeType=C:\Users\refirio\.android\debug.keystore}. <a href="openFile:C:\Users\refirio\AndroidStudioProjects\Calendar\app\build.gradle">Open File</a> Camera エラー :(52, 0) Could not get unknown property 'debugKeystore' for SigningConfig_Decorated{name=debug, storeFile=C:\Users\refirio\.android\debug.keystore, storePassword=android, keyAlias=AndroidDebugKey, keyPassword=android, storeType=C:\Users\refirio\.android\debug.keystore, v1SigningEnabled=true, v2SigningEnabled=true} of type com.android.build.gradle.internal.dsl.SigningConfig. <a href="openFile:C:\Users\refirio\AndroidStudioProjects\Camera\app\build.gradle">Open File</a> gradle.properties を作成する C:\Users\refirio\AndroidStudioProjects\Camera\gradle.properties
#デバッグ用のデバッグ署名 debugKeystore="../../../../../.android/debug.keystore" DEV_KEY_ALIAS=androiddebugkey DEV_STORE_PASSWORD=android DEV_KEY_PASSWORD=android #release用の署名情報 productKeystore="../../../xxxx.keystore" KEY_ALIAS=xxxx STORE_PASSWORD=xxxx KEY_PASSWORD=xxxx
設定するとエラーの内容が変わった エラー :Failed to find target with hash string 'android-25' in: C:\Users\refirio\AppData\Local\Android\Sdk <a href="install.android.platform">Install missing platform(s) and sync project</a> リンクをクリックすると、Android SDK Platform 25 のダウンロードとインストールがはじまった その後も何度かインストールを促されるので、すべてインストール ひととおりインストールしたら実行ボタン(実機書き出し)を押せるようになったが、実行すると C:\Users\refirio\AndroidStudioProjects\Camera\app\src\main\java\xxx\app\util\GoogleAnalyticsUtil.java エラー :(65, 70) エラー: シンボルを見つけられません シンボル: 変数 analytics 場所: クラス xml と言われ、ソースコードの tracker = GoogleAnalytics.getInstance(mContext).newTracker(R.xml.analytics); にフォーカスが当たった 1行目の package xxx.app.util; に赤線が引かれて The SDK platform-tools version (24.0.1) is too old to check APIs compiled with API 25 と言われる。APIレベル25までインストールが必要 ツール → Android → SDK Manager でAndroid7.1.1(APIレベル25)までインストール AndroidStudioを再起動 アップデートがあると言われたのでインストール プロジェクトを開くと、Gradleの同期とビルドが始まった 実行してみるが、それでも C:\Users\refirio\AndroidStudioProjects\Camera\app\src\main\java\xxx\app\util\GoogleAnalyticsUtil.java エラー :(65, 70) エラー: シンボルを見つけられません シンボル: 変数 analytics 場所: クラス xml と言われた。リポジトリ作成者に確認すると、res/xml/ 内に必要なファイルが無かった プッシュされていなかっただけだったので、プッシュ&プルで取り込んで解決した
■GPUImage
画像や動画にエフェクトをかけることができるライブラリ http://qiita.com/yimajo/items/e38e8bafc17144b7af79 Android版 https://github.com/CyberAgent/android-gpuimage ■サンプル実行 NDK(Android Native Development Kit)のインストールが必要 http://dev.classmethod.jp/smartphone/android/android_ndk_install/ GradleでNDKを自動インストールしてくれるプロジェクトもあるが、GPUImage for Android はそうなっていない Android Studio で ファイル → 設定 → SDK Tools → NDK にチェックを入れて適用すると、NDKがインストールされる C:\Users\ユーザ名\AndroidStudioProjects\GPUImage\local.properties で ndk.dir=C\:\\Users\\ユーザ名\\AppData\\Local\\Android\\Sdk\\ndk-bundle のパスが正しいことを確認する さらに C:\Users\ユーザ名\AndroidStudioProjects\GPUImage\library\build.gradle の12行目を編集。(gitから何らかの値をとって数値にしているようだが、取れないようなので適当な数値を設定) versionCode "git rev-list origin/master --count".execute().text.toInteger() ↓ versionCode 1 まだ謎エラーが出るようなら、 ビルド → Clean Project ビルド → Rebuild Project を試す また追加ライブラリのインストールを求められたのでインストール その後実行すると、サンプルを実機にインストールできた ■プロジェクトに組み込み C:\Users\ユーザ名\AndroidStudioProjects\GPUImageTest\app\build.gradle のdependenciesに以下を追加
//GPUImage compile 'jp.co.cyberagent.android.gpuimage:gpuimage-library:1.4.1'
これだけでプロジェクトにGPUImageが組み込まれるので、あとは呼び出すだけ 以下Intentから画像を選択して、その結果にフィルタをかけて表示するサンプル
// Intentを取得 Intent intent = new Intent(); intent.setType("image/*"); intent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(intent, REQUEST_GALLERY); @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_GALLERY && resultCode == RESULT_OK) try { InputStream in = getContentResolver().openInputStream(data.getData()); Bitmap img = BitmapFactory.decodeStream(in); in.close(); // GPUImageで画像を加工 GPUImage mGPUImage = new GPUImage(this); mGPUImage.setFilter(new GPUImageSobelEdgeDetection()); mGPUImage.setImage(img); img = mGPUImage.getBitmapWithFilterApplied(); // 画像を表示 imageViewer.setImageBitmap(img); Toast.makeText(MainActivity.this, "画像を選択しました", Toast.LENGTH_SHORT).show(); } catch (Exception e) { e.printStackTrace(); } }