Flutter/開発環境構築/android
目次
androidのapk作成&インストール
flutter build apk flutter install #これはアンインストール後にインストールされるので直で実行した端末のprefなどは消える。
↑はリリースビルドで、リリースビルドのときはデバッグビルド(1秒程度)と比べて起動速度が速い。
build/app/outputs/flutter-apk/app-release.apk
androidパッケージ名変更
- android/app/src/main/AndroidManifest.xml
- android/app/build.gradle
- android/app/src/profile/AndroidManifest.xml
- android/app/src/debug/AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example1.hoge">
- android/app/src/main/com/example1/hoge/MainActivity.java
package com.example1.hoge;
2箇所変更とMainActivity.javaのdir変更
androidのkeystore付きapk作成
- keystoreを作っておく
- android/key.properties を作成
storePassword=パスを入れる keyPassword=パスを入れる keyAlias=key storeFile=keystoreのパスを入れる・・・key.jks
- android/app/build.gradle を追加する
+def keystorePropertiesFile = rootProject.file("key.properties")
+def keystoreProperties = new Properties()
+keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
android {
- android/app/build.gradle の部分を修正
-buildTypes {
- release {
- // TODO: Add your own signing config for the release build.
- // Signing with the debug keys for now, so `flutter run --release` works.
- signingConfig signingConfigs.debug
- }
-}
+signingConfigs {
+ release {
+ keyAlias keystoreProperties['keyAlias']
+ keyPassword keystoreProperties['keyPassword']
+ storeFile file(keystoreProperties['storeFile'])
+ storePassword keystoreProperties['storePassword']
+ }
+}
+buildTypes {
+ release {
+ signingConfig signingConfigs.release
+ }
+}
参考:https://qiita.com/rkowase/items/f1012ef0738791dd6084
Androidで64 ビット要件に準拠していませんが表示された場合
このリリースは Google Play の 64 ビット要件に準拠していません
flutter build apk --release --target-platform=android-arm64
もしくは、
build.gradle
buildTypes {
release {
ndk{
abiFilters "x86", "arm64-v8a", "android-arm64"
}
}
}
参考:https://github.com/flutter/flutter/issues/18494
ビルドは成功するが起動時に落ちてcouldn't find "libflutter.so"エラーが出る場合
上の項目のndkにabiFiltersが追加されてるかを確認
$ flutter build apk --release
releaseをつけてapkを作成する
abiFiltersで指定したものの確認
$ flutter build apk --release
apkをunzipで解凍して確認zd
unzip build/app/outputs/apk/release/app-release.apk
ls lib/arm64-v8a/libflutter.so ls lib/armeabi-v7a/libflutter.so
参考:https://qiita.com/mkosuke/items/afa40c09078285034799
Androidのversion記述場所
pubspec.yaml
version: 1.0.1+2
$ flutter build apk
以下ファイルが以下の通り出力されればよい。
android/local.properties
flutter.versionName=1.0.1 flutter.versionCode=2
公式androidの64bit対応方法
https://developer.android.com/distribute/best-practices/develop/64-bit
64bit対応済み判定
- androidStudioでBuild/ApkAnalyzeでapkファイルを指定
- libの下に以下dirがあれば良い。
arm64-v8a x86_64
"このリリースは Google Play の 64 ビット要件に準拠していません"が出る場合
flutter upgrade flutter --version
Flutterのバージョンを1.7以上へ
https://algorithm.joho.info/flutter/flutter-erroe-google-play-64bit/
androidのaab対応
flutterの1.7でaab対応
flutter upgrade flutter --version
apkからappbundleにするだけ
flutter build apk --release
↓
flutter build appbundle --release
aabの出力先は build/app/outputs/bundle/release/app-release.aab
androidxの対応
build時に以下のような警告が出る。
[!] Your app isn't using AndroidX.
To avoid potential build failures, you can quickly migrate your app by following the steps on https://goo.gl/CP92wY.
20191204現在以下のようにコマンドでもandroid-studioでもandroidx対応されていた。
$ flutter create my_app_sample
androidx確認
android.useAndroidX=trueがあれば対応されてる。
$ vi my_app_sample/android/gradle.properties org.gradle.jvmargs=-Xmx1536M android.enableR8=true android.useAndroidX=true android.enableJetifier=true
androidのANRクラッシュ
Sony Xperia XZ1(android9)端末で以下エラーが起こった。
pid: 0, tid: 0 >>> com.example.hogehoge <<< backtrace: #00 pc 00000000000220ac /system/lib64/libc.so (abort+116) #01 pc 0000000000a11de8 /data/app/com.example.hogehoge-YAgJhNxVKVmOyKuK7gpm9g==/split_config.arm64_v8a.apk (offset 0x9f0000)
以下でビルドしたのが原因かも
flutter build appbundle --release
以下に変更してビルドした。
flutter build appbundle --release --target-platform=android-arm,android-arm64
参考:https://github.com/flutter/flutter/issues/38181
compileSdkVersionについて
変更前
android/app/build.gradle
android {
compileSdkVersion flutter.compileSdkVersion
defaultConfig {
targetSdkVersion flutter.targetSdkVersion
}
}
変更後
android/app/build.gradle
android {
namespace "com.example.app"
compileSdk 34
defaultConfig {
applicationId "com.example.app"
minSdk 21
targetSdk 34
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
}
}
android/local.properties ファイルの以下が、もしあれば削除
- flutter.targetSdkVersion=34 - flutter.compileSdkVersion=34
