Pocket

https://www.ninton.co.jp/?p=2738

その1とは別のアプリを targetSdkVersion=26にしたときの作業メモです。

ビルド1回め

~/Android/Sdk/ndk-bundle/toolchains/ に、mipsel-linux-android がない、というエラーです。

その1では、gradle pluginを 3.1.4、gradleを4.4.1にして対応しました。

今回のアプリで、これをやると、次々と修正箇所がでてきて、サポートライブラリのAndroidXへの移行まで必要になりそうでした。今回は、なるべく簡単に済ませたいんです。

そこで、gradleはアップデートせず、~/Android/Sdk/ndk-bundle/toolchain/に mips用データを設置する方法にしました。

NDKアーカイブ を表示します。リビジョン18以降のパッケージには、MIPS用データがないので、リビジョン17c(2018年6月)のパッケージをダウンロードします。ぼくは、Linux 64 ビット をダウンロードしました。

ターミナルで作業します。

android−ndk−r17c/toolchains/ の下に、mips64el-linux-android-4.9/ と mipsel-linux-android-4.9/ があります。この2つを ~/Android/Sdk/ndk-bundle/toolchains/ 下に移動します。

これでビルドできるようになりました。

カメラ起動でFileUriExposedException

カメラを起動すると、次のエラーが。

https://developer.android.com/training/camera/photobasics#java を見ると、カメラを起動するIntentに渡すファイルuriの作成方法が、Uri.fromFileから、FileProvider.getUriForFileに代わったようです。

AndroidManifest.xmlにFileProvidorを設定します。

res/xml/file_paths.xmlを新規作成します。

このアプリは、Environment.getExternalStorageDirectory() の下にカメラ画像を保存しているので、<external-path>を指定しました。

FileProvider | Android Developers

タグ名場所
files-pathContext.getFilesDir()
cache-pathgetCacheDir()
external-pathEnvironment.getExternalStorageDirectory()
external-files-pathContext.getExternalFilesDir()
external-cache-pathContext.getExternalCacheDir()
external-media-pathContext.getExternalMediaDirs()

カメラを起動し、カメラ画像を保存できるようになりました。