facebook twitter hatena line email

Flutter/開発環境構築/android

提供: 初心者エンジニアの簡易メモ
移動: 案内検索

androidのapk作成&インストール

flutter build apk
flutter install #これはアンインストール後にインストールされるので直で実行した端末のprefなどは消える。

↑はリリースビルドで、リリースビルドのときはデバッグビルド(1秒程度)と比べて起動速度が速い。

build/app/outputs/apk/release/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作成

  1. keystoreを作っておく
  2. android/key.properties を作成
storePassword=パスを入れる
keyPassword=パスを入れる
keyAlias=key
storeFile=keystoreのパスを入れる・・・key.jks
  1. android/app/build.gradle を追加する
+def keystorePropertiesFile = rootProject.file("key.properties")
+def keystoreProperties = new Properties()
+keystoreProperties.load(new FileInputStream(keystorePropertiesFile))

android {
  1. 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で解凍して確認

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対応済み判定

  1. androidStudioでBuild/ApkAnalyzeでapkファイルを指定
  2. 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.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