■目次
権限の確認カメラ既存プロジェクトを開くとエラーGPUImage
■権限の確認
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でカメラは仕様が大きく変わっている
■既存プロジェクトを開くとエラー
UniAppでは大丈夫だったが、MqCalendarやMqCameraでは以下のようなエラーが表示された MqCalendar エラー :(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\MqCalendar\app\build.gradle">Open File</a> MqCamera エラー :(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\MqCamera\app\build.gradle">Open File</a> gradle.properties を作成する C:\Users\refirio\AndroidStudioProjects\MqCamera\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\MqCamera\app\src\main\java\mq\app\util\GoogleAnalyticsUtil.java エラー :(65, 70) エラー: シンボルを見つけられません シンボル: 変数 analytics 場所: クラス xml と言われ、ソースコードの tracker = GoogleAnalytics.getInstance(mContext).newTracker(R.xml.analytics); にフォーカスが当たった 1行目の package mq.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\MqCamera\app\src\main\java\mq\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(); } }