Flutter: 32ビットおよび64ビットのバイナリを含むAPKをサポートする

作成日 2018年06月15日  ·  286コメント  ·  ソース: flutter/flutter

flutter build apk --release --flavor pro使用してapkファイルを作成しますが、arm64-v8aにはlibflutter.sofile.soアプリの起動が含まれていません。
--target-platform=android-arm64flutter build apk --release --flavor pro --target-platform=android-arm64を追加すると、apkファイルに含まれます。 ただし、32ビットCPUではアプリの起動に失敗します。
私は何ができますか、apkファイルは64と32のCPUで実行できます@ mravn-google

/System.err(15263): java.lang.UnsatisfiedLinkError: Couldn't load flutter from loader dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.jianzhibao.ka.enterprise-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.jianzhibao.ka.enterprise-1, /vendor/lib, /system/lib]]]: findLibrary returned null

私は新しいプロジェクトを作成し、デバッグまたはリリースし、うまく機能します。 私のプロジェクトからの新しいプロジェクトとの違いは、サードパーティのsoファイルを追加することです

image

問題はどこにありますか ?

crowd platform-android new feature gradle tool waiting for PR to land (fixed)

最も参考になるコメント

同じ問題があります。32ビット用にビルドすると64ビットデバイスが除外されますが、それらで実行されます。 --target-platform android-arm64指定して64用にビルドすると、64ビットデバイスでは機能しますが、32ビットデバイスではクラッシュします。 また、Googleは2019年にapkのアップロードを64ビットに制限します。

Flutterチーム、この基本的な問題を解決してください!

全てのコメント286件

AFAIK、現在、FlutterはリリースAPKで選択された1つのプラットフォームフォルダーにのみlibflutter.soを追加します。 私のために働いた回避策は、build.gradleに32ビットのみを実行させることでした(すべての64ビットライブラリ+ Intelを除く)

release {

    ...
            ndk{
                abiFilters "armeabi-v7a"
            }
}

cc @ Hixie

@swavkulinskiどのようにapksをプレイストアにリリースしますか?

同じ問題がありますが、flutter.soは「armeabi-v7aフォルダー」に含まれていません。
x86およびarmeabi-v7a用のサードパーティライブラリのみがありますが、arm64はありません。
「armeabi-v7awith
ndk {
abiFilters "armeabi-v7a" //動作しません "armeabi"、 "x86"、
}
@ mravn-googleがandroid-armに提案するようにtarget-platformとして設定します。

アーチを指定せず、ライブラリを含まないAPK
screen shot 2018-07-26 at 21 06 53

ライブラリがあり、アームスペックがないAPK
screen shot 2018-07-26 at 21 10 30

アーチを指定してライブラリを含めるAPK
screen shot 2018-07-26 at 21 12 58

さらなるステップをデバッグする方法について何か提案はありますか?

@xxseabxx私は同じ問題を抱えています

同じ問題があります。32ビット用にビルドすると64ビットデバイスが除外されますが、それらで実行されます。 --target-platform android-arm64指定して64用にビルドすると、64ビットデバイスでは機能しますが、32ビットデバイスではクラッシュします。 また、Googleは2019年にapkのアップロードを64ビットに制限します。

Flutterチーム、この基本的な問題を解決してください!

Flutterチーム、この基本的な問題を解決してください!

それで、フラッターは32ビットまたは64ビットのリリースapkのみをサポートでき、両方はサポートできないと言って間違っていますか?

ここで運がいいですか?

xxseabxxのコメントはうまくいくかもしれないと思いますが、私はそれを試していません...

私も同じ問題を抱えています。

すべての依存関係で、問題の原因となっているパッケージを少なくとも1つ分離し、それに応じてバグレポートを作成しました: https

問題を特定するには、依存関係/プラグインごとに次のようにします。

1)空のフラッタープロジェクトを作成する

2)main.dartを次のように置き換えます

パッケージのサンプルコード(例:https://pub.dartlang.org/packages/flutter_html_view#-example-tab-)

3)それに応じてpubspec.yamlを更新します

4)実行

$ flutter build apk

作成したのはflutter_mlkitであることが判明しました。

32と64の両方のアーキテクチャをターゲットにできるようにしたいと思います。

同じ問題があります。 --target-platform = android-arm64は私には機能しますが、Googleが32ビットのプラグを抜くまで32ビットをサポートしたいと思います

Flutterチーム、この基本的な問題を解決してください!

多くのサードSDKが機能していないので、緊急だと思います

MapboxをAndroidアプリケーションに追加すると、これを再現できます。

私も同じ問題を抱えています。プロジェクトでbaiduMapを使用していますが、bebugモデルは問題なく、クラッシュをリリースします。
user flutter build apk --release --target-platform = android-arm64私の電話は問題ありませんが、32ビット電話がクラッシュします。Flutterチーム、この問題をできるだけ早く解決してください。

https://github.com/azihsoyn/flutter_mlkit/issues/36と同様に、私にとっては機能します。apkは32ビットと64ビットの両方の電話で実行できます。 @ peace2knowledge

これはリリースapkにとって非常に重要な問題になるはずです

この問題の回避策はありますか?

  1. 抽出lib/armeabi-v7a/libflutter.soから$<FLUTTER>/bin/cache/artifacts/engine/android-arm-release/flutter.jar
  2. ファイルarmeabi-v7a/libflutter.so$<project>/android/jniLibs/armeabi-v7a/コピーします
  3. $<project>/android/app/build.gradleを次のように変更します。
android {
...
    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
            ndk {
                abiFilters "arm"
            }
        }
        debug {
            ndk {
                abiFilters "arm"
            }
        }
}
    }

NDKの場合、64ビットツールチェーンにはminSdkVersion> = 21が必要です。

これは私をブロック解除しました(適切なminSdkVersionが設定されています):

minSdkVersion = 16

flutter build apk --release --target-platform=android-arm
flutter run --release --target-platform=android-arm

minSdkVersion = 21

flutter build apk --release --target-platform=android-arm64
flutter run --release --target-platform=android-arm64

すべてのabiFiltersを削除してください、それは私のために働きます。

@ zoechi @ Hixie穏やかなバンプ。 また、現在最も重要なユースケースである既存のアプリと統合しようとすると、これに遭遇します。

mindsdk = 21ですが、ターゲットプラットフォームはまだ更新されていません

@neiljaywarner優先順位を上げるには、最初のコメントを高く評価する方が効果的です。

  1. 抽出lib/armeabi-v7a/libflutter.soから$<FLUTTER>/bin/cache/artifacts/engine/android-arm-release/flutter.jar
  2. ファイルarmeabi-v7a/libflutter.so$<project>/android/jniLibs/armeabi-v7a/コピーします
  3. $<project>/android/app/build.gradleを次のように変更します。
android {
...
    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
            ndk {
                abiFilters "arm"
            }
        }
        debug {
            ndk {
                abiFilters "arm"
            }
        }
}
    }

これは私には機能しませんでした-libフォルダーがないAPKが生成されました(したがって、以前のapkの半分のサイズでした)。

また、一部の人が投稿した32ビットのみのソリューション(https://medium.com/flutterpub/flutter-app-couldnt-find-libflutter-so-c95ad81cbccdなど)を実装すると、 -パフォーマンスの高いアプリ。 特にSamsungS6とS9のあるテストでは、大きなリストで非常に遅いスクロールが見られます。

問題はarm64 libflutter.so欠落だけではないと思います。

arm64用にビルドし、 libflutter.soをコピーしてから、再ビルドして手動でarm64ライブラリをAPKに追加し、再調整して再署名することで、不足しているライブラリをAPKに追加してみました。

flutter build apk --target-platform=android-arm64
mkdir -p tmp/lib/arm64-v8a
cp build/app/intermediates/transforms/mergeJniLibs/release/0/lib/arm64-v8a/libflutter.so tmp/lib/arm64-v8a/
flutter build apk
cp build/app/outputs/apk/release/app-release.apk tmp/
cd tmp
aapt add app-release.apk lib/arm64-v8a/libflutter.so
zipalign 4 app-release.apk app-release-aligned.apk
apksigner sign --ks keystore.jks app-release-aligned.apk

結果のAPKには、armeabi-v7aとarm64-v8aの両方にlibflutter.soが含まれていますが、起動時に次のエラーでクラッシュします。

12-22 09:53:29.274 7457 7457 F flutter : [FATAL:flutter/runtime/dart_vm.cc(403)] Error while initializing the Dart VM: Snapshot not compatible with the current VM configuration: the snapshot requires 'product no-type_checks no-asserts no-error_on_bad_type sync_async reify_generic_functions arm-eabi softfp' but the VM has 'product no-type_checks no-asserts no-error_on_bad_type sync_async reify_generic_functions arm64-sysv'

アーチごとに個別のスナップショットアセットを出荷する必要があると思います。 今のところ、2つの別々のAPKを構築することが、私にとって有効な唯一のソリューションです。

これは、リリースがapkを適切に構築していないことを確認するためだけに、実際にフロントエンドをフラッターで作成することに時間を費やした後に遭遇するかなり厄介な問題です。

iOSを使い始めたら、同じ問題が発生しますか?

この問題は何時に解決できますか?

これは、gradleファイルが両方の適切なビットをすべてバンドルする方法を知らないというだけですか? @ jason-simmons @cbrackenは知っているかもしれませんか?

または@FaisalAbidかもしれませんか?

これは、gradleファイルが両方の適切なビットをすべてバンドルする方法を知らないというだけですか? @ jason-simmons @cbrackenは知っているかもしれませんか?

または@FaisalAbidかもしれませんか?

このコメントによると、正しいビットでは、libflutter.so以上のものを意味していると思います: https

今のところ、唯一の解決策は、修正が行われるまで32ビットAPKをビルドすることだと思います。 ただし、32ビットでパフォーマンスの問題が発生していることに注意してください(リストが大きい場合はコードが最適ではありませんが)。

64ビットと32ビットのAPKを別々に作成し、両方をGoogleにアップロードすることは問題なく機能しています(正しいAPKを正しいデバイスに自動的に提供する処理を行います)。

abiFiltersarmeabi-v7a--target-platform=android-armに設定して1つのビルドを実行し、そのAPKをアップロードしてから、 abiFiltersarm64-v8a設定して別のビルドを実行しますそして--target-platform=android-arm64そしてそれもアップロードします。

また、APKごとに異なるバージョンコードを使用する必要があることに注意してください。そのため、DPIまたはAPIレベルの場合と同じように、バージョンコードに64ビットまたは32ビットであることを示すものを含めます。

現在、最良のオプションは、ターゲットプラットフォームから条件付きでabiFiltersを設定することです。

        ndk {
            if (project.hasProperty('target-platform') &&
               project.property('target-platform') == 'android-arm64') {
                abiFilters 'arm64-v8a'
            } else {
                abiFilters 'armeabi-v7a'
            }
        }

私が抱えている問題は、バージョンコードが異なる2つのapkをアップロードする必要があることです
これに対する本当の修正は、複数のターゲットプラットフォームでAndroidバンドルを構築できるようにすることです。 アプリバンドルは現在フラッターマスターにありますが、これで動作させることができませんでした

Playストアでは、8月1日から64ビットが必要になります。

8月1日以降もアプリを実行したい32ビットデバイスがまだあると仮定すると、32ビットと64ビットがリリースビルドに含まれていることを確認するにはどうすればよいですか?

https://android-developers.googleblog.com/2019/01/get-your-apps-ready-for-64-bit.html

_Google Playに公開する場合、32ビットバージョンに加えて64ビットバージョンを提供するには、ネイティブコードを含むすべての新しいアプリとアプリのアップデートが必要です。_

この要件は、現在、Flutterアプリで2つのAPK(1つは32ビットデバイス用、もう1つは64ビットデバイス用)を作成し、両方を同じリリースの一部としてアップロードするだけで簡単に満たすことができます。 Google Playは、適切なAPKを適切なデバイスに自動的に提供します。 私はこれをやっていて、それはうまくいきます。 私は他のコメント提供者に同意しますが、それは_理想的_ではありませんが、IMOは、ワークフローのこの部分を作成することは実際にはそれほど問題ではありません。

これが近い将来修正されることができれば素晴らしいでしょう。 マルチAPKアプローチは、他のAndroidプロジェクトと同様に、Flutterが複数の.soアーキテクチャバージョンでAPKをビルドするまでの一時的なソリューションにすぎません。

多くの手動処理(バージョンコード、ビルドシステム、自動化)が必要であり、Androidアプリバンドルは開発者の手動ビルド手順を軽減するはずでした。

現在、この問題は32ビットと64ビットのバージョンについてのみ言及していますが、x86、x64に加えて、中国の一部の開発者はまだmipsのサポートについて話し合っています。

箱から出して可能な限り最小のapkサイズで7つのAndroidアーキテクチャの多くをフラッターサポートするべきではありませんか?

https://proandroiddev.com/reducing-apk-size-by-using-abi-filters-and-apk-split-74a68a885f4e

@MarcelEdward必要がありますが、AndroidがApp Bundle(aab)を完全にサポートし、エンドユーザーがとにかく携帯電話用に最適化されたビルドをダウンロードすることを考えると、APKサイズは最も重要な側面ではありません。

プラットフォーム固有のAPKのサイズについては、可能な限り最適化/小さくする必要があります。

開発中は、ネイティブコードを変更するたびにフルサイズのAPKを再インストールするのは面倒な場合があります。 秘訣は、abifiltersを使用して、デバッグビルドをテスト電話のアーキテクチャに制限することです。 Flutterがホットリロードをサポートしていることを考えると、これが今のところ適切かどうかはわかりません。

https://github.com/flutter/flutter/issues/17829 aapアプリのバンドルについてですが、flutter buildapkでコンパイルすると32ビットしか見つかりません

したがって、richtを理解するときは、少なくとも32と64の両方をアップロードする2つの個別のバージョンを作成する必要があります。その後、アプリストローは奇跡的にaapを作成し、消費者が特定のアーキテクチャに最適化されたバージョンを取得できるようにします。

@MarcelEdwardPlayストアはアプリバンドルを作成しません。 デバイスアーキテクチャに基づいて、デバイスに適切なAPKを提供するだけです。 これは、アプリバンドルが登場するずっと前から、アーキテクチャだけでなく、画面サイズ/解像度、APIレベル、その他の差別化要因でもサポートされてきました。 これについて詳しくは、こちらをご覧ください

ここでGoogleマップの13のバリエーションを見ると、この良い例を見ることができ

アプリバンドルを使用した場合、複数のAPKをアップロードするのではなく、バンドルを1回アップロードするだけで済みますが、PlayストアがさまざまなAPKバリアントを生成するため、最終結果は似ていますが、作業が少なくて済みます。あなたが自分自身を自動化するために。 (アプリバンドルは、動的にロードされる新しいモジュールもサポートしますが、それは別の話です。)

したがって、ここで必要な機能は、2つの--target-platform引数を使用してflutter flutter buildを実行し、 flutter両方のアーキテクチャをAPKに自動的に配置できるようにすることです。

@Hixie

電話の特徴はかなり低レベルです。私たちのアプリを使用する人々が持っているアーキテクチャの手がかりはありません。アーキテクチャが指定されていない場合、Flutterは32ビットをコンパイルするので、32ビットがすべてに適合すると思います。ストアは8月に64ビットを必要とするので、32ビットがすべてに適合し、64ビットが必要な場合、これら2つはリリースビルドに入る必要がありますか?

私は自分でAndroidスマートフォンを持っていないので、シミュレーターで動作する場合は動作すると思います。アプリのユーザーが別のことを言うまでは。

@ MarcelEdward232ビットと64ビットだけではありません。 最新のAndroidNDKでサポートされているアーキテクチャは4つあります。

  • armeabi-v7a
  • arm64-v8a
  • x86
  • x86_64

現時点では、Flutterはデフォルトで、armeabi-v7a専用にコンパイルされたネイティブコードを含むAPKをビルドします。 これはarm64-v8aで正常に実行されますが、arm64-v8a用にネイティブにコンパイルされたものと比較するとパフォーマンスが低下します。 ただし、デバイスにバンドルされている場合は、x86またはx86_64のARMエミュレーターで実行されます。 x86 / x86_64デバイスにARMエミュレーターがない場合、デバイスはまったく実行されません。

繰り返しになりますが、8月の要件では、両方のアーキテクチャを含む1つのユニバーサルAPKまたはAABを作成する必要はありません。 作成する各リリースに、64ビットデバイスに適した(少なくとも)1つのAPKが含まれている必要があります。 複数のアーキテクチャをサポートする1​​つのユニバーサルAPK / AABを構築できるようにするためのFlutterの変更は、開発者のワークフローの観点からは素晴らしいことですが、このような改善の有無にかかわらず、この要件を満たすことができます。

追加のために編集:個人的には、アプリバンドルのファーストクラスのサポートがマルチアーチの状況を改善するための最良の方法だと思います。

appbundleは今後の解決策のように見えます...次のステップはこれだと思います: #29303

このバグを理解しているので、 flutter buildのデフォルトの出力形式として.aabに移行し、その.aabに32ビットと64ビットの両方のビルドを含めることと非常に関連しています。
https://developer.android.com/studio/projects/dynamic-delivery

私の理解では、この作業の一部はすでに進行中である可能性があります。 @dnfieldは知っているかもしれません。

/ cc @mklim

.aabが役立つようですが、実際には必要ない場合があります。 問題は、32ビットと64ビットの両方のアームバイナリをAPKに追加するのと同じくらい簡単ですか?

ええ、わかりました。 これは、ターゲットアーチのAOTスナップショットも含める必要がある可能性があるためです。 そして今、私たちはそれをアセットの下に置いています。アーキテクチャごとのバージョンをlibs下に置いていません。 AOTスナップショットを動作する可能性のあるアーキテクチャ固有のlibsフォルダーに配置できる場合は、そうでない場合は、その理由で.aab形式を使用する必要があります。

とにかくこれを実行して、add2appユースケースの.AARの構築をサポートしたいと思います。 私はそれを突くでしょう。

ndk {
            if (project.hasProperty('target-platform') &&
               project.property('target-platform') == 'android-arm64') {
                abiFilters 'arm64-v8a'
            } else {
                abiFilters 'armeabi-v7a'
            }
        }

これは、数日間のトラブルシューティングの後で私のために働きました

@AppleEducateによって投稿された機能しません。

リリースセクションに入れてください

これが私の解決策でした:

  1. app gradle
splits {
        // Configures multiple APKs based on ABI.
        abi {
            // Enables building multiple APKs per ABI.
            enable true
            // By default all ABIs are included, so use reset() and include to specify that we only
            // want APKs for armeabi-v7a and arm64-v8a.

            // Resets the list of ABIs that Gradle should create APKs for to none.
            reset()

            // Specifies a list of ABIs that Gradle should create APKs for.
            include "armeabi-v7a", "arm64-v8a"

            // Specifies that we do not want to also generate a universal APK that includes all ABIs.
            universalApk false
        }
    }
  1. flutter build apk --release --target-platform=android-arm実行します

  2. app-armeabi-v7a-release.apkをPlayストアにアップロードする

  3. versionCodeインクリメント

  4. flutter build apk --release --target-platform=android-arm64実行します

  5. app-arm64-v8a-release.apkをPlayストアにアップロードする

Google Playストアは、デバイスアーキテクチャに従ってアプリを提供します。 32ビットデバイスは満足しています。64ビットデバイスは満足しています。両方のアーキテクチャに対応しながら、APKサイズが比較的小さいままであることを知って満足しています。

同じAPKに両方のアーキテクチャのサポートを含める場合、アプリのサイズは10MB以上になると予想されます

@ edTheGuy00プレイストアへのアップロードがどれほど大きいかは興味深いとは思いません。 アンドロイドフォンはとにかく125以上のtemporay空きスペースを要求し、開梱のために外部ストレージを使用することを拒否します。 これは、すべてのユーザーがアプリのサイズについて知っていることです。インストール後にアプリがどれだけ使用するかは実際には問題ではありません。 インストール用に125MB以上の空き容量が必要になります。

可能なすべてのアーキテクチャを含めることができるようにしてください。 Playストアへのアップロードが250MBになるかどうかは気にしません。

フラッターがAndroid携帯にインストールするために外部ストレージのギガビットスペースを使用するのであれば、それは素晴らしいことです。 つまり、フラッターがAndroidフォンのインストールに影響を与える可能性がある場合です

flutter.gradleスクリプトには、すべてのABIを最終APK(ユニバーサルAPK)に含めてから、デフォルトで分割APKをオンにする必要があると思います。 Androidツールは接続されたデバイスにアップロードする適切なAPKを選択し、すべてが順調です。 最終的なユニバーサルAPKは、プレイストアにアップロードするか、各ABIの分割APKにアップロードできます。

それまでの間、解決策として、これをandroid\appディレクトリのbuild.gradleの一番下に追加できます。

// Include both 32bit and 64bit arm libflutter.so files into your APK
project.afterEvaluate {
    assembleRelease.doLast {
        String src
        if(project.hasProperty('target-platform') &&
            project.property('target-platform') == 'android-arm64') {
            // If we are building the 64bit then we also want to add the 32bit libflutter.so
            src = "$flutterRoot/bin/cache/artifacts/engine/android-arm-release/flutter.jar"
        }else{
            // If we are building the opposite (32bit), we include the 64bit libflutter.so
            src = "$flutterRoot/bin/cache/artifacts/engine/android-arm64-release/flutter.jar"
        }
        copy {
            from zipTree(src)
            include 'lib/*/libflutter.so'
            into "$buildDir/intermediates/jniLibs/release/0/"
        }
    }
}

また、これをbuildTypes > releaseセクションに追加することをお勧めします。 これにより、リリースAPKに両方のABIが含まれるようになります。

ndk {
    abiFilters 'armeabi-v7a', 'arm64-v8a'
}

@slightfootとのコラボレーションの後、これを

project.afterEvaluate {
    assembleRelease.doFirst {

        String src
        if(project.hasProperty('target-platform') &&
                project.property('target-platform') == 'android-arm64') {
            // If we are building the 64bit then we also want to add the 32bit libflutter.so
            src = "$flutterRoot/bin/cache/artifacts/engine/android-arm-release/flutter.jar"
        }else{
            // If we are building the opposite (32bit), we include the 64bit libflutter.so
            src = "$flutterRoot/bin/cache/artifacts/engine/android-arm64-release/flutter.jar"
        }
        copy {
            from zipTree(src)
            include 'lib/*/libflutter.so'
            into "src/main/jniLibs/"
            eachFile {
                it.path = it.path.replaceFirst("lib/", "")
            }
        }
    }
}

更新:デバイスでこのAPKを実行しようとすると失敗するため、実行可能なソリューションではありません。 エラーは「DartVMの初期化中にエラーが発生しました:スナップショットは現在のVM構成と互換性がありません:
スナップショットには 'product use_bare_instructions no- "asserts" causal_async_stacks arm-eabisoftfp'が必要です
しかし、VMには 'product use_bare_instructions no- "asserts" causal_async_stacks arm64-sysv' "があります

ええ、わかりました。 これは、ターゲットアーチのAOTスナップショットも含める必要がある可能性があるためです。 そして今、私たちはそれをアセットの下に置いています。アーキテクチャごとのバージョンをlibs下に置いていません。 AOTスナップショットを動作する可能性のあるアーキテクチャ固有のlibsフォルダーに配置できる場合は、そうでない場合は、その理由で.aab形式を使用する必要があります。

とにかくこれを実行して、add2appユースケースの.AARの構築をサポートしたいと思います。 私はそれを突くでしょう。

@dnfieldは、これである程度の成功を収めましたか?

現時点でプラグイン部分を処理しています。 Android Xの問題を修正するために、その一部に優先順位を付けようとしていますが、さらにいくつかの問題が発生するはずです。

@gerryhighと私はこれを調べていました。 私の最後の返信は無視してください。 問題は、libflutter.soが64ビットに含まれていないという事実だけですが、AOTの場合、ビルドプロセスを2回実行する必要があります。1回は32ビット用、もう1回は64ビット用です。 次に、アプリケーションアセットに2セットのコンパイル済みDartコードと、2つのバージョンのlibflutter.soを取得します。 最終的な目標は、Flutterのコンパイルタスクをセットアップして、2つの別々のビルドステップを実行し、APKを自動的にセットアップすることだと思います。

ただし、現時点での唯一の解決策は、ビルドを2回実行し、複数のAPKをPlayストアにアップロードすることです。

flutter build apk --release --target-platform=android-arm
flutter build apk --release --target-platform=android-arm64

これは、分割APKを有効にすることでより適切に達成できます。 詳細については、 https

@slightfootはい、これは私のコメントで言及されている限り、これまでに見つけた最良の解決策ですhttps://github.com/flutter/flutter/issues/18494#issuecomment -477502287

@slightfoot私が正しく理解していれば、ユニバーサルAPKを構築することはできません。一部のコードはアセットフォルダーにあり、libフォルダーとしてターゲットアーキテクチャに従ってファイルを分割することはできませんか?

アーキテクチャごとに作成されたスナップショットは異なります。 エンジンlibflutter.soをコピーするだけで、スナップショットのアーキテクチャがフラッターエンジンのアーキテクチャと一致しない場合、スナップショットをロードできなくなります。
したがって、現在、スナップショットファイルを分離し、すべてのアーキテクチャのスナップショットファイルを含めない限り、すべてのアーキテクチャを含むユニバーサルapkを構築する方法はありません。

なぜこれが問題になるのか、私は少し混乱しています。

デバッグビルドは、x86_64、x86、armeabi-v7a、およびarm64-v8aでlibflutter.soを作成します。

リリースビルドはまったく同じように動作するはずです。

AGP(Android Gradleプラグイン)には、アーキテクチャを除外する機能がすでに含まれているため、ユーザーがリリースビルドでそれを実行したい場合は、build.gradleを変更できます。

@eseidel @dnfieldこれがAndroidアプリバンドルによって解決されるとは思いません。これらはまだデフォルトのAndroid出力ではなく、IDEから実行すると、apksがかなりの期間使用されると確信しています。

Playストアがデバイスに配信するアーキテクチャを除外できるため、Flutterにlibflutter.soのすべてのアーキテクチャを含める必要があるもう1つの理由はAABです。

@athornzの問題は、 libflutter.soなく、dartコードをAOT snapshotコンパイルすることです。デバッグビルドにはDart VMが含まれているため、すべてのdartコードはVM上でJITを実行します。 、ただし、リリースビルドは、dartコードをスナップショットにコンパイルし、そのスナップショットをアセットフォルダーに配置します。 理想的には、スナップショットをアーキテクチャごとにコンパイルし、 libflutter.soと並べて配置する必要がありますが、現時点ではそうではありません。 したがって、すべてのアーキテクチャにlibflutter.soを含めることができますが、スナップショットは、コンパイルされたアーキテクチャにのみ機能します。

この問題を修正する計画はありますか?

Google Playストアは、2019年8月1日以降に64ビットサポートを提供するようデベロッパーに依頼しています。

https://android-developers.googleblog.com/2019/01/get-your-apps-ready-for-64-bit.html

64ビット要件:開発者にとっての意味
2019年8月1日以降:
_Google Playに公開する場合、32ビットバージョンに加えて64ビットバージョンを提供するには、ネイティブコードを含むすべての新しいアプリとアプリのアップデートが必要です。_
拡張機能:Google Playは、2021年8月まで、Unity5.6.6以前を使用する既存のゲームに対する32ビットのみのアップデートを引き続き受け入れます。
2021年8月1日から
Google Playは、64ビット対応デバイスで64ビットバージョンのないアプリの提供を停止します。つまり、それらのデバイスのPlayストアでは利用できなくなります。
これには、Unity5.6.6以前で構築されたゲームが含まれます。

@trevorwangは、すでに64ビットをビルドして32ビットと一緒にPlayストアにアップロードできます。 だからそれは問題ではありません。

@slightfoot別の64ビットAPKを作成してGooglePlayにアップロードする必要があるということですか?

ご存知のように、GooglePlayは中国本土ではご利用いただけません。 すべてのプラットフォームをサポートするには、ユニバーサルAPKをお勧めします。

@trevorwangかなり。 これが私のやり方ですhttps://github.com/flutter/flutter/issues/18494#issuecomment-477502287

分割されたものはgradfleファイルでは機能しません。 build.gradleファイルの1つで何かをしなければならないので、flutterはさまざまなアーキテクチャをコンパイルする方法を知っています。 または、グーグルプレイは2番目のコンパイルを拒否します。

ありがとう@ edTheGuy00

しかし、中国市場向けのすべてのabisを含むユニバーサルAPKが本当に必要です。

@trevorwangは、ターゲットごとに構築し、各APKがどのアーキテクチャ用であるかを明示的に

64ビットの制限は、GooglePlayストアの制限にすぎません。 armeabi-v7aのみAPKをデプロイでき、誰でもアプリを実行できます。

アーキテクチャごとに個別のAPKを構築することは回避策であり、すべての人にとって確実に解決策ではありません。

Google Play 64ビットの制限が有効になると、この問題はほとんどのFlutter開発者に影響を与えるため、1つのapk /バンドル内で複数のアーキテクチャを可能にするソリューションが本当に必要です。

簡単なリマインダー

Flutterチームは、GitHubの問題に関する「賛成」の数を優先順位のガイドとして使用します。

この問題は優先度が高いはずだと思います。

@gerryhigh@slightfootの仕事に感謝ます

既存のアプリにフラッターを追加し、次の回避策でこの問題を修正しました。
_これをホストプロジェクトのアプリモジュールに追加してください。_

これはデバッグモードのスクリプトです。リリースに応じて変更してください。

project.afterEvaluate {
    assembleDebug.doLast {
        def flutterRoot = System.getenv("FLUTTER_HOME")
        def archTypes = ["arm", "arm64"]
        archTypes.forEach { item ->
            copy {
                from zipTree("$flutterRoot/bin/cache/artifacts/engine/android-$item/flutter.jar")
                include 'lib/*/libflutter.so'
                into "$buildDir/intermediates/jniLibs/debug/"
                eachFile {
                    it.path = it.path.replaceFirst("lib/", "")
                }
            }
        }
    }
}

最近の進展はありますか?

欲しかったのでやったこと

  • アーキテクチャごとに個別のapk
  • versionCodeを手動で変更する必要はありません
  • 単一のコマンドを実行してapksを生成します
  1. これをgradleに追加しました。 versionCodeの最後に1または2が追加されるため、バージョン1004はarmの場合は10041になり、arm64の場合は10042になります。
ext.platformCodes = ['android-arm': 1, 'android-arm64' : 2]
android.applicationVariants.all { variant ->
    variant.outputs.each { output ->
        int code = 0
        if (project.hasProperty('target-platform')) {
            code = project.ext.platformCodes.get(project.property('target-platform'))
        }
        output.versionCodeOverride = variant.versionCode * 10 + code
    }
}
  1. apkを生成するには、より長いターミナルコマンド(スクリプトに入れることができます)を使用します。 ビルドを2回実行し、最後にapkのコピーを作成します。
flutter clean; flutter build apk --release --target-platform=android-arm; mv build/app/outputs/apk/release/app-release.apk build/app/outputs/apk/release/app-release-arm32.apk; flutter build apk --release --target-platform=android-arm64; mv build/app/outputs/apk/release/app-release.apk build/app/outputs/apk/release/app-release-arm64.apk;

お役に立てれば。

だから、これは私も抱えている問題です..私はapkの代わりにアプリバンドルを構築しています、そしてそれをグーグルにアップロードしているとき、それは私に警告を与え、私にそれをアルファテストさせません。

私はそれを行うためにcodemagicを使用していますが、それに署名してバンドルに入れる方法はありますか? またはcodemagicを使用してドットを付けますか?

まったく存在してはいけないと思っていたのと同じ問題に直面しています。

なぜこれがマイルストーン「目標」にあるのですか。

P2:これらは、今後数年間で修正する価値があると私たちが考えるタスクです。 これには、幅広い消費者向けアプリの完全な出荷を妨げる可能性があると特定された問題、正確性の問題、および磨きと品質に関連するバグが含まれます。 このマイルストーンの日付は完全に任意であり、マイルストーンを適切に並べ替えることを目的としています。

これはすでに重大な問題であり、Googleが64ビットの制限を施行すると、今年後半に本格的なショーストッパーになるでしょう。

私はこれにマイルストーンをぶつけました。 まだ確固たる日付はありません。

明確にするために:今日の新しいガイドラインに準拠することは可能ですが、困難です。 それをもっと簡単にしたいのです。

したがって、手動でアプリをビルドする限り、 @ andreidiaconuメソッドが機能しました。

しかし、私はcodemagicを使用してビルドとデプロイを行ってきました。

したがって、これは無駄です。Flutterはこれを構築する必要があります。

現時点では、それが複雑であるかどうかは個人的には気にしません。 複雑な場合は、スクリプトによって自動化されます。 問題は、それが可能かどうか、そしてGoogle PlayConsoleが私に警告する理由です。

このリリースは、GooglePlayの64ビット要件に準拠していません
次のAPKまたはAppBundleは64ビットデバイスで使用できますが、32ビットのネイティブコードしかありません:6。
2019年8月1日以降、すべてのリリースはGooglePlayの64ビット要件に準拠している必要があります。
アプリに64ビットと32ビットのネイティブコードを含めます。 Android App Bundle公開形式を使用して、各デバイスアーキテクチャが必要なネイティブコードのみを受信するように自動的に設定します。 これにより、アプリ全体のサイズが大きくなるのを防ぐことができます。

異なるバージョンコードを必要とするソリューションは必要ありません。Androidアプリバンドル(AAB)で機能するソリューションが必要です。

警告
このリリースは、GooglePlayの64ビット要件に準拠していません

次のAPKまたはAppBundleは64ビットデバイスで使用できますが、32ビットのネイティブコードしかありません:3。

解決策はありますか?

私はこれにマイルストーンをぶつけました。 まだ確固たる日付はありません。

明確にするために:今日の新しいガイドラインに準拠することは可能ですが、困難です。 それをもっと簡単にしたいのです。

ドキュメントは、apkとappバンドルの両方でこれを行う方法の説明で更新する必要がありますか? これまでに見たのは、どこに配置すればよいか正確にはわからない一連のコードと構成だけです。 私はおそらくいくつかの試行錯誤でそれを理解することができましたが、それは理想的ではありません。

同じ問題

@gerryhighと@slightfootの仕事に

既存のアプリにフラッターを追加し、次の回避策でこの問題を修正しました。
_これをホストプロジェクトのアプリモジュールに追加してください。_

これはデバッグモードのスクリプトです。リリースに応じて変更してください。

project.afterEvaluate {
    assembleDebug.doLast {
        def flutterRoot = System.getenv("FLUTTER_HOME")
        def archTypes = ["arm", "arm64"]
        archTypes.forEach { item ->
            copy {
                from zipTree("$flutterRoot/bin/cache/artifacts/engine/android-$item/flutter.jar")
                include 'lib/*/libflutter.so'
                into "$buildDir/intermediates/jniLibs/debug/"
                eachFile {
                    it.path = it.path.replaceFirst("lib/", "")
                }
            }
        }
    }
}

この解決策/回避策は最も有望に見えます、 @ trevorwangに感謝し

これはおそらくあなたの問題を解決しないことに注意してください-以下を参照してください

@trevorwangの回答と@noinskitの提案のおかげで、リリースビルドに64ビットのネイティブライブラリを含めることができましたが、以下に示す./android/app/build.gradle少し追加しました。
ここでファイル全体を表示することもでき

afterEvaluate {
    mergeReleaseJniLibFolders.doLast {
        def archTypes = ["arm-release", "arm64-release"]
        archTypes.forEach { item ->
            copy {
                from zipTree("$flutterRoot/bin/cache/artifacts/engine/android-$item/flutter.jar")
                include 'lib/*/libflutter.so'
                into "$buildDir/intermediates/jniLibs/release/"
                eachFile {
                    it.path = it.path.replaceFirst("lib/", "")
                }
            }
        }
    }
}

@SPodjasekありがとう! 似たようなものにたどり着きました。 私の場合、スニペットのassembleReleasemergeReleaseJniLibFoldersに変更する必要があります。そうしないと、余分な* .soファイルが「intermediates / ...」の下に表示されますが、最終的なapkには変更されません。

@noinskit以前の解決策はエラーが発生しやすいようです。 flutter clean実行した後、32ビットライブラリのみでaabを生成しました。 assembleReleasemergeReleaseJniLibFolders置き換えることは、ビルドを真にクリーンアップした後でも機能するようです。

@SPodjasek他のオプションを微調整する必要がありますか?

これが私のapp.gradleです

def flutterRoot = localProperties.getProperty('flutter.sdk')
if (flutterRoot == null) {
    throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
}

afterEvaluate {
    mergeReleaseJniLibFolders.doLast {
        def archTypes = ["arm-release", "arm64-release"]
        archTypes.forEach { item ->
            copy {
                from zipTree("$flutterRoot/bin/cache/artifacts/engine/android-$item/flutter.jar")
                include 'lib/*/libflutter.so'
                into "$buildDir/intermediates/jniLibs/release/"
                eachFile {
                    it.path = it.path.replaceFirst("lib/", "")
                }
            }
        }
    }
}

私のintermediate / jniLibs / release / arm64-v8aディレクトリとarmeabi-v7aディレクトリの両方に期待どおり

これがスクリーンショットです

flutter

@ function1983ここで私の完全なbuild.gradleを見ることができます
私のフラッターバージョンの時点で:

[✓] Flutter (Channel beta, v1.5.4, on Linux, locale pl_PL.UTF-8)
    • Flutter version 1.5.4 at .../development/flutter
    • Framework revision b593f5167b (2 weeks ago), 2019-04-22 07:51:33 -0700
    • Engine revision ca31a7c57b
    • Dart version 2.3.0 (build 2.3.0-dev.0.1 cf4444b803)

[✓] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
    • Android SDK at .../Android/Sdk
    • Android NDK location not configured (optional; useful for native profiling support)
    • Platform android-28, build-tools 28.0.3
    • Java binary at: .../development/android-studio/jre/bin/java
    • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1343-b16-5323222)
    • All Android licenses accepted.

[✓] Android Studio (version 3.4)
    • Android Studio at .../development/android-studio
    • Flutter plugin version 35.2.1
    • Dart plugin version 183.6270
    • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1343-b16-5323222)

@SPodjasekのソリューションを使用して、64ビットバージョンと32ビットバージョンの両方を含むappbundleを構築しようとしています。 正常にビルドされ、Google Play Consoleにアップロードでき、32ビットと64ビットの両方の電話にインストールできます。 しかし、何らかの理由でandroid-arm64デバイスで起動するとアプリがクラッシュします(テストしていた古い32ビットのAndroidフォンでも動作するようです)。

64ビットデバイスで発生するエラーは次のとおりです。

中止メッセージ: '[ FATAL:flutter / runtime / dart_vm.cc (416)] Dart VMの初期化中にエラーが発生しました:スナップショットは現在のVM構成と互換性がありません:スナップショットには' product use_bare_instructions no- "asserts" causal_async_stacks arm-eabisoftfpが必要です'しかし、VMには' product use_bare_instructions no- "asserts" causal_async_stacksarm64-sysv 'があります

私に何ができるかわからない...今のところ64ビットデバイスのみをサポートすることに固執する必要があるかもしれません。

@Torruntのエラーは、エンジンが32ビットのAOTスナップショットを

ストアがこれらを正しく分割できるように、両方を備えたAABを作成できるように取り組んでいます。

使用@SPodjasekこれは15.7メガバイトに11.1メガバイトから私のアプリ-release.apkファイルサイズを増加しました

使用@SPodjasekこれは15.7メガバイトに11.1メガバイトから私のアプリ-release.apkファイルサイズを増加しました

はい、32ビットと64ビットのlibflutter.soが強制的に含まれているためです。 それが必要ない場合は、現在のデフォルトを維持して32ビットのみを含め、フラッターチームがこれを適切に処理するのを待ちます。

いくつかの可能性があるようです:

  • フラッターチームが32対64のアーキテクチャを解決するまで待って、GooglePlayストアにフラッタービルドを再度受け入れさせます
  • 使用するAndroidデバイスを32ビットのみに制限する必要があるため、フラッターアプリは32ビットデバイスでのみ実行されます
  • Playストアで64ビットを強制しないようにGoogleを説得する必要があります。 (32ビットと64ビットの違いは何だろうか、大きな数字のようなものですか?)
  • 32個のアプリを64ビットデバイスにインストールしますが、Playストアにはインストールしません...

--target-platformを使用してandroid-armandroid-arm64別々にビルドし、2つのAPKをアップロードする場合に注意してください。
一部のプラグインは両方を対象とする可能性のあるネイティブライブラリを使用し、flutterはライブラリフォルダをフィルタリングしないため、「32ビット」APKは実際には引き続きarm64も対象とし、libflutter.soが存在せず、AOTスナップショットが存在するためクラッシュすることに注意してください。 armv7用に構築されています。

そのため、build.gradleファイルでターゲットのabiを実際に明示的にフィルタリングする必要があります。

flutter build apk --target-platform ...は論理的にこのフィルタリングを行うべきだと思います。

@SPodjasekのソリューションを使用すると、 arm-eabiarm64-sysv一致についてエラーが発生しました。 私にとってうまくいった最善の解決策は、これがすべて解決されるまで、当面は32ビットで構築することだと思います( @swavkulinskiの解決策はこちら):

appレベルでbuild.gradle

android {
    // ...
    buildTypes {
        release {
            // ...
            ndk {
                abiFilters "armeabi-v7a"
            }
        }
    }
}

主題からの問題の要約-armeabi-v7aとarm64-v8aの両方に対してそのようなAPKを構築することはできません。 FlutterはABIに依存するAOTスナップショットを使用するため、APKで可能な解決策は、複数のAPKビルドを使用することだけです。
解決策はAppBundleを使用することですが、これには今のところいくつかの問題もあります(#31922)。
#32787がマージされた後、アプリバンドルを使用できるようになりました。

Android Studioを介してAndroidアプリバンドルを生成するときに、フレーバーとターゲットファイル(たとえば、-t lib / another_main.dart)を設定するにはどうすればよいですか? oo

これは、 https://github.com/flutter/flutter/pull/32787がマージされた後、 flutter build appbundleを介してサポートされます

@swavkulinskiどのようにapksをプレイストアにリリースしますか?

当時はまだ可能でした。 ここで、64ビットに制限する必要があります。 32ビットのみのサードパーティのNDKライブラリによってロックダウンされました。

@blasten
これにより、 flutter build apk --releaseサポートも追加されますか? または、長期的にはアプリバンドルを優先してAPKのサポートを段階的に廃止する予定ですか? 私はファットAPKの比較的シンプルさがとても好きです。

@zimmi正解です。 アプリバンドルは今後の道であるはずです。 必要に応じて、引き続きflutter build apk --release使用できます。 AABと比較してファットAPKの方が簡単なのは何ですか?

AABと比較してファットAPKの方が簡単なのは何ですか?

AABはインストールファイルではありません。 Android自体はそれを使用できません。 これは、GooglePlayストア専用のファイル形式です。 したがって、次の場合にapkが必要です。

  • デバイスに直接インストールします。
  • アプリを直接配布します。
  • GooglePlayストアを除く他のアプリマーケットを介して配布します。 (amazonとすべての中国)。

そうですか。 背景をありがとう。

また、 bundletoolを使用してAABからAPKを抽出できます。

@blasten
確認ありがとう!
単純さのコメントについて: @audkarが言ったこと。 また、AABの場合、開発者は、資産の欠落によって引き起こされる潜在的な障害シナリオについて考える必要があります。 考えられるすべてのデバイス構成でのテストは難しいため、これらの障害が発生した場合は、本番環境である可能性があります。

アプリのサイズは、その安心のために喜んで支払う価格かもしれません。

この問題よりも、それぞれのアプローチのメリットについて議論するのに適した場所があると確信していますが、それを脱線させたくはありません。

/ cc @jonahwilliams build apkファットAPKをサポートする必要があるかもしれません。
build apkのデフォルトも変更する必要がありますか?

ファットapkサポートは間違いなく必要です。 アプリバンドルではまだ機能しないツール(ベータ分布など)がたくさんあります。

flutter build appbundleは現在マスターになっていますが、任意の人が試してみたいですか?

build apkのプラットフォームのリストをサポートするためにいくつかの議論があったので、次のようにすることができます: flutter build apk --target-platform android-arm,android-arm64

@blastenマスターチャネルに切り替え、アップグレードしてappbundleをビルドしましたが、うまく機能しました。 次に、それをPlay Consoleにアップロードすると、すべての警告が消えます。 (macOS 10.14.4)

素晴らしい! 変更を加えた後、今夜ビルドをコンパイルします。

バンドルが機能していないようです。ダウンロードするとアプリがクラッシュします。

Issue: java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.mattetti.sounds/com.mattetti.sounds.MainActivity}: java.lang.ClassNotFoundException: Didn't find class "com.mattetti.sounds.MainActivity" on path: DexPathList[[zip file "/data/app/com.mattetti.sounds-ewwlQg0QphABpwu8t14HWA==/base.apk", zip file "/data/app/com.mattetti.sounds-ewwlQg0QphABpwu8t14HWA==/split_config.arm64_v8a.apk", zip file "/data/app/com.mattetti.sounds-ewwlQg0QphABpwu8t14HWA==/split_config.xxhdpi.apk"],nativeLibraryDirectories=[/data/app/com.mattetti.sounds-ewwlQg0QphABpwu8t14HWA==/lib/arm64, /data/app/com.mattetti.sounds-ewwlQg0QphABpwu8t14HWA==/base.apk!/lib/arm64-v8a, /data/app/com.mattetti.sounds-ewwlQg0QphABpwu8t14HWA==/split_config.arm64_v8a.apk!/lib/arm64-v8a, /data/app/com.mattetti.sounds-ewwlQg0QphABpwu8t14HWA==/split_config.xxhdpi.apk!/lib/arm64-v8a, /system/lib64]]

com.mattetti.sounds.MainActivityがバンドルに含まれていないようですか?

理由がわからないのですが、なぜ削除されたのかを確認するにはどうすればよいですか?

@mattetti Flutterモジュールを使用していMainActivity拡張FlutterActivity

@blasten
これが私の依存関係です

environment:
  sdk: ">=2.2.2 <3.0.0"

dependencies:
  flutter:
    sdk: flutter
  rxdart: ^0.22.0
  shared_preferences: ^0.5.2
  http: ^0.12.0
  cached_network_image: ^0.8.0
  url_launcher: ^5.0.2

  # The following adds the Cupertino Icons font to your application.
  # Use with the CupertinoIcons class for iOS style icons.
  cupertino_icons: ^0.1.2

dev_dependencies:
  flutter_test:
    sdk: flutter
  flutter_launcher_icons: "^0.7.0"

dependency_overrides:
  # requried for flutter_icons at this point
  image: 2.0.7

しかし、アプリのパッケージの名前を変更したのに、 MainActivity.javaファイルへのパスを変更しなかったことにも気づきました。これはまだandroid/app/src/main/java/com/example/old_name/ある可能性があります。 明日は、パスを変更して別のバンドルをプッシュしようとします。

こんにちは@ blasten

[  +48 ms] FAILURE: Build failed with an exception.
[   +3 ms] * What went wrong:
[        ] Failed to capture snapshot of input files for task ':app::flutter:package:packLibsDevRelease' property
'rootSpec$2$1' during up-to-date check.
[        ] > java.io.IOException: The filename, directory name, or volume label syntax is incorrect
[        ] * Try:
[        ] Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log
output. Run with --scan to get full insights.
[        ] * Get more help at https://help.gradle.org
[        ] Deprecated Gradle features were used in this build, making it incompatible with Gradle 5.0.
[        ] See https://docs.gradle.org/4.6/userguide/command_line_interface.html#sec:command_line_warnings
[        ] BUILD FAILED in 1m 28s

私のプロジェクトはフレーバーを使用しており、これは私が実行するコマンドです

flutter build appbundle --flavor stage -t lib/main-stage.dart -v

アプリバンドルにはmapping.txtも含まれますか? Codemagicを介してアプリバンドルをGooglePlay Consoleにアップロードする場合、mapping.txtは含まれないため、apkをアップロードするときにある自動テストやリリース前レポートはありません:(

したがって、質問は次のとおりです。

Flutterチームは8月までに64ビットリリースの更新を行うのでしょうか。それにより、Flutterで作成されたアプリをアップロードして更新できるようになりますか?

@YazeedAlKhalafはい。 今日はflutter build appbundleを使用でき、32ビットと64ビットを含むアプリバンドルを入手できます。

@mattettiは問題を修正しましたか?

@ nohlimapping.txtは機能リクエストのように聞こえます。 新しいバグを自由に報告してください。

@skybur flutter doctorを実行できますか? Flutterプロジェクトはアプリですか、それともモジュールですか?

@blasten私のプロジェクトはアプリです。

これがフラッタードクターの結果です

[√] Flutter (Channel master, v1.6.1-pre.68, on Microsoft Windows [Version 10.0.17763.503], locale en-US)
    • Flutter version 1.6.1-pre.68 at D:\Devs\Flutter\testappbundle\flutter
    • Framework revision d5aae54a28 (22 hours ago), 2019-05-20 23:19:18 -0400
    • Engine revision 301f560bd8
    • Dart version 2.3.1 (build 2.3.1-dev.0.0 b48c8b1d1c)

[√] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
    • Android SDK at D:\AndroidSDK
    • Android NDK location not configured (optional; useful for native profiling support)
    • Platform android-28, build-tools 28.0.3
    • ANDROID_HOME = D:\AndroidSDK
    • ANDROID_SDK_ROOT = D:\AndroidSDK
    • Java binary at: D:\AndroidStudio\jre\bin\java
    • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1136-b06)
    • All Android licenses accepted.

[√] Android Studio (version 3.2)
    • Android Studio at D:\AndroidStudio
    • Flutter plugin version 31.3.1
    • Dart plugin version 181.5656
    • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1136-b06)

[√] VS Code, 64-bit edition (version 1.33.1)
    • VS Code at C:\Program Files\Microsoft VS Code
    • Flutter extension version 3.0.2

[!] Connected device
    ! No devices available

! Doctor found issues in 1 category.

@blasten

flutter build appbundleを使用してストアにアップロードし、Androidフォンから開くことを試みます。
開くとすぐにクラッシュします。

adbログ:
05-22 09:40:52.404 27305 27305 E flutter : [ERROR:flutter/runtime/dart_vm_data.cc(19)] VM snapshot invalid and could not be inferred from settings. 05-22 09:40:52.404 27305 27305 E flutter : [ERROR:flutter/runtime/dart_vm.cc(241)] Could not setup VM data to bootstrap the VM from. 05-22 09:40:52.404 27305 27305 E flutter : [ERROR:flutter/runtime/dart_vm_lifecycle.cc(89)] Could not create Dart VM instance. 05-22 09:40:52.404 27305 27305 F flutter : [FATAL:flutter/shell/common/shell.cc(218)] Check failed: vm. Must be able to initialize the VM. 05-22 09:40:52.404 27305 27305 F libc : Fatal signal 6 (SIGABRT), code -6 in tid 27305 (tform.atomicdex) 05-22 09:40:52.432 27339 27339 I crash_dump64: obtaining output fd from tombstoned 05-22 09:40:52.433 1417 1417 I /system/bin/tombstoned: received crash request for pid 27305 05-22 09:40:52.434 27339 27339 I crash_dump64: performing dump of process 27305 (target tid = 27305) 05-22 09:40:52.434 27339 27339 F DEBUG : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 05-22 09:40:52.434 27339 27339 F DEBUG : Build fingerprint: 'lge/judyln_lao_com/judyln:8.0.0/OPR1.170623.032/190501244a6e5.FGN:user/release-keys' 05-22 09:40:52.434 27339 27339 F DEBUG : Revision: '12' 05-22 09:40:52.434 27339 27339 F DEBUG : ABI: 'arm64' 05-22 09:40:52.434 27339 27339 F DEBUG : pid: 27305, tid: 27305, name: PACKAGE_NAME >>> PACKAGE_NAME <<< 05-22 09:40:52.434 27339 27339 F DEBUG : signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr -------- 05-22 09:40:52.435 27339 27339 F DEBUG : Abort message: '[FATAL:flutter/shell/common/shell.cc(218)] Check failed: vm. Must be able to initialize the VM. 05-22 09:40:52.435 27339 27339 F DEBUG : ' 05-22 09:40:52.435 27339 27339 F DEBUG : x0 0000000000000000 x1 0000000000006aa9 x2 0000000000000006 x3 0000000000000008 05-22 09:40:52.435 27339 27339 F DEBUG : x4 0000000007d0bf68 x5 0000000007d0bf68 x6 0000000007d0bf68 x7 0000000007d0bfd8 05-22 09:40:52.435 27339 27339 F DEBUG : x8 0000000000000083 x9 8644075c81e36b5a x10 00000077ccff6a48 x11 8644075c81e36b5a 05-22 09:40:52.435 27339 27339 F DEBUG : x12 8644075c81e36b5a x13 0000000000000020 x14 ffffffffffffffdf x15 00000077ca27ec68 05-22 09:40:52.435 27339 27339 F DEBUG : x16 00000077ca2732b8 x17 00000077ca205a44 x18 0000000000000048 x19 0000000000006aa9 05-22 09:40:52.435 27339 27339 F DEBUG : x20 0000000000006aa9 x21 0000007fe4fb81b8 x22 00000077b3dffba0 x23 00000077bd29d7a0 05-22 09:40:52.435 27339 27339 F DEBUG : x24 00000077aa79a150 x25 0000000000000000 x26 0000000000000000 x27 0000000000000002 05-22 09:40:52.435 27339 27339 F DEBUG : x28 0000000000000000 x29 0000007fe4fb81a0 x30 00000077ca1aa8e4 05-22 09:40:52.435 27339 27339 F DEBUG : sp 0000007fe4fb8160 pc 00000077ca205a4c pstate 0000000060000000 05-22 09:40:52.436 27339 27339 F DEBUG : 05-22 09:40:52.436 27339 27339 F DEBUG : backtrace: 05-22 09:40:52.436 27339 27339 F DEBUG : #00 pc 0000000000079a4c /system/lib64/libc.so (tgkill+8) 05-22 09:40:52.436 27339 27339 F DEBUG : #01 pc 000000000001e8e0 /system/lib64/libc.so (abort+88) 05-22 09:40:52.436 27339 27339 F DEBUG : #02 pc 000000000001d61c /data/app/PACKAGE_NAME-F-z4qH6HT271dk7M7oI8Uw==/split_config.arm64_v8a.apk (offset 0xea7000)

@Kiruelなぜ人々がアプリバンドルがこの問題を解決していると言い続けるのか、私には非常に不明確です。

アプリバンドルは自動分割APKにすぎず、アセットフォルダーに分割はありません。 したがって、スナップショットは依然として単一のアーキテクチャのみを対象としています。

私はおそらく何かが欠けていますが、私の意見では、現在の唯一の解決策は、gradleファイルに対応するndkフィルタリングを使用して各アーキテクチャのAPKをビルドすることです。 次に、これらの各APKをアップロードします。

APKでこの問題を解決できない場合、アプリバンドルも機能する可能性はありません。

@ndusartそれは本当ではないと思います。 アプリバンドルのドキュメントによると:

res /、lib /、assets /:これらのディレクトリは通常のAPKのディレクトリと同じです。 アプリバンドルをアップロードすると、Google Playはこれらのディレクトリを検査し、ファイルパスを維持しながら、ターゲットデバイスの構成を満たすファイルのみをパッケージ化します。

したがって、それはどういうわけか資産を分割することができます。

@jerekselこれは、これらのディレクトリがアプリバンドルでもapkとまったく同じように機能し、 assets/フォルダが分割されていないことを示しています。 これは、アプリケーション内の非常に特定のファイル構造にアセットを格納するために使用されます。OSなどによって解析されることを意図したものではありません。

間違っている場合は、ターゲットABIに基づいてこのフォルダーを分割する方法を教えてください。

そして、この引用は私が言っていることを確認するだけです。APKでこれが現在不可能な場合、これらのフォルダーは両方の方法でまったく同じように機能するため、アプリバンドルを使用してこれを行うことはできません。

アセットが自分で分割されるのを見たことがありませんが、これを見つけました:

https://medium.com/google-developer-experts/exploring-the-android-app-bundle-ca16846fa3d7

Assets.pb —これは、アプリケーションアセットのリソーステーブルに相当し、アプリケーションでアセットを使用している場合にのみ存在します。

つまり、Android Studioはアセットを分割しませんが、アプリバンドル自体がそれをサポートしていると思います。

公式文書はありますか? それはすべて非常に信頼できないようです。
次の記事https://medium.com/mindorks/android-app-bundle-aab-98de6dad8ba8には、 assets/内のフォルダーの名前にサフィックスを追加して分割できると記載されていますが、現在はこれしかできません。言語で行われる。

それでも、これはまだ安定していないようであり、現時点で基づくべきではありません。 可能であれば、VMスナップショットをlib/フォルダーにデポートするか、 flutterコマンドに特定のターゲット用のAPKを構築するための完全な機能が付属している必要があります(これについてはまだ作業が必要です)多くの人がアクセスできるようにするため)、準備ができたらアプリバンドルの作成を遅らせます。

@blasten

マスターチャンネルに切り替え、アップグレードして、appbundleをビルドしました。 残念ながら、次のログキャットでグーグルプレイストアからダウンロードした後、アプリが追いかけます

2019-05-22 09:42:14.824 6995-6995/? E/flutter: [ERROR:flutter/runtime/dart_vm_data.cc(19)] VM snapshot invalid and could not be inferred from settings.
2019-05-22 09:42:14.824 6995-6995/? E/flutter: [ERROR:flutter/runtime/dart_vm.cc(241)] Could not setup VM data to bootstrap the VM from.
2019-05-22 09:42:14.824 6995-6995/? E/flutter: [ERROR:flutter/runtime/dart_vm_lifecycle.cc(89)] Could not create Dart VM instance.
2019-05-22 09:42:14.824 6995-6995/? A/flutter: [FATAL:flutter/shell/common/shell.cc(218)] Check failed: vm. Must be able to initialize the VM.

flutter build appbundleは現在マスターになっていますが、任意の人が試してみたいですか?

build apkのプラットフォームのリストをサポートするためにいくつかの議論があったので、次のようなことができます: flutter build apk --target-platform android-arm,android-arm64

@blasten

マスターチャンネルに切り替え、アップグレードして、appbundleをビルドしました。 残念ながら、次のログキャットでグーグルプレイストアからダウンロードした後、アプリが追いかけます

2019-05-22 09:42:14.824 6995-6995/? E/flutter: [ERROR:flutter/runtime/dart_vm_data.cc(19)] VM snapshot invalid and could not be inferred from settings.
2019-05-22 09:42:14.824 6995-6995/? E/flutter: [ERROR:flutter/runtime/dart_vm.cc(241)] Could not setup VM data to bootstrap the VM from.
2019-05-22 09:42:14.824 6995-6995/? E/flutter: [ERROR:flutter/runtime/dart_vm_lifecycle.cc(89)] Could not create Dart VM instance.
2019-05-22 09:42:14.824 6995-6995/? A/flutter: [FATAL:flutter/shell/common/shell.cc(218)] Check failed: vm. Must be able to initialize the VM.

flutter build appbundleは現在マスターになっていますが、任意の人が試してみたいですか?
build apkのプラットフォームのリストをサポートするためにいくつかの議論があったので、次のようなことができます: flutter build apk --target-platform android-arm,android-arm64

私はまだログを持っていませんが、同じ問題があります。

@skyburで発生していた問題は、 https://github.com/flutter/flutter/issues/33119に関連している可能性がありこのパッチで修正する必要があります。

@ndusart
ええ、あなたは正しいです。 私はbundletoolのソースコードを確認しましたが、アセットの分割は実際には言語によってのみ行われます。
https://github.com/google/bundletool/blob/master/src/main/java/com/android/tools/build/bundletool/splitters/ModuleSplitter.java#L286

これが私の解決策でした:

  1. app gradle
splits {
        // Configures multiple APKs based on ABI.
        abi {
            // Enables building multiple APKs per ABI.
            enable true
            // By default all ABIs are included, so use reset() and include to specify that we only
            // want APKs for armeabi-v7a and arm64-v8a.

            // Resets the list of ABIs that Gradle should create APKs for to none.
            reset()

            // Specifies a list of ABIs that Gradle should create APKs for.
            include "armeabi-v7a", "arm64-v8a"

            // Specifies that we do not want to also generate a universal APK that includes all ABIs.
            universalApk false
        }
    }
  1. flutter build apk --release --target-platform=android-arm実行します
  2. app-armeabi-v7a-release.apkをPlayストアにアップロードする
  3. versionCodeインクリメント
  4. flutter build apk --release --target-platform=android-arm64実行します
  5. app-arm64-v8a-release.apkをPlayストアにアップロードする

Google Playストアは、デバイスアーキテクチャに従ってアプリを提供します。 32ビットデバイスは満足しています。64ビットデバイスは満足しています。両方のアーキテクチャに対応しながら、APKサイズが比較的小さいままであることを知って満足しています。

同じAPKに両方のアーキテクチャのサポートを含める場合、アプリのサイズは10MB以上になると予想されます

皆さんに伝えるべき重要なことがあります。 あなたが私が引用する方法を使うならば。 アプリのデバッグを続けたい場合は、設定をコメントアウトする必要があるかもしれません。 GradleビルドがAndroidパッケージの作成に失敗し、数時間スタックしてgradlew clean ...などを作成するというエラーに直面し、最終的にこれをコメントアウトする必要があることがわかりました。

これが誰かが飛び出すのを助けたことを願っています。

flutter build appbundleは現在マスターになっていますが、任意の人が試してみたいですか?

build apkのプラットフォームのリストをサポートするためにいくつかの議論があったので、次のようにすることができます: flutter build apk --target-platform android-arm,android-arm64

flutter build appbundleが機能しています! その設定を追加する必要はなく、コードを実行するだけです。 ただし、コンパイルには少し時間がかかりますが、現在GooglePlayに合格する唯一の方法です。

@Tokenyetは、Playストアからアプリをダウンロードして、 .aabアップロードした後に実行できましたか? この場合、 flutter doctor出力を貼り付けていただけませんか。

@blasten

マスターチャンネルに切り替え、アップグレードして、appbundleをビルドしました。 残念ながら、次のログキャットでグーグルプレイストアからダウンロードした後、アプリが追いかけます

2019-05-22 09:42:14.824 6995-6995/? E/flutter: [ERROR:flutter/runtime/dart_vm_data.cc(19)] VM snapshot invalid and could not be inferred from settings.
2019-05-22 09:42:14.824 6995-6995/? E/flutter: [ERROR:flutter/runtime/dart_vm.cc(241)] Could not setup VM data to bootstrap the VM from.
2019-05-22 09:42:14.824 6995-6995/? E/flutter: [ERROR:flutter/runtime/dart_vm_lifecycle.cc(89)] Could not create Dart VM instance.
2019-05-22 09:42:14.824 6995-6995/? A/flutter: [FATAL:flutter/shell/common/shell.cc(218)] Check failed: vm. Must be able to initialize the VM.

flutter build appbundleは現在マスターになっていますが、任意の人が試してみたいですか?
build apkのプラットフォームのリストをサポートするためにいくつかの議論があったので、次のようなことができます: flutter build apk --target-platform android-arm,android-arm64

Playストア(appbundleとして作成)からアプリを実行しようとした場合も、まったく同じです。 これを解決するためにどのログが必要ですか?

これは役に立ちます:

  1. https://developer.android.com/studio/command-line/bundletoolからbundletoolをダウンロードします
  2. flutter build appbundle実行します(フラグを渡すかどうか、またはGradleスクリプトに_custom_変更を加えたかどうかを示してください)
  3. bundletool build-apks --bundle=build/app/outputs/bundle/release/app.aab --output=out.apksを実行してAPKセットを抽出します。
  4. unzip -l out.apksを実行し、最後にflutter doctorを実行して、両方のコマンドからの出力をコメントに貼り付けます。

もし可能なら:

bundletoolとAPKセットを使用して、デバイスでローカルにテストします。 これらはステップです、あなたのコメントにlogcatを貼り付けてください。

bundletoolを使用してローカルでテストしただけですが、問題を再現できません。

@blasten以前のエラーは修正されましたが、別のエラーが発生しました。 これは私のプロジェクトの何かが原因だと思います。 これをデバッグする方法はありますか?

[+6084 ms] Failed to execute aapt
[  +17 ms] com.android.ide.common.process.ProcessException: Failed to execute aapt
[   +1 ms]      at com.android.builder.core.AndroidBuilder.processResources(AndroidBuilder.java:809)
[   +1 ms]      at com.android.build.gradle.internal.res.LinkAndroidResForBundleTask.taskAction(LinkAndroidResForBundleTask.kt:128)
[   +1 ms]      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[   +1 ms]      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[   +1 ms]      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[        ]      at java.lang.reflect.Method.invoke(Method.java:498)
[        ]      at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
[   +4 ms]      at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:46)
[   +1 ms]      at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39)
[        ]      at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26)
[   +3 ms]      at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:788)
[  +29 ms]      at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:755)
[   +1 ms]      at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:124)
[   +1 ms]      at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
[   +2 ms]      at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
[   +1 ms]      at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199)
[   +9 ms]      at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110)
[        ]      at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:113)
[        ]      at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:95)
[   +1 ms]      at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:73)
[        ]      at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51)
[   +1 ms]      at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:59)
[        ]      at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
[        ]      at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:59)
[   +5 ms]      at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:101)
[        ]      at org.gradle.api.internal.tasks.execution.FinalizeInputFilePropertiesTaskExecuter.execute(FinalizeInputFilePropertiesTaskExecuter.java:44)
[   +1 ms]      at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:91)
[   +1 ms]      at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:62)
[  +12 ms]      at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:59)
[   +4 ms]      at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
[        ]      at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
[        ]      at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
[        ]      at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.run(DefaultTaskGraphExecuter.java:256)
[        ]      at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
[        ]      at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
[        ]      at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199)
[        ]      at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110)
[   +1 ms]      at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:249)
[   +6 ms]      at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:238)
[        ]      at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.processTask(DefaultTaskPlanExecutor.java:123)
[        ]      at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.access$200(DefaultTaskPlanExecutor.java:79)
[        ]      at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:104)
[   +1 ms]      at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:98)
[   +1 ms]      at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.java:663)
[   +1 ms]      at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.executeWithTask(DefaultTaskExecutionPlan.java:597)
[        ]      at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:98)
[  +14 ms]      at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
[   +1 ms]      at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
[   +4 ms]      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
[   +1 ms]      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
[   +2 ms]      at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
[   +1 ms]      at java.lang.Thread.run(Thread.java:745)
[  +26 ms] Caused by: java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException: com.android.builder.internal.aapt.v2.Aapt2Exception: AAPT2 error: check logs for details
[   +4 ms]      at com.google.common.util.concurrent.AbstractFuture.getDoneValue(AbstractFuture.java:503)
[   +1 ms]      at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:482)
[        ]      at com.google.common.util.concurrent.AbstractFuture$TrustedFuture.get(AbstractFuture.java:79)
[        ]      at com.android.builder.internal.aapt.AbstractAapt.link(AbstractAapt.java:34)
[        ]      at com.android.builder.core.AndroidBuilder.processResources(AndroidBuilder.java:807)
[        ]      ... 51 more
[        ] Caused by: java.util.concurrent.ExecutionException: com.android.builder.internal.aapt.v2.Aapt2Exception: AAPT2 error: check logs for details
[   +1 ms]      at com.google.common.util.concurrent.AbstractFuture.getDoneValue(AbstractFuture.java:503)
[        ]      at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:462)
[        ]      at com.google.common.util.concurrent.AbstractFuture$TrustedFuture.get(AbstractFuture.java:79)
[        ]      at com.android.builder.internal.aapt.v2.QueueableAapt2.lambda$makeValidatedPackage$1(QueueableAapt2.java:166)
[   +4 ms]      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
[   +1 ms]      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
[   +1 ms]      ... 1 more
[   +1 ms] Caused by: com.android.builder.internal.aapt.v2.Aapt2Exception: AAPT2 error: check logs for details
[   +1 ms]      at com.android.builder.png.AaptProcess$NotifierProcessOutput.handleOutput(AaptProcess.java:443)
[   +1 ms]      at com.android.builder.png.AaptProcess$NotifierProcessOutput.err(AaptProcess.java:395)
[        ]      at com.android.builder.png.AaptProcess$ProcessOutputFacade.err(AaptProcess.java:312)
[        ]      at com.android.utils.GrabProcessOutput$1.run(GrabProcessOutput.java:104)
[        ] FAILURE: Build failed with an exception.
[        ] * What went wrong:
[        ] Execution failed for task ':app:bundleProdReleaseResources'.
[        ] > Failed to execute aapt
[        ] * Try:
[        ] Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
[   +5 ms] * Get more help at https://help.gradle.org
[        ] BUILD FAILED in 30s
[ +324 ms] Running Gradle task 'bundleProdRelease'... (completed in 31.5s)

@blastenログのすべての手順に従います。

➜  PROJECT_NAME git:(master) ✗ unzip -l out.apks
Archive:  out.apks
  Length      Date    Time    Name
---------  ---------- -----   ----
 43369811  01-01-1970 01:00   standalones/standalone-armeabi_tvdpi.apk
 43327197  01-01-1970 01:00   standalones/standalone-armeabi_hdpi.apk
 43319503  01-01-1970 01:00   standalones/standalone-armeabi_mdpi.apk
 43320027  01-01-1970 01:00   standalones/standalone-armeabi_ldpi.apk
 43346424  01-01-1970 01:00   standalones/standalone-armeabi_xxhdpi.apk
 43350403  01-01-1970 01:00   standalones/standalone-armeabi_xxxhdpi.apk
 43332970  01-01-1970 01:00   standalones/standalone-armeabi_xhdpi.apk
 50349155  01-01-1970 01:00   standalones/standalone-armeabi_v7a_ldpi.apk
 50348629  01-01-1970 01:00   standalones/standalone-armeabi_v7a_mdpi.apk
 50398968  01-01-1970 01:00   standalones/standalone-armeabi_v7a_tvdpi.apk
 50356358  01-01-1970 01:00   standalones/standalone-armeabi_v7a_hdpi.apk
 50362126  01-01-1970 01:00   standalones/standalone-armeabi_v7a_xhdpi.apk
 50375565  01-01-1970 01:00   standalones/standalone-armeabi_v7a_xxhdpi.apk
 50379553  01-01-1970 01:00   standalones/standalone-armeabi_v7a_xxxhdpi.apk
 50660246  01-01-1970 01:00   standalones/standalone-arm64_v8a_ldpi.apk
 50659718  01-01-1970 01:00   standalones/standalone-arm64_v8a_mdpi.apk
 50710027  01-01-1970 01:00   standalones/standalone-arm64_v8a_tvdpi.apk
 50667415  01-01-1970 01:00   standalones/standalone-arm64_v8a_hdpi.apk
 50673185  01-01-1970 01:00   standalones/standalone-arm64_v8a_xhdpi.apk
 50686641  01-01-1970 01:00   standalones/standalone-arm64_v8a_xxhdpi.apk
 43345757  01-01-1970 01:00   standalones/standalone-x86_mdpi.apk
 43346287  01-01-1970 01:00   standalones/standalone-x86_ldpi.apk
 43396086  01-01-1970 01:00   standalones/standalone-x86_tvdpi.apk
 50690619  01-01-1970 01:00   standalones/standalone-arm64_v8a_xxxhdpi.apk
 43359247  01-01-1970 01:00   standalones/standalone-x86_xhdpi.apk
 43353470  01-01-1970 01:00   standalones/standalone-x86_hdpi.apk
 43372688  01-01-1970 01:00   standalones/standalone-x86_xxhdpi.apk
 43376653  01-01-1970 01:00   standalones/standalone-x86_xxxhdpi.apk
 43340224  01-01-1970 01:00   standalones/standalone-x86_64_ldpi.apk
 43339701  01-01-1970 01:00   standalones/standalone-x86_64_mdpi.apk
 43390033  01-01-1970 01:00   standalones/standalone-x86_64_tvdpi.apk
 43347418  01-01-1970 01:00   standalones/standalone-x86_64_hdpi.apk
    57027  01-01-1970 01:00   splits/base-ldpi.apk
    56501  01-01-1970 01:00   splits/base-mdpi.apk
    61951  01-01-1970 01:00   splits/base-hdpi.apk
    67741  01-01-1970 01:00   splits/base-xhdpi.apk
    81187  01-01-1970 01:00   splits/base-xxhdpi.apk
    85188  01-01-1970 01:00   splits/base-xxxhdpi.apk
   105385  01-01-1970 01:00   splits/base-tvdpi.apk
 43353194  01-01-1970 01:00   standalones/standalone-x86_64_xhdpi.apk
    11313  01-01-1970 01:00   splits/base-ca.apk
    11211  01-01-1970 01:00   splits/base-da.apk
    12040  01-01-1970 01:00   splits/base-fa.apk
    11659  01-01-1970 01:00   splits/base-ja.apk
    12486  01-01-1970 01:00   splits/base-ka.apk
    12511  01-01-1970 01:00   splits/base-pa.apk
    12856  01-01-1970 01:00   splits/base-ta.apk
    11195  01-01-1970 01:00   splits/base-nb.apk
    12001  01-01-1970 01:00   splits/base-be.apk
    11420  01-01-1970 01:00   splits/base-de.apk
    13041  01-01-1970 01:00   splits/base-ne.apk
    12674  01-01-1970 01:00   splits/base-te.apk
 43366615  01-01-1970 01:00   standalones/standalone-x86_64_xxhdpi.apk
    11179  01-01-1970 01:00   splits/base-af.apk
    12151  01-01-1970 01:00   splits/base-bg.apk
    12353  01-01-1970 01:00   splits/base-th.apk
    11228  01-01-1970 01:00   splits/base-fi.apk
    12537  01-01-1970 01:00   splits/base-si.apk
    12551  01-01-1970 01:00   splits/base-hi.apk
    11939  01-01-1970 01:00   splits/base-kk.apk
    11615  01-01-1970 01:00   splits/base-vi.apk
    12059  01-01-1970 01:00   splits/base-mk.apk
    11440  01-01-1970 01:00   splits/base-sk.apk
    11961  01-01-1970 01:00   splits/base-uk.apk
    12344  01-01-1970 01:00   splits/base-el.apk
    11342  01-01-1970 01:00   splits/base-gl.apk
    13334  01-01-1970 01:00   splits/base-ml.apk
    11350  01-01-1970 01:00   splits/base-nl.apk
    11371  01-01-1970 01:00   splits/base-pl.apk
    11311  01-01-1970 01:00   splits/base-sl.apk
    11428  01-01-1970 01:00   splits/base-tl.apk
    11825  01-01-1970 01:00   splits/base-am.apk
    12685  01-01-1970 01:00   splits/base-km.apk
    12615  01-01-1970 01:00   splits/base-bn.apk
    11223  01-01-1970 01:00   splits/base-in.apk
    12832  01-01-1970 01:00   splits/base-kn.apk
    11958  01-01-1970 01:00   splits/base-mn.apk
    12621  01-01-1970 01:00   splits/base-lo.apk
    11425  01-01-1970 01:00   splits/base-ko.apk
    11395  01-01-1970 01:00   splits/base-ro.apk
    11438  01-01-1970 01:00   splits/base-sq.apk
    13612  01-01-1970 01:00   splits/base-fr.apk
    11647  01-01-1970 01:00   splits/base-ar.apk
    11278  01-01-1970 01:00   splits/base-hr.apk
    12447  01-01-1970 01:00   splits/base-mr.apk
    12943  01-01-1970 01:00   splits/base-or.apk
    14244  01-01-1970 01:00   splits/base-sr.apk
    11316  01-01-1970 01:00   splits/base-tr.apk
    11973  01-01-1970 01:00   splits/base-ur.apk
    11308  01-01-1970 01:00   splits/base-bs.apk
    12525  01-01-1970 01:00   splits/base-as.apk
    13704  01-01-1970 01:00   splits/base-es.apk
    11367  01-01-1970 01:00   splits/base-cs.apk
    11222  01-01-1970 01:00   splits/base-is.apk
    11360  01-01-1970 01:00   splits/base-ms.apk
    11323  01-01-1970 01:00   splits/base-et.apk
    11283  01-01-1970 01:00   splits/base-it.apk
    11550  01-01-1970 01:00   splits/base-lt.apk
    14605  01-01-1970 01:00   splits/base-pt.apk
    11377  01-01-1970 01:00   splits/base-eu.apk
    12409  01-01-1970 01:00   splits/base-gu.apk
    11651  01-01-1970 01:00   splits/base-hu.apk
    12048  01-01-1970 01:00   splits/base-ru.apk
    11616  01-01-1970 01:00   splits/base-lv.apk
    11314  01-01-1970 01:00   splits/base-zu.apk
    11260  01-01-1970 01:00   splits/base-sv.apk
    11539  01-01-1970 01:00   splits/base-iw.apk
    11283  01-01-1970 01:00   splits/base-sw.apk
    12110  01-01-1970 01:00   splits/base-hy.apk
 43370609  01-01-1970 01:00   standalones/standalone-x86_64_xxxhdpi.apk
    11904  01-01-1970 01:00   splits/base-ky.apk
    11430  01-01-1970 01:00   splits/base-az.apk
    13395  01-01-1970 01:00   splits/base-my.apk
    11296  01-01-1970 01:00   splits/base-uz.apk
    15398  01-01-1970 01:00   splits/base-zh.apk
    23877  01-01-1970 01:00   splits/base-en.apk
   107757  01-01-1970 01:00   splits/base-armeabi.apk
   134023  01-01-1970 01:00   splits/base-x86.apk
   127969  01-01-1970 01:00   splits/base-x86_64.apk
 42926206  01-01-1970 01:00   splits/base-master.apk
 21480838  01-01-1970 01:00   splits/base-arm64_v8a_2.apk
 17508309  01-01-1970 01:00   splits/base-armeabi_v7a_2.apk
   217751  01-01-1970 01:00   splits/base-armeabi_2.apk
   311771  01-01-1970 01:00   splits/base-x86_2.apk
   308537  01-01-1970 01:00   splits/base-x86_64_2.apk
  7136923  01-01-1970 01:00   splits/base-armeabi_v7a.apk
  7447993  01-01-1970 01:00   splits/base-arm64_v8a.apk
 42926200  01-01-1970 01:00   splits/base-master_2.apk
    16537  01-01-1970 01:00   toc.pb
---------                     -------
1759809847                     129 files
➜  PROJECT_NAME git:(master) ✗ flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel master, v1.6.1-pre.68, on Mac OS X 10.14.5 18F132, locale en-GB)

[✓] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
[✓] iOS toolchain - develop for iOS devices (Xcode 10.2.1)
[!] Android Studio (version 3.3)
    ✗ Flutter plugin not installed; this adds Flutter specific functionality.
    ✗ Dart plugin not installed; this adds Dart specific functionality.
[✓] VS Code (version 1.34.0)
[✓] Connected device (1 available)

! Doctor found issues in 1 category.

@jereksel @ndusart
実際、これはAssets Targetingと呼ばれ、Graphics API、Language&TextureCompressionに基づいてアセット内のディレクトリをターゲット/分割できます。
ここに見られるように: ... / bundletool / model / target / TargetedDirectorySegment.java

AABの現在のflutter@masterは、ローカルで機能します。 bundletoolを使用して、実際のデバイスでテストおよびインストールします。 build.gradleで密度と言語の分割を無効にしたので、 build-apksようになります。

  Length      Date    Time    Name
---------  ---------- -----   ----
  6872466  1970-01-01 01:00   splits/base-arm64_v8a.apk
  6726824  1970-01-01 01:00   splits/base-master.apk
 13289718  1970-01-01 01:00   standalones/standalone-armeabi_v7a.apk
 13594392  1970-01-01 01:00   standalones/standalone-arm64_v8a.apk
  6567785  1970-01-01 01:00   splits/base-armeabi_v7a.apk
      429  1970-01-01 01:00   toc.pb
---------                     -------
 47051614                     6 files

テストラボでテストする私もすべて緑色です。
Playストアがこのバージョンを処理してこのチャンネルをテストするのをまだ待っています。

@Tokenyetは、Playストアからアプリをダウンロードして、 .aabアップロードした後に実行できましたか? この場合、 flutter doctor出力を貼り付けていただけませんか。

Playストアからアプリをダウンロードして実行できます。 [試してみる](https://play.google.com/store/apps/details?id=com.bumbystudio.starry_clock)ことができます。 (編集:おっと、それは動揺していません... PlayStoreから)

以下は、必要に応じて私のflutter doctorです。 お役に立てば幸いです。

[√]フラッター(チャネルマスター、v1.6.1-pre.88、Microsoft Windows [バージョン10.0.17134.765]、ロケールzh-TW)

[√] Androidツールチェーン-Androidデバイス用に開発(Android SDKバージョン28.0.3)
[√] Android Studio(バージョン3.3)
[√] VS Code、64ビット版(バージョン1.30.2)
[!]接続されたデバイス
! 利用可能なデバイスはありません

これは私にとってはうまくいきます!

buildTypes {
リリース {
// TODO:リリースビルド用に独自の署名構成を追加します。
//今のところデバッグキーを使用して署名しているため、 flutter run --release機能します。
signingConfig signingConfigs.debug
}
デバッグ{
ndk {
abiFilters'armeabi-v7a '
}
}
}

@SPodjasekはまだ、ABIに基づいてassets/を分割する必要があります。 これは現在どのように行うことができますか?

デバイスにインストールしましたが、機能していないようです。 私が得たのは
黒いスクリーン。

ありがとう、

プルソサマンラマヌジャム

2019年5月23日木曜日、午後6時43分Tokenyet、 notifications @ github.comは次のように書いています。

@Tokenyethttps ://github.com/Tokenyetアプリをダウンロードできましたか
Playストアから.aabをアップロードした後に実行しますか? これが
場合は、フラッタードクターの出力を貼り付けていただけませんか?

Playストアからアプリをダウンロードして実行できます。 あなたはそれを与えることができます
試してみてください
https://play.google.com/store/apps/details?id=com.bumbystudio.starry_clock

以下は、必要に応じて私のフラッタードクターです。 お役に立てば幸いです。

[√] Flutter(チャネルマスター、v1.6.1-pre.88、Microsoft Windows [バージョン
10.0.17134.765]、ロケールzh-TW)

[√] Androidツールチェーン-Androidデバイス用に開発(Android SDKバージョン
28.0.3)
[√] Android Studio(バージョン3.3)
[√] VS Code、64ビット版(バージョン1.30.2)
[!]接続されたデバイス
! 利用可能なデバイスはありません


このスレッドにサブスクライブしているため、これを受け取っています。
このメールに直接返信し、GitHubで表示してください
https://github.com/flutter/flutter/issues/18494?email_source=notifications&email_token=AAIHDZYY47H6PUQQJYEO4J3PW2J7RA5CNFSM4FFE2B7KYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKT
またはスレッドをミュートします
https://github.com/notifications/unsubscribe-auth/AAIHDZZXV67JCNVJYLVA3WLPW2J7RANCNFSM4FFE2B7A

@ndusart現時点では不可能です。おそらく、 bundletoolで機能リクエストを

@SPodjasekだから、私が言っているのは、この問題はすべて間違った方向に進んでいるということです。

すべての議論は「心配しないでください。アプリバンドルを作成できれば、すべてうまくいくでしょう」で終わっているようですが、現在も近い将来もまったくそうではありません。
フラッターチームが人々にそれがこのように可能であると思わせるのを見るのは少し残念です。

flutterは、分割自体を実行するか、VMスナップショットをlib/フォルダーに移動して分割を機能させることで、分割APKを簡単に構築する方法を提供できるはずです(アプリバンドルも使用できます) )。

要約しましょう:

  1. Flutterはflutter build apk ...介してファットAPKをサポートします。
  2. この機能を_今すぐ_試してみたい場合は、マスターブランチでflutter build appbundleを試してください。 アプリバンドルがユースケースで機能しない場合は、(1)が残りのケースをカバーする必要があります。

さて、 @ blastenマスターコードを調べたところ、スナップショットがlibフォルダーに移動されました。
https://github.com/flutter/flutter/blob/dc28ba8919604ff19ea7cbad8d9400516347b08a/packages/flutter_tools/gradle/flutter.gradle#L470 -L481

つまり、アプリバンドルのサポートを追加するだけではありません。 今はもっとはっきりしています。
問題はアセットフォルダにあると述べられており、この問題とアプリバンドルのサポートはかなり独立しているため、この方向での作業は行われていませんでしたが、少し説明していただければ幸いです。

お疲れ様でした。

@ ndusart- @ blastenは、Androidの埋め込みに変更を加えて、 libフォルダー内のバイナリブロブを検索するようにしました。これにより、間違えない限り、両方のタイプにバンドルできます...

スナップショットがlibに移動された場合、おそらく#30846も修正されますか?

@blasten
マスターチャンネルに切り替え、アップグレードして、appbundleをビルドしました。 残念ながら、次のログキャットでグーグルプレイストアからダウンロードした後、アプリが追いかけます

2019-05-22 09:42:14.824 6995-6995/? E/flutter: [ERROR:flutter/runtime/dart_vm_data.cc(19)] VM snapshot invalid and could not be inferred from settings.
2019-05-22 09:42:14.824 6995-6995/? E/flutter: [ERROR:flutter/runtime/dart_vm.cc(241)] Could not setup VM data to bootstrap the VM from.
2019-05-22 09:42:14.824 6995-6995/? E/flutter: [ERROR:flutter/runtime/dart_vm_lifecycle.cc(89)] Could not create Dart VM instance.
2019-05-22 09:42:14.824 6995-6995/? A/flutter: [FATAL:flutter/shell/common/shell.cc(218)] Check failed: vm. Must be able to initialize the VM.

flutter build appbundleは現在マスターになっていますが、任意の人が試してみたいですか?
build apkのプラットフォームのリストをサポートするためにいくつかの議論があったので、次のようなことができます: flutter build apk --target-platform android-arm,android-arm64

私はまだログを持っていませんが、同じ問題があります。

こっちも一緒。 エラーが発生していました。 マスターをアップグレードしてflutter build appbundle 。 エラーを取り除きましたが、アプリを開くとクラッシュします。

最新のフラッターマスターバージョンを使用して、最新の変更を加えたアプリストアにアプリバンドルをアップロードしてみました。 64ビットエラーはなくなりましたが、アプリがすぐにクラッシュします。

本当に奇妙なのは、以下のコマンドを使用して64ビットバージョンを実行すると正常に動作することです。
flutter build apk --target-platform android-arm64
flutter install api

アプリがアプリストアのappbundleを介してインストールされた場合にのみクラッシュします。 今のところ、appstoreを32ビットapkに戻しました。

gradle.buildに特別なものは何もありません

minSdkVersion 21
targetSdkVersion 28
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
multiDexEnabled true

Flutterを実行しています(チャンネルマスター、v1.6.4-pre.13、Mac OS X 10.14.5 18F132、ロケールen-US)

AppStoreにアップロードする前にこれらのバンドルをテストする方法はありますか? これはGoogleが取り組んでいる既知の問題ですか、それともgradleファイルに変更を加える必要がありますか?

@chitwoob次の手順に従ってください: https

@blastenこの問題とは関係のないバンドルツールの問題が発生しています。

私は得る
エラー:ADBサーバーの起動に失敗しました

走っているとき
build-apks --connected-device --bundle = ./ app.aab --output = ./ my_app.apks --adb

adbが正しくインストールされています。 adb logcatを試してみると、正常に動作します。

長いコメントになりますが、これで問題は完全に修正されました

これが私の解決策でした:

  1. app gradle
splits {
        // Configures multiple APKs based on ABI.
        abi {
            // Enables building multiple APKs per ABI.
            enable true
            // By default all ABIs are included, so use reset() and include to specify that we only
            // want APKs for armeabi-v7a and arm64-v8a.

            // Resets the list of ABIs that Gradle should create APKs for to none.
            reset()

            // Specifies a list of ABIs that Gradle should create APKs for.
            include "armeabi-v7a", "arm64-v8a"

            // Specifies that we do not want to also generate a universal APK that includes all ABIs.
            universalApk false
        }
    }
  1. flutter build apk --release --target-platform=android-arm実行します
  2. app-armeabi-v7a-release.apkをPlayストアにアップロードする
  3. versionCodeインクリメント
  4. flutter build apk --release --target-platform=android-arm64実行します
  5. app-arm64-v8a-release.apkをPlayストアにアップロードする

Google Playストアは、デバイスアーキテクチャに従ってアプリを提供します。 32ビットデバイスは満足しています。64ビットデバイスは満足しています。両方のアーキテクチャに対応しながら、APKサイズが比較的小さいままであることを知って満足しています。

同じAPKに両方のアーキテクチャのサポートを含める場合、アプリのサイズは10MB以上になると予想されます

これらの手順に従うと、「GradleビルドでAndroidパッケージを作成できませんでした」というメッセージが表示されました。 エラー
_ 1時間のデバッグの後、修正を見つけました。 _

x86とx64で異なるアプリを作成するには、次の手順に従います。

ステップ1:コードスニペットをapp/build.gradleファイルに含めます。 ファイルは次のようになります。

....
    lintOptions {
        disable 'InvalidPackage'
    }

    splits {
        // Configures multiple APKs based on ABI.
        abi {
            // Enables building multiple APKs per ABI.
            enable true
            // By default all ABIs are included, so use reset() and include to specify that we only
            // want APKs for armeabi-v7a and arm64-v8a.

            // Resets the list of ABIs that Gradle should create APKs for to none.
            reset()

            // Specifies a list of ABIs that Gradle should create APKs for.
            include "armeabi-v7a", "arm64-v8a"

            // Specifies that we do not want to also generate a universal APK that includes all ABIs.
            universalApk false
        }
    }

    defaultConfig {
....

ステップ2: flutter build apk --releaseを使用してリリースAPKを作成する
これにより、フォルダbuild/app/outputs/apk/app.apk x86ベースのapkが作成されます
このapkをグーグルプレイストアにアップロードします。
これまでに行われたx86

この時点では、 flutter clean実行しないでください
私はこれをやっていて、x64apkをビルドするときにエラーが発生していました

ステップ3: pubspec.yamlを開き、 versionから変更します
version: 1.0.0+1からversion: 1.0.0+2

+の横の数字はバージョンコードです

ステップ4:コマンドを実行します
flutter build apk --release --target-platform=android-arm64

このコマンドが完了したら、 build/app/outputs/apk/release/ます。 そこにapp-arm64-v8a-release.apkという名前のapkがあります。 これは、バージョンコードが異なる64ビットのapkファイルです。

次に、このx64APKをPlayストアにアップロードします。 Playストアにx86アプリとx64アプリの両方をアップロードしました。

長いコメントになりますが、これで問題は完全に修正されました

[...]
x86とx64で異なるアプリを作成するには、次の手順に従います。

ステップ1:コードスニペットをapp/build.gradleファイルに含めます。 ファイルは次のようになります。

....
    lintOptions {
        disable 'InvalidPackage'
    }

    splits {
        // Configures multiple APKs based on ABI.
        abi {
            // Enables building multiple APKs per ABI.
            enable true
            // By default all ABIs are included, so use reset() and include to specify that we only
            // want APKs for armeabi-v7a and arm64-v8a.

            // Resets the list of ABIs that Gradle should create APKs for to none.
            reset()

            // Specifies a list of ABIs that Gradle should create APKs for.
            include "armeabi-v7a", "arm64-v8a"

            // Specifies that we do not want to also generate a universal APK that includes all ABIs.
            universalApk false
        }
    }

    defaultConfig {
....

ステップ2: flutter build apk --releaseを使用してリリースAPKを作成する
[...]

あなたの答えに同意します。 ステップ1に従う必要はありませんでしたが(デフォルトのbuild.gradleを使用しました)、私にとってはうまくいきます

次に、ビルド番号とバージョンをインクリメントして、GooglePlayがそれを受け入れるようにする必要があります。

手持ちのflutter build appbundleでまだ問題があります。

長いコメントになりますが、これで問題は完全に修正されました

[...]
x86とx64で異なるアプリを作成するには、次の手順に従います。
ステップ1:コードスニペットをapp/build.gradleファイルに含めます。 ファイルは次のようになります。

....
    lintOptions {
        disable 'InvalidPackage'
    }

    splits {
        // Configures multiple APKs based on ABI.
        abi {
            // Enables building multiple APKs per ABI.
            enable true
            // By default all ABIs are included, so use reset() and include to specify that we only
            // want APKs for armeabi-v7a and arm64-v8a.

            // Resets the list of ABIs that Gradle should create APKs for to none.
            reset()

            // Specifies a list of ABIs that Gradle should create APKs for.
            include "armeabi-v7a", "arm64-v8a"

            // Specifies that we do not want to also generate a universal APK that includes all ABIs.
            universalApk false
        }
    }

    defaultConfig {
....

ステップ2: flutter build apk --releaseを使用してリリースAPKを作成する
[...]

あなたの答えに同意します。 ステップ1に従う必要はありませんでしたが(デフォルトのbuild.gradleを使用しました)、私にとってはうまくいきます

次に、ビルド番号とバージョンをインクリメントして、GooglePlayがそれを受け入れるようにする必要があります。

手持ちのflutter build appbundleでまだ問題があります。

動作していません。 私はとても怒っています。 x86エミュレーターと実際のアームデバイスにデプロイしようとすると、アプリケーションがクラッシュしました。 マスター/ベータ/安定チャネルで試してみました。 リリースの準備はできていません。 それはまだ私たちにとってショーストッパーです。 Appbundleコマンドは、再生用のインストール可能なバンドルを生成しますが、実行時にアプリケーションはスプラッシュ画面のみを表示してからフリーズします。 Flutterチームは明確な解決策またはWAを提供してください。

@mormihございます-私たちは複製に取り組んでいます。 よろしければ、以下を含むメール([email protected])を送っていただければ助かります。

  • 構築に使用しているホストプラットフォーム。
  • アプリのビルドに使用しているコマンド。
  • --bug-report (例: flutter build appbundle --bug-report )を使用してビルドコマンドを実行し、関連するbugreport.zipファイルを添付します
  • 生成されたアプリバンドルを添付して、ローカルデバイスで実行できるようにします
  • アプリを実行しようとした後、 adb bugreportの結果を添付します

ありがとう!

@tvolkert次のメッセージでクラッシュするという問題もあります。

チェックに失敗しました:vm。 VMを初期化できる必要があります。

私のホストプラットフォームはmacとmacOS10.14.5です。 あなたはそれを再現することができましたか、それともあなたが上で書いた手順に従って私にお願いしますか? また、OPとは別の問題なので、専用のチケットが必要かもしれません。乾杯

@mormihわかりませんが、abiリストにx86も含めてみましたか?

include "armeabi-v7a", "arm64-v8a", "x86"

flutter build appbundle (マスター上)も私には機能しませんでした。他の人が指摘したように、スプラッシュスクリーンが動かなくなってしまいました...

これまでに32ビットと64ビットの両方で(Playストアで)リリースするために私が見つけた唯一の回避策は次のとおりです。 (スレッドで部分的にカバーされていますが、誰かを助けるかもしれません):

  1. +デフォルトのビルドapkコマンドでv7フィルターを使用してapkを作成します。
    app / build.gradleファイル:
    defaultConfig { ... ndk{ abiFilters "armeabi-v7a" } }
    その後、実行します
    flutter build apk
    (デフォルトは--release)

  2. ビルド番号をpubspec.yamlにバンプします。
    例: version: 1.1.0+6からversion: 1.1.0+7

  3. ターゲットプラットフォームとしてarm64を使用して+ビルドでv8フィルターを使用してapkを作成します。
    次に、build.gradleを次のように更新します。
    defaultConfig { ... ndk{ abiFilters "arm64-v8a" } }
    その後、実行します
    flutter build apk --release --target-platform android-arm64

2つのapkをアップロードする(したがって2つのビルド番号を作成する)必要があるオーバーヘッドが含まれていますが、少なくともそれは仕事をしているようで、32ビットデバイスと64ビットデバイスの両方でリリースできます...

注:x86を手放したのは、モバイルデバイスのごく少数のグループ(および場合によってはユーザーがいない)のみが含まれ、さらにエミュレーターにリリースビルドが必要ないためです(テストにはデバッグで十分です)。 しかし、もちろんこれは他の人には当てはまらないかもしれません。

@ezmegyメソッドは私のために働いた唯一のものです。 ありがとう

コメントのどこかで誰かがこれを残しました。

image

これは私とその唯一のターミナルコードのために働いています。
私が嫌いな2つのファイルを出力し、2つのバージョンを作成します。

@ezmegyありがとうございます! あなたは私の日を救う

@ezmegyに感謝し

ありがとう@ezmegy
役立つかもしれない私の現在のワークフローを共有したいと思います:


アーキテクチャごとにapp/build.gradleビルドフレーバーを作成します

flavorDimensions 'arch'
    productFlavors {
        arm32 {
            dimension 'arch'
            ndk {
                abiFilters 'armeabi-v7a'
            }
        }
        arm64 {
            dimension 'arch'
            ndk {
                abiFilters 'arm64-v8a'
            }
        }

次に、次の方法で両方を構築できます。
flutter build apk --flavor arm32

flutter build apk --flavor arm64 --target-platform android-arm64
ビルドごとにgradleを変更せずに


バージョンコードに関しては、デフォルトで1つを設定し、それから他を派生させたいと思います
たとえば、 arm32を1.0.0 + 10000に設定し、 arm64バージョンコードを生成します。これは1.0.0 +10001です。
これは、bashを使用して(またはfastlaneを使用している場合はfastfile内で)簡単に生成できるはずです。

--build-number引数を使用するか、使用している場合はfastlaneを使用して、ビルド番号を設定できます。

このバージョンコードスクリプトは、CI / CDで役立ちます😄

CMIIW

私にとって、これはかなりうまくいきました
https://github.com/flutter/flutter/issues/10728#issuecomment -461375218

長いコメントになりますが、これで問題は完全に修正されました

これが私の解決策でした:

  1. app gradle
splits {
        // Configures multiple APKs based on ABI.
        abi {
            // Enables building multiple APKs per ABI.
            enable true
            // By default all ABIs are included, so use reset() and include to specify that we only
            // want APKs for armeabi-v7a and arm64-v8a.

            // Resets the list of ABIs that Gradle should create APKs for to none.
            reset()

            // Specifies a list of ABIs that Gradle should create APKs for.
            include "armeabi-v7a", "arm64-v8a"

            // Specifies that we do not want to also generate a universal APK that includes all ABIs.
            universalApk false
        }
    }
  1. flutter build apk --release --target-platform=android-arm実行します
  2. app-armeabi-v7a-release.apkをPlayストアにアップロードする
  3. versionCodeインクリメント
  4. flutter build apk --release --target-platform=android-arm64実行します
  5. app-arm64-v8a-release.apkをPlayストアにアップロードする

Google Playストアは、デバイスアーキテクチャに従ってアプリを提供します。 32ビットデバイスは満足しています。64ビットデバイスは満足しています。両方のアーキテクチャに対応しながら、APKサイズが比較的小さいままであることを知って満足しています。
同じAPKに両方のアーキテクチャのサポートを含める場合、アプリのサイズは10MB以上になると予想されます

これらの手順に従うと、「GradleビルドでAndroidパッケージを作成できませんでした」というメッセージが表示されました。 エラー
_ 1時間のデバッグの後、修正を見つけました。 _

x86とx64で異なるアプリを作成するには、次の手順に従います。

ステップ1:コードスニペットをapp/build.gradleファイルに含めます。 ファイルは次のようになります。

....
    lintOptions {
        disable 'InvalidPackage'
    }

    splits {
        // Configures multiple APKs based on ABI.
        abi {
            // Enables building multiple APKs per ABI.
            enable true
            // By default all ABIs are included, so use reset() and include to specify that we only
            // want APKs for armeabi-v7a and arm64-v8a.

            // Resets the list of ABIs that Gradle should create APKs for to none.
            reset()

            // Specifies a list of ABIs that Gradle should create APKs for.
            include "armeabi-v7a", "arm64-v8a"

            // Specifies that we do not want to also generate a universal APK that includes all ABIs.
            universalApk false
        }
    }

    defaultConfig {
....

ステップ2: flutter build apk --releaseを使用してリリースAPKを作成する
これにより、フォルダbuild/app/outputs/apk/app.apk x86ベースのapkが作成されます
このapkをグーグルプレイストアにアップロードします。
これまでに行われたx86

この時点では、 flutter clean実行しないでください
私はこれをやっていて、x64apkをビルドするときにエラーが発生していました

ステップ3: pubspec.yamlを開き、 versionから変更します
version: 1.0.0+1からversion: 1.0.0+2

+の横の数字はバージョンコードです

ステップ4:コマンドを実行します
flutter build apk --release --target-platform=android-arm64

このコマンドが完了したら、 build/app/outputs/apk/release/ます。 そこにapp-arm64-v8a-release.apkという名前のapkがあります。 これは、バージョンコードが異なる64ビットのapkファイルです。

次に、このx64APKをPlayストアにアップロードします。 Playストアにx86アプリとx64アプリの両方をアップロードしました。

それはステップ1なしでも私に働いています。みんなに感謝します。 私はndkフィルターを使用しましたndk {
abiFilters "armeabi-v7a"、 "x86"
}
ビルドgradleファイルで。 必要かどうかはわかりません。 それ以外は、手順2のすべての手順を実行し、32ビット用と64ビット用の2つのapkをアップロードしました。

以前にappbundleをアップロードしていましたが、今回はapkファイルをアップロードしました。 正常に動作しています。 appbundleで確認し、2つのapkをアップロードせずに修正しようとしています。

ノート :
このプロセスを実行する前に、次のarm-64ビットデバイスでアプリがクラッシュしました
Redmi MI、
Redmi 3S Prime
8xを称える

次のアームで動作-64ビットデバイス
サムスンギャラクシーJ4
サムスンOn8

こんにちはフラッターチーム、

pls。 中国などの他のアプリ市場も検討してください。 中国では、Google Playストアの使用は許可されていません。代わりに、XiaoMi、HuaWei、Aliなどの多くのアプリ市場があります。

これらのアプリ市場では、異なるアーキテクチャでapkリリースを提供することは許可されていません。アップロードできるapkはリリースごとに1つだけであり、そのリリースは前のリリースのapkを上書きします。 つまり、現在の回避策は「armeabi-v7a」を使用することです。

間違っている場合は、「armeabi-v7a」を使用して修正してください。すべての64ビットデバイスで32ビットのlibflutter.soが実行され、速度が低下すると思います。

したがって、apkのサイズは大きくなりますが、フラッターチームが32ビットと64ビットの両方のlibflutter.soを含むapkを構築できるようにする方法を提供できるかどうかを提案します。 (中国では、通常、インターネットの速度が非常に速く、4Gの無限の使用計画を立てるためにほとんどお金を払っていません。また、人々は通常、apkのサイズを気にしません)

こんにちはフラッターチーム、

pls。 中国などの他のアプリ市場も検討してください。 中国では、Google Playストアの使用は許可されていません。代わりに、XiaoMi、HuaWei、Aliなどの多くのアプリ市場があります。

これらのアプリ市場では、異なるアーキテクチャでapkリリースを提供することは許可されていません。アップロードできるapkはリリースごとに1つだけであり、そのリリースは前のリリースのapkを上書きします。 つまり、現在の回避策は「armeabi-v7a」を使用することです。

間違っている場合は、「armeabi-v7a」を使用して修正してください。すべての64ビットデバイスで32ビットのlibflutter.soが実行され、速度が低下すると思います。

したがって、apkのサイズは大きくなりますが、フラッターチームが32ビットと64ビットの両方のlibflutter.soを含むapkを構築できるようにする方法を提供できるかどうかを提案します。 (中国では、通常、インターネットの速度が非常に速く、4Gの無限の使用計画を立てるためにほとんどお金を払っていません。また、人々は通常、apkのサイズを気にしません)

あなたの場合、標準の32ビットを提供でき、すべてがうまくいくでしょう?
64ビットの警告はGooglePlay専用です。 これは中国の問題ではないと思います。
(間違っている場合は訂正してください。)

@ KunalT6569あなたが述べたように私はステップ3を推測します:

ステップ3:pubspec.yamlを開き、バージョンをから変更します
バージョン:1.0.0 + 1からバージョン:1.0.0 + 2

両方のapkファイルをGooglePlay Consoleにアップロードできるようにするために必要ですよね?

もう1つ質問があります。両方のapkファイルの準備ができたら、 App releases\New Release\Browse Filesセクションからアップロードするだけですよね。

@ angel1stはい、 Google Playでは同じバージョンコードの2つのapkをアップロードできないため、手順3が必要です。

複数のapkをグーグルプレイにアップロードするために、私はこのビデオを参照しました。
https://www.youtube.com/watch?v=rMl_oLlf_g0

ご参考までに:

現在の計画では、今後10日ほどで最近の開発リリースの1つを使用してベータ版をリリースする予定です。 次に、Playストアからの64ビットビルドに関する警告をトリガーしないAndroidでの出荷方法、64ビットをサポートするAPKをパッケージ化する方法、および証明する方法について、文書化されたプロセスが更新されるまで待つ予定です。そのプロセスを使用してギャラリーをリリースできます。それが完了するとすぐに、プロセスに従って新しいベータ版をリリースし、1週間ほど後に安定版にプッシュします。

これは、6月上旬にベータ版があり、6月下旬または7月上旬にベータ版があり、その後すぐに安定することを意味します。

@Hixieここで別の問題が発生しました
x86、x86_64バージョンを生成しない最新のフラッター(現在のマスター)によるアプリバンドル
マスターブランチによって生成されたファイル
WinRAR_2019-05-30_02-55-34

androidstudioで旧バージョンによって生成されたファイル
WinRAR_2019-05-30_03-03-15

予想される動作は、新しいバージョンで作成されたファイルにx86、x86_64バージョンも含めることです。

この問題とは無関係に@canewsin、我々は、x86リリースのバイナリを提供しない(https://github.com/flutter/flutter/issues/9253) - 「旧バージョンは」であるhttps://github.com/flutter/ flutter / issues / 18494#issuecomment -497118805はデバッグビルドを参照していますか?

同じ問題があります。32ビット用にビルドすると64ビットデバイスが除外されますが、それらで実行されます。 --target-platform android-arm64指定して64用にビルドすると、64ビットデバイスでは機能しますが、32ビットデバイスではクラッシュします。 また、Googleは2019年にapkのアップロードを64ビットに制限します。

Flutterチーム、この基本的な問題を解決してください!

defaultConfig {
...。
versionName flutterVersionName
ndk.abiFilters'armeabi-v7a '、' arm64-v8a '、' x86 '、' x86_64 '
}
// 準備!

最新のフラッターマスターブランチを使用してアプリをコンパイルし、アプリバンドルとしてPlayストアにアップロードしましたが、デバイスでアプリがクラッシュしますこのログはテストラボから取得されます

05-31 07:50:28.384: D/AndroidRuntime(11036): --------- beginning of crash
05-31 07:50:28.384: E/AndroidRuntime(11036): FATAL EXCEPTION: main
05-31 07:50:28.384: E/AndroidRuntime(11036): Process: in.canews.social, PID: 11036
05-31 07:50:28.384: E/AndroidRuntime(11036): java.lang.RuntimeException: Unable to create application in.canews.social.App: java.lang.NullPointerException: Attempt to get length of null array
05-31 07:50:28.384: E/AndroidRuntime(11036):    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5794)
05-31 07:50:28.384: E/AndroidRuntime(11036):    at android.app.ActivityThread.-wrap1(Unknown Source:0)
05-31 07:50:28.384: E/AndroidRuntime(11036):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1661)
05-31 07:50:28.384: E/AndroidRuntime(11036):    at android.os.Handler.dispatchMessage(Handler.java:105)
05-31 07:50:28.384: E/AndroidRuntime(11036):    at android.os.Looper.loop(Looper.java:164)
05-31 07:50:28.384: E/AndroidRuntime(11036):    at android.app.ActivityThread.main(ActivityThread.java:6541)
05-31 07:50:28.384: E/AndroidRuntime(11036):    at java.lang.reflect.Method.invoke(Native Method)
05-31 07:50:28.384: E/AndroidRuntime(11036):    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
05-31 07:50:28.384: E/AndroidRuntime(11036):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
05-31 07:50:28.384: E/AndroidRuntime(11036): Caused by: java.lang.NullPointerException: Attempt to get length of null array
05-31 07:50:28.384: E/AndroidRuntime(11036):    at io.flutter.view.FlutterMain.listLibs(FlutterMain.java:381)
05-31 07:50:28.384: E/AndroidRuntime(11036):    at io.flutter.view.FlutterMain.initAot(FlutterMain.java:412)
05-31 07:50:28.384: E/AndroidRuntime(11036):    at io.flutter.view.FlutterMain.startInitialization(FlutterMain.java:164)
05-31 07:50:28.384: E/AndroidRuntime(11036):    at io.flutter.view.FlutterMain.startInitialization(FlutterMain.java:143)
05-31 07:50:28.384: E/AndroidRuntime(11036):    at io.flutter.app.FlutterApplication.onCreate(FlutterApplication.java:22)
05-31 07:50:28.384: E/AndroidRuntime(11036):    at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1118)
05-31 07:50:28.384: E/AndroidRuntime(11036):    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5791)
05-31 07:50:28.384: E/AndroidRuntime(11036):    ... 8 more
05-31 07:50:28.392: W/ActivityManager(897):   Force finishing activity in.canews.social/.MainActivity

フラッタードクター-v

C:\flutter\flutter\bin>flutter doctor -v
[√] Flutter (Channel master, v1.6.7-pre.7, on Microsoft Windows [Version 10.0.17763.503], locale en-IN)
    • Flutter version 1.6.7-pre.7 at C:\flutter\flutter
    • Framework revision 6884146925 (2 days ago), 2019-05-29 12:52:05 -0700
    • Engine revision 8dc3a4cde2
    • Dart version 2.3.2 (build 2.3.2-dev.0.0 e3edfd36b2)


[√] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
    • Android SDK at C:\Users\PramUkesh\AppData\Local\Android\sdk
    • Android NDK location not configured (optional; useful for native profiling support)
    • Platform android-28, build-tools 28.0.3
    • Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java
    • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1343-b01)
    • All Android licenses accepted.

[√] Android Studio (version 3.4)
    • Android Studio at C:\Program Files\Android\Android Studio
    • Flutter plugin version 35.3.1
    • Dart plugin version 183.6270
    • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1343-b01)

[√] VS Code (version 1.34.0)
    • VS Code at C:\Users\PramUkesh\AppData\Local\Programs\Microsoft VS Code
    • Flutter extension version 3.0.2

[√] Connected device (1 available)
    • Z2 Plus • 2e9087c2 • android-arm64 • Android 9 (API 28)

• No issues found!

@canewsinは、この問題がhttps://github.com/flutter/engine/pull/9078で修正されたようgit fetch upstream && git merge upstream/master更新します

以前のコメントですでに回答されている質問を繰り返した後、私は現在どのようなオプションがあるかを文書化した短い記事を書きましたhttps://medium.com/@truongsinh/flutter -android-64-bit-so-what-the-fuss -15da6f8e3a46。 TLDRは次のとおりです。
1_Awm6pB8jR3wGdHMC4DsatQ

@ truongsinh 、Playストアにデプロイするための32ビットと64ビットの両方のバイナリを含むアプリバンドルを構築するためにflutter build appbundleを使用するためのサポートも最終決定しています。 詳細については、 https://github.com/flutter/flutter/issues/31922を参照して

@ truongsinh 、Playストアにデプロイするための32ビットと64ビットの両方のバイナリを含むアプリバンドルを構築するためにflutter build appbundleを使用するためのサポートも最終決定しています。 詳細については、#31922を参照してください。試してみて、問題が発生した場合はお知らせください。

うん、私はまだflutter build appbundleがアプリを作成するのを待っていますが、スタックしたりクラッシュしたりしません:D

うん、私はまだフラッタービルドappbundleがスタックしたりクラッシュしたりしないアプリを生成するのを待っています:D

認められました🙂。 私たちが見ることができるこの出来事の再現可能なケースがあれば、それは素晴らしいことです。 1.7.1リリースから署名されていない.aabファイルを作成し、それを電子メール([email protected])で送っていただければ幸いです。

参考までに、64ビットサポートに関して次の発表が

https://groups.google.com/forum/#!topic/flutter -announce / oIzwT9EDczc

私もこの問題を抱えています。

Android Studioでアプリバンドルをビルドすると、シミュレーターに正常にロードできますが、Playストアからダウンロードするとアプリがクラッシュします

フラッターマスターブランチを使用してアプリバンドルを構築している皆さん、こんにちは。
アプリをデバッグしている場合、アプリは正常に実行されます
デバッグモードではJITバイナリが生成され、リリースモードではAOTバイナリが生成されるため、Playストアからのダウンロード時に一部の顔がクラッシュします。これは、アプリバンドルがデバイスで機能しているかどうかを確認したためです。現在、アプリの配置も異なります。アプリを正しくテストするためです。
デバイスに基づいて特定の構成のみのアプリバンドルからapkを生成し、デバイスからデバッグアプリを完全にアンインストールし、アプリバンドルからこの新しい出力アプリをインストールします。クラッシュした場合は、Playストアなどからダウンロードしたときにクラッシュします。これが他のユーザーに役立つことを願っています。 。

cmd行からのアプリバンドルからAPKへの出力の参照
https://developer.android.com/studio/command-line/bundletool

参考までに、アプリバンドルのクラッシュは、 https://github.com/flutter/flutter/issues/31922でより適切に追跡され

こんにちは、みんな、

TLDR:

Playストアからダウンロードしたときのクラッシュの問題を特定し、修正に取り組んでいます。これは、上記のhttps://github.com/flutter/flutter/issues/31922#issuecommentで概説したのと同じ時間枠内に配信され

高レベルの説明

興味のある方は、Android Marshmallow以降を実行しているデバイスでは、Playストアが複数のABIを含むアプリバンドルとしてパッケージ化されたアプリを検出し、それらのアプリを「分割」の形式でデバイスにインストールするという、やや長い説明があります。 APK」。 これを行うと、そこに含まれる.soファイルはAPK zipアーカイブから抽出されません。これは、分割されていないAPKの動作とは異なります。 .soファイルを見つけるためのFlutterエンジンの

解決策は、ライブラリをdlopenするだけで、Androidはライブラリが配置されている場所(つまり、アーカイブ内かどうか)を抽象化します。 ただし、必要な.soファイルは、そもそも真のライブラリではありませんでした。これらは、DartVMにロードしたデータの単なるバイナリブロブでした。 そのため、この一環として、ELFライブラリを作成しています(例:https://github.com/dart-lang/sdk/commit/6d608fb52bc1926a73d986d73ab228b77cfb7ca2およびhttps://github.com/flutter/flutter/pull/33696)。

4. flutter build apk --release --target-platform = android-arm64

コードスニペットをbuild.gradleに追加した後、このエラーが発生します
Gradle build failed to produce an Android package.

  1. flutter build apk --release --target-platform = android-arm64

コードスニペットをbuild.gradleに追加した後、このエラーが発生します
Gradle build failed to produce an Android package.

https://developer.android.com/distribute/best-practices/develop/64-bit

誰かが問題を解決できますか? 32ビットapkでしか動作しないフラッターのアプリがありますが、64は動作しないかインストールされません。 64ビットの携帯電話でテストしています

@CgarciaTC最新のアップデートについては、 https: //github.com/flutter/flutter/issues/18494#issuecomment-500101807を参照してください。

こんにちは、みんな、

修正はすべてmasterチャネルのツリーの先端に到達したと考えています。 それらを試してみたい場合は、次の方法で行います。

  • flutter build appbundle

    デフォルトでは、App Bundleには、Dartコードと、 armeabi-v7a (32ビット)およびarm64-v8a (64ビット)用にコンパイルされたFlutterランタイムが含まれています。

  • flutter build apk --split-per-abi

    このコマンドにより、2つのAPKが生成されます。

    build/app/outputs/apk/release/app-armeabi-v7a-release.apk
    build/app/outputs/apk/release/app-arm64-v8a-release.apk

  • flutter build apk

    これにより、すべてのターゲットABI用にコンパイルされたコードを含むファットAPKが生成されます。 このようなAPKは、分割されたAPKよりもサイズが大きくなるため、ユーザーはデバイスのアーキテクチャに適用できないネイティブバイナリをダウンロードすることになります。

flutter build apk --split-per-abi
このコマンドにより、2つのAPKが生成されます。
build / app / outputs / apk / release / app-armeabi-v7a-release.apk
build / app / outputs / apk / release / app-arm64-v8a-release.apk

@ tvolkert-この特定のシナリオでは、各リリースのバージョン番号はどうですか? 私が知っている限り、それらは異なっている必要があるので、両方をGooglePlayにアップロードできます。 APKが構築されたときに、その部分は何らかの形で管理されていますか? そうでない場合、それはどのように処理されることになっていますか?

@ angel1st https://developer.android.com/studio/build/configure-apk-splits#configure -APK-versionsのガイダンスに従って、APKのビルド時に自動的に管理されます

@tvolkertこれがいつ安定したチャネルに

@ndusart //github.com/flutter/flutter/issues/18494#issuecomment-498880287を参照

複数のAndroidデバイスでこれが機能していることを確認できます(マスターに切り替えた後)。 なんて命の恩人、ありがとう。

@tvolkertヒープに感謝します。 これをFlutter安定化するためのタイムラインはありますか?

@ harsha973https //github.com/flutter/flutter/issues/18494#issuecomment-498880287を参照してください

@ harsha973あなたは真剣にタグを付けて、彼があなたの上の2つの投稿に答えたのとまったく同じ質問をしています。 無知であるだけでなく、無礼の危機に瀕している。

@PerLyckeそれについて申し訳ありません。

マスターチャネルをチェックアウトし、フラッターをアップグレードしましたが、次のコマンドを使用してアプリを実際にビルドできません。
flutter build apk --release --flavor production -t lib/main.dart
結果は次のとおりです。

* What went wrong:                                                                                                 
Execution failed for task ':app:transformNativeLibsWithMergeJniLibsForProductionRelease'.                          
> More than one file was found with OS independent path 'lib/armeabi-v7a/libapp.so' 

同様のStackOverflowの問題の回答は実際には役に立ちません。

@MichaelRFairhurst flutter build apk --releaseは私にとってはうまく機能したので、マスターの新しい更新にはフレーバー設定の更新も必要になるかもしれません。

申し訳ありませんが、それは答えではありませんが、少なくとも正しい方向へのポイントです。

修正はいつベータ版になりますか?

@derolfは、ターゲットタイムラインを含む最新の更新としてhttps://github.com/flutter/flutter/issues/18494#issuecomment-498880287を参照して

こんにちは、みんな、

これらの修正は、 v1.7.4リリース以降のdevチャネルで有効になりました。

この64ビットのものを理解しようとしている間、私は@michalsuryntequiqoと同じ問題を
flutter build apk --flavor=dev -t lib/main-dev.dart実行します

[   +3 ms] FAILURE: Build failed with an exception.
[   +1 ms] * What went wrong:
[        ] Execution failed for task ':app:transformNativeLibsWithMergeJniLibsForDevRelease'.
[        ] > More than one file was found with OS independent path 'lib/armeabi-v7a/libapp.so'
[        ] * Try:
[        ] Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
[        ] * Get more help at https://help.gradle.org
[        ] BUILD FAILED in 1m 3s
[ +370 ms] Running Gradle task 'assembleDevRelease'... (completed in 64.0s)
[   +4 ms] "flutter apk" took 69,789ms.
[        ] "flutter apk" took 69,789ms.

医者

編集:
8627ff433b4658195e66b9c0034902116f53d580の直前にコミットを試してみたところ、 https://github.com/flutter/flutter/issues/24106が原因で通常のエラーGradle build failed to produce an Android package. apkが生成されます

@blasten変更を加えてこれを再び機能させる方法はありますか?

編集2:
このための新しい問題を開きました: https

今日フラッターのドキュメントを読んだところ、次のことがわかりました。

コマンドラインから:

cdと入力します
(交換アプリケーションのディレクトリを使用します。)
flutter build apk--split-per-abiを実行します
(flutterビルドコマンドのデフォルトは--releaseです。)
このコマンドにより、2つのAPKファイルが作成されます。

/build/app/outputs/apk/release/app-armeabi-v7a-release.apk
/build/app/outputs/apk/release/app-arm64-v8a-release.apk

https://flutter.dev/docs/deployment/android#build -an-apk

@ eugenio-tesio --split-per-abiを使用する場合、どのバージョンコードが使用されますか?

ドキュメントでそれを見て、ここで公開しようと思いました。 私はそれをテストしませんでした。
コマンドを実行しても機能しませんでした。 それは言う:

「split-per-abi」という名前のオプションが見つかりませんでした。

'flutter -h'(または 'flutter-h ')使用可能なフラッターコマンドとオプション。

フラッタードクター:

Flutter1.6.3•チャネルベータ• https
フレームワーク•リビジョンbc7bc94083(4週間前)•2019-05-23 10:29:07 -0700
エンジン•リビジョン8dc3a4cde2
ツール•Dart2.3.2(ビルド2.3.2-dev.0.0 e3edfd36b2)

consumos_appで「flutterpubupgrade」を実行しています... 19,8s

フラッタードクターを実行しています...
ドクターサマリー(すべての詳細を表示するには、フラッタードクター-vを実行します):
[√]フラッター(チャネルベータ、v1.6.3、Microsoft Windows [Versión10.0.17134.829]、ロケールes-AR)
[√] Androidツールチェーン-Androidデバイス用に開発(Android SDKバージョン28.0.3)
[√] Android Studio(バージョン3.4)
[√] IntelliJ IDEA Ultimate Edition(バージョン2019.1)
[√] VSコード(バージョン1.26.1)
[√] VS Code、64ビット版(バージョン1.33.1)
[!]接続されたデバイス
! 利用可能なデバイスはありません

この機能はまもなく利用可能になると思います。

ドキュメントでそれを見て、ここで公開しようと思いました。 私はそれをテストしませんでした。
コマンドを実行しても機能しませんでした。 それは言う:

「split-per-abi」という名前のオプションが見つかりませんでした。
使用可能なフラッターコマンドとオプションについては、「flutter-h」(または「flutter-h」)を実行します。

フラッタードクター:

Flutter1.6.3•チャネルベータ• https
フレームワーク•リビジョンbc7bc94 (4週間前)•2019-05-23 10:29:07 -0700
エンジン•リビジョン8dc3a4cde2
ツール•Dart2.3.2(ビルド2.3.2-dev.0.0 e3edfd36b2)
consumos_appで「flutterpubupgrade」を実行しています... 19,8s
フラッタードクターを実行しています...
ドクターサマリー(すべての詳細を表示するには、フラッタードクター-vを実行します):
[√]フラッター(チャネルベータ、v1.6.3、Microsoft Windows [Versión10.0.17134.829]、ロケールes-AR)
[√] Androidツールチェーン-Androidデバイス用に開発(Android SDKバージョン28.0.3)
[√] Android Studio(バージョン3.4)
[√] IntelliJ IDEA Ultimate Edition(バージョン2019.1)
[√] VSコード(バージョン1.26.1)
[√] VS Code、64ビット版(バージョン1.33.1)
[!]接続されたデバイス
! 利用可能なデバイスはありません

この機能はまもなく利用可能になると思います。

これはdevチャネル/バージョン1.7.4以降のみであることに注意してください。 betaチャネル/バージョン1.6.3を実行しています

私はそれを試しました(Codemagicを使用して構築および公開)、そしてそれは本当にうまくいきました。 ありがとう!

グーグルはまだ私がappbundleを使用していないと不平を言っています。 この警告を考えると、apkを公開することはあまり意味がありませんか?

appbundleを使用しますが、これにより、Googleの自動テスト(起動前レポートの生成)が機能しなくなります。 このために新しい問題を開く必要がありますか?

@nohliアプリバンドル/ APKに関する最新情報を反映するようにドキュメントを更新しました: https//flutter.dev/docs/deployment/android#building-the-app-for-release

Googleの自動テストに関する問題を自由に提出してください。

バンドルからアプリをビルドしましたが、64ビットデバイスで実行した後、32ビットデバイスと64ビットデバイスの両方のアプリをビルドするとlibflutter.soが見つからないと表示されます。 単一のバンドルファイルで両方のアーキテクチャにlibflutter.soを追加するにはどうすればよいですか?

@nohliアプリバンドル/ APKに関する最新情報を反映するようにドキュメントを更新しました: https//flutter.dev/docs/deployment/android#building-the-app-for-release

Googleの自動テストに関する問題を自由に提出してください。

@blastenリンクに記載されている手順では、バンドルに64ビットAPKが生成されませんでした。 バンドルをアップロードしたとき、APKが64ビットに準拠していないという同じエラーがGooglePlayストアにそのまま表示されていました。

@ wal33d006は、ページ上部の免責事項を参照してください。これは、 v1.7.4以降(現在は開発チャネルまたはマスターチャネル)にのみ適用されます。

@ wal33d006は、ページ上部の免責事項を参照してください。これは、 v1.7.4以降(現在は開発チャネルまたはマスターチャネル)にのみ適用されます。

@tvolkert開発チャネルまたはマスターチャネルを介してアプリケーションをビルドすることすらできません。

これは、開発チャネルまたはマスターチャネルでビルドしたときの出力です。

コンパイラメッセージ:
file:///Users/waleed/.pub-cache/hosted/pub.dartlang.org/cached_network_image-0.5.1/lib/cached_network_image。 dart:199 :38:エラー:引数タイプ 'void Function(ImageInfo、bool)'をパラメータータイプ 'ImageStreamListener'に割り当てることができません。

  • 'ImageInfo'は ' package:flutter / src / painting / image_stream.dart '( 'file:/// Users
  • 'ImageStreamListener'は ' package:flutter / src / painting / image_stream.dart '( 'file:/// Users
    パラメータのタイプを変更するか、引数を「ImageStreamListener」にキャストしてみてください。
    oldImageStream?.removeListener(_handleImageChanged);
    ^
    file:///Users/waleed/.pub-cache/hosted/pub.dartlang.org/cached_network_image-0.5.1/lib/cached_network_image。 dart:200 :32:エラー:引数タイプ 'void Function(ImageInfo、bool)'をパラメータータイプ 'ImageStreamListener'に割り当てることができません。
  • 'ImageInfo'は ' package:flutter / src / painting / image_stream.dart '( 'file:/// Users
  • 'ImageStreamListener'は ' package:flutter / src / painting / image_stream.dart '( 'file:/// Users
    パラメータのタイプを変更するか、引数を「ImageStreamListener」にキャストしてみてください。
    _imageStream.addListener(_handleImageChanged);
    ^
    file:///Users/waleed/.pub-cache/hosted/pub.dartlang.org/cached_network_image-0.5.1/lib/cached_network_image。 dart:210 :34:エラー:引数タイプ 'void Function(ImageInfo、bool)'をパラメータータイプ 'ImageStreamListener'に割り当てることができません。
  • 'ImageInfo'は ' package:flutter / src / painting / image_stream.dart '( 'file:/// Users
  • 'ImageStreamListener'は ' package:flutter / src / painting / image_stream.dart '( 'file:/// Users
    パラメータのタイプを変更するか、引数を「ImageStreamListener」にキャストしてみてください。
    _imageStream?.removeListener(_handleImageChanged);
    ^
    file:///Users/waleed/.pub-cache/hosted/pub.dartlang.org/cached_network_image-0.5.1/lib/cached_network_image。 dart:465 :31:エラー:引数タイプ 'Null Function(StringBuffer)'をパラメータータイプ 'Iterableに割り当てることができません関数()'。
  • 「StringBuffer」は「 dart:core 」からのものです。
  • 「Iterable」は「 dart:core 」からのものです。
  • 'DiagnosticsNode'は ' package:flutter / src / Foundation / Diagnostics.dart'( 'file:///Users/waleed/Developer/flutter-sdk/flutter/packages/flutter/lib/src/foundation/diagnostics.dart'からのものです')。
    パラメータのタイプを変更するか、引数を 'Iterableにキャストしてみてください関数()'。
    informationCollector:(StringBuffer情報){
    ^
    コンパイラが予期せず終了しました。

失敗:ビルドは例外で失敗しました。

  • どこ:
    スクリプト '/Users/waleed/Developer/flutter-sdk/flutter/packages/flutter_tools/gradle/flutter.gradle'行:638

  • 何が悪かったのか:
    タスク ': app:compileflutterBuildReleaseArm 'の実行に失敗しました。

    プロセス 'コマンド' / Users / waleed / Developer / flutter-sdk / flutter / bin / flutter ''がゼロ以外の終了値1で終了しました

  • 試す:
    --stacktraceオプションを指定して実行し、スタックトレースを取得します。 --infoまたは--debugオプションを指定して実行すると、より多くのログ出力が得られます。 --scanを指定して実行すると、完全な洞察が得られます。

  • https://help.gradle.orgでさらにヘルプを入手して

14秒でビルドに失敗しました
Gradleタスクの実行 'bundleRelease'..。
Gradleタスク 'bundleRelease'を実行しています...完了15.0s
GradleタスクbundleReleaseが終了コード1で失敗しました

@ wal33d006 package:cached_network_imageはバージョン0.8.0なり、 0.5.1を使用しています-新しいバージョンのFlutterに対して実行している場合は、バージョン制約を更新する必要があります。あなたのpubspec.yamlflutter packages upgrade

@tvolkert v1.7.4では、コマンドflutter build appbundleを使用してバンドルをビルドすると、64ビットデバイス用にファイルlibflutter.soが自動的に追加されると言っていますか?

@ nimesh1997うん、それを安定させるビルドはおそらく新しいバージョンになるでしょうが。

@tvolkertチャネルを###マスターチャネルに変更し、
** cached_network_image> = 0.7.0は、path_provider ^ 0.5.0 +1に依存するflutter_cache_manager ^ 0.3.2に依存するため、cached_network_image> = 0.7.0には、path_provider ^ 0.5.0 +1が必要です。

@ nimesh1997別の問題を提出して、私にccを

@tvolkertフラッターバージョン1.7.4が安定したチャネルで利用可能になるのはいつですか?また、以下のエラーがフラッターバージョン1.7.4で解決された場合、そのエラーのために64ビットデバイスでは実行されません(libflutter.soがありません)?

これは、flutterv1.7.4以降で実行したときに得られる出力です。-

コンパイラメッセージ:
file:///home/zunroof-dev-4/package_flutter/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_image-1.0.0/lib/network。 ダーツ:75 :31:
エラー:引数タイプ 'Null Function(StringBuffer)'をパラメータータイプ 'Iterableに割り当てることができません関数()'。

  • 「StringBuffer」は「 dart:core 」からのものです。
  • 「Iterable」は「 dart:core 」からのものです。
  • 'DiagnosticsNode'は ' package:flutter / src / Foundation / Diagnostics.dart'( 'file:///home/zunroof-dev-4/package_flutter/flutter/packages/flutter/lib/src/foundation/diagnostics.dart'からのものです')。
    パラメータのタイプを変更するか、引数を 'Iterableにキャストしてみてください関数()'。
    informationCollector:(StringBuffer情報){
    ^
    file:///home/zunroof-dev-4/package_flutter/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_image-1.0.0/lib/network。 dart:168 :65:エラー:引数タイプ 'String'をパラメータータイプ 'DiagnosticsNode'に割り当てることができません。
  • 'DiagnosticsNode'は ' package:flutter / src / Foundation / Diagnostics.dart'( 'file:///home/zunroof-dev-4/package_flutter/flutter/packages/flutter/lib/src/foundation/diagnostics.dart'からのものです')。
    パラメータのタイプを変更するか、引数を「DiagnosticsNode」にキャストしてみてください。
    コンテキスト: '$ runtimeTypeは$ {instructions.uri}の読み込みに失敗しました'、
    ^
    コンパイラが予期せず終了しました。

エラーコンパイル、ログを生成せず、フラッタードクター-vはエラーを指しません。 私は何をすべきか?

アプリをPlayストアにデプロイする場合は、アプリを使用することをお勧めします
APKをバンドルまたは分割して、APKのサイズを縮小します。
アプリバンドルを生成するには、次のコマンドを実行します。
flutter build appbundle --target-platform android-arm、android-arm64
詳細については、 https
ABIごとにAPKを分割するには、次のコマンドを実行します。
flutter build apk --target-platform android-arm、android-arm64
--split-per-abi
詳細:
https://developer.android.com/studio/build/configure-apk-splits#configur
e-abi-split
Gradleを初期化しています... 7,4秒
依存関係を解決しています... 4,3s
registerResGeneratingTaskは非推奨です。registerGeneratedResFolders(FileCollection)を使用してください
registerResGeneratingTaskは非推奨です。registerGeneratedResFolders(FileCollection)を使用してください
registerResGeneratingTaskは非推奨です。registerGeneratedResFolders(FileCollection)を使用してください
Gradleタスクの実行 'assembleRelease' .. ..
Gradleタスクを実行しています 'assembleRelease' ...完了9,0s

GradleビルドはAndroidパッケージの作成に失敗しました。

@ leonardop21で試してみてください

フラッターラン-v

@canewsin

ああ、神様。 今何をしたらいいのかわからない

GradleビルドはAndroidパッケージの作成に失敗しました。

0 throwToolExit(package:flutter_tools / src / base / common.dart:28:3)

1 _buildGradleProjectV2

(package:flutter_tools / src / android / gradle.dart:514:7)

2_asyncThenWrapperHelper。

(dart:async-patch / async_patch.dart:77:64)

3 _rootRunUnary(dart:async / zone.dart:1132:38)

4 _CustomZone.runUnary(dart:async / zone.dart:1029:19)

5 _FutureListener.handleValue(dart:async / future_impl.dart:126:18)

6 Future._propagateToListeners.handleValueCallback

(dart:async / future_impl.dart:639:45)

7 Future._propagateToListeners(dart:async / future_impl.dart:668:32)

8 Future._complete(dart:async / future_impl.dart:473:7)

9 _SyncCompleter.complete(dart:async / future_impl.dart:51:12)

10 _AsyncAwaitCompleter.complete(dart:async-patch / async_patch.dart:28:18)

11 _completeOnAsyncReturn(dart:async-patch / async_patch.dart:294:13)

12 runCommandAndStreamOutput(package:flutter_tools / src / base / process.dart)

13_asyncThenWrapperHelper。

(dart:async-patch / async_patch.dart:77:64)

14 _rootRunUnary(dart:async / zone.dart:1132:38)

15 _CustomZone.runUnary(dart:async / zone.dart:1029:19)

16 _FutureListener.handleValue(dart:async / future_impl.dart:126:18)

17 Future._propagateToListeners.handleValueCallback

(dart:async / future_impl.dart:639:45)

18 Future._propagateToListeners(dart:async / future_impl.dart:668:32)

19 Future._completeWithValue(dart:async / future_impl.dart:483:5)

20Future._asyncComplete。

(dart:async / future_impl.dart:513:7)

21 _rootRun(dart:async / zone.dart:1124:13)

22 _CustomZone.run(dart:async / zone.dart:1021:19)

23 _CustomZone.runGuarded(dart:async / zone.dart:923:7)

24_CustomZone.bindCallbackGuarded。

(dart:async / zone.dart:963:23)

25 _microtaskLoop(dart:async / schedule_microtask.dart:41:21)

26 _startMicrotaskLoop(dart:async / schedule_microtask.dart:50:5)

27 _runPendingImmediateCallback

(dart:isolate-patch / isolate_patch.dart:116:13)

28 _RawReceivePortImpl._handleMessage

(dart:isolate-patch / isolate_patch.dart:173:5)

ドキュメントを更新して、32ビットおよび64ビットのバイナリでAPKを構築する方法を示しました。 https://flutter.dev/docs/deployment/android#building-the-app-for-release

devチャネルを使用してください: v1.7.9以上。 チームは、今週の金曜日(2019年6月28日)までにベータ版への最新の変更を宣伝するために取り組んでいます。

コンパイラメッセージ:
file:///Users/systemgnk/Desktop/flutter/.pub-cache/hosted/pub.dartlang.org/flare_flutter-1.5.2/lib/flare。 dart:1033 :18:エラー:引数タイプ「Int32List」をパラメータタイプ「Uint16List」に割り当てることができません。

  • 「Int32List」は「 dart:typed_data 」からのものです。
  • 「Uint16List」は「dart:typed_data」からのものです。
    パラメータのタイプを変更するか、引数を「Uint16List」にキャストしてみてください。
    インデックス:_indices、textureCoordinates:_uvBuffer);
    ^
    コンパイラが予期せず終了しました。

失敗:ビルドは例外で失敗しました。

  • どこ:
    スクリプト '/Users/systemgnk/Desktop/flutter/packages/flutter_tools/gradle/flutter.gradle'行:631

  • 何が悪かったのか:
    タスク ': app:compileflutterBuildReleaseArm 'の実行に失敗しました。

    プロセス 'コマンド' / Users / systemgnk / Desktop / flutter / bin / flutter ''がゼロ以外の終了値1で終了しました

  • 試す:
    --stacktraceオプションを指定して実行し、スタックトレースを取得します。 --infoまたは--debugオプションを指定して実行すると、より多くのログ出力が得られます。 --scanを指定して実行すると、完全な洞察が得られます。

  • https://help.gradle.orgでさらにヘルプを入手して

22秒でビルドに失敗しました
Gradleタスクの実行 'assembleRelease' .. ..
Gradleタスク 'assembleRelease'を実行しています...完了23.3s
GradleタスクassembleReleaseが終了コード1で失敗しました

[✓] Flutter(Channel dev、v1.7.10、Mac OS X 10.13.6 17G65、ロケールen-US)
•/ Users / systemgnk / Desktop / flutterにあるFlutterバージョン1.7.10
•フレームワークリビジョン9a3a7490c8(2日前)、2019-06-25 15:59:15 +0200
•エンジンリビジョンae8e6d9f46
•Dartバージョン2.4.0

[✓] Androidツールチェーン-Androidデバイス用に開発(Android SDKバージョン28.0.3)
•/ Users / systemgnk / Library / Android / sdkにあるAndroidSDK
•AndroidNDKの場所が構成されていません(オプション。ネイティブプロファイリングのサポートに役立ちます)
•プラットフォームandroid-28、build-tools 28.0.3
•Javaバイナリ:/ Applications / Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
•JavaバージョンのOpenJDKランタイム環境(ビルド1.8.0_152-release-1248-b01)
•すべてのAndroidライセンスが受け入れられました。

[✓] Xcode-iOSおよびmacOS用に開発(Xcode 10.1)
•/ Applications / Xcode.app / Contents / DeveloperのXcode
•Xcode10.1、ビルドバージョン10B61
•CocoaPodsバージョン1.6.0

[✓] iOSツール-iOSデバイス用に開発
•ios-deploy1.9.4

[✓] Chrome-Web用に開発
•/ Applications / GoogleChrome.app/Contents/MacOS/GoogleChromeのChrome

[✓] Android Studio(バージョン3.3)
•/ Applications / AndroidStudio.app/ContentsにあるAndroidStudio
•Flutterプラグインバージョン33.3.1
•Dartプラグインバージョン182.5215
•JavaバージョンのOpenJDKランタイム環境(ビルド1.8.0_152-release-1248-b01)

[✓]接続されたデバイス(4つ利用可能)
•x86用に構築されたAndroidSDK•エミュレーター-5554•android-x86•Android7.0(API 24)(エミュレーター)
•システムのiPhone•73145c33ee6d180a2db3d4a96b908ceb4c49065b•ios•iOS12.3.1
•macOS•macOS•darwin-x64•MacOS X 10.13.6 17G65
•Chrome•chrome•web-javascript•GoogleChrome 75.0.3770.100

•問題は見つかりませんでした。

私はまだapkの構築に問題があります。
私は安定したチャネルで32ビットapkを構築するためにのみ利用可能でした。

devやmasterchannel sdkを使用するのではなく、フラッターチームがこのバグを修正するまで待つ必要があると思います。

ありがとう。

@JaeyoungChu 2d-inc / Flare-Flutter#79を参照

@ctrysbitaリンクをありがとう。 チャネルをmasterに変更し、_indicesのタイプをInt32ListからUint16Listに変更しました。
Playストアにアップロードされたapkは64ビットの警告がなく、Playストアのテストページからインストールした後に実行されます。

場所の許可ダイアログがポップアップしない、GoogleマップがiOSに表示されない、http(キャッシュされたネットワークイメージ)で大きな画像ファイルを表示できないなど、開発チャネルフラッターsdkに他の問題があります。 これらの問題は開発チャネルが原因でわかりませんが、安定状態に戻って再度ビルドすると、すべての問題が解消されます。 私はこの問題を掘り下げる時間があまりないので、100%確実ではありません。 申し訳ありませんが、おそらく誰かがこの問題からヒントを得ています。

これが私の解決策でした:

  1. app gradle
splits {
        // Configures multiple APKs based on ABI.
        abi {
            // Enables building multiple APKs per ABI.
            enable true
            // By default all ABIs are included, so use reset() and include to specify that we only
            // want APKs for armeabi-v7a and arm64-v8a.

            // Resets the list of ABIs that Gradle should create APKs for to none.
            reset()

            // Specifies a list of ABIs that Gradle should create APKs for.
            include "armeabi-v7a", "arm64-v8a"

            // Specifies that we do not want to also generate a universal APK that includes all ABIs.
            universalApk false
        }
    }
  1. flutter build apk --release --target-platform=android-arm実行します
  2. app-armeabi-v7a-release.apkをPlayストアにアップロードする
  3. versionCodeインクリメント
  4. flutter build apk --release --target-platform=android-arm64実行します
  5. app-arm64-v8a-release.apkをPlayストアにアップロードする

Google Playストアは、デバイスアーキテクチャに従ってアプリを提供します。 32ビットデバイスは満足しています。64ビットデバイスは満足しています。両方のアーキテクチャに対応しながら、APKサイズが比較的小さいままであることを知って満足しています。

同じAPKに両方のアーキテクチャのサポートを含める場合、アプリのサイズは10MB以上になると予想されます

どこ? 分割セクションをgradleファイルのどこに追加しますか? フラッター{}と依存関係{}の間に追加しましたが、次のように最初のAPKはビルドされません。

android /フォルダーにあるGradleプロジェクトの設定を確認してください。

前回のビルド以降にプロジェクトに加えた変更はこれだけなので、明らかにこれは正しくありません。

@ ArtfulDodgerB92解決策をありがとう。 APKとバージョンを作成するためにどのチャネルを使用しましたか?

どこ? 分割セクションをgradleファイルのどこに追加しますか? フラッター{}と依存関係{}の間に追加しましたが、次のように最初のAPKはビルドされません。

android /フォルダーにあるGradleプロジェクトの設定を確認してください。

前回のビルド以降にプロジェクトに加えた変更はこれだけなので、明らかにこれは正しくありません。

@ ArtfulDodgerB92ここに書かれているように、 android{}セクション内にある必要があります: https//developer.android.com/studio/build/configure-apk-splits.html

参考までに、64ビットサポートに関して次の発表が

https://groups.google.com/forum/#!topic/flutter -announce / oIzwT9EDczc

今後のベータリリースに関するニュースはありますか?

@nohli https://github.com/flutter/flutter/issues/35291への修正(コミットを元に戻す)を取得するために、ベータリリースを数日遅らせました ベータ版へのリリースをできるだけ早くリリースするよう取り組んでいます。

これは現在、リリースv1.7.8+hotfix.2のベータチャネルで公開されています

これは現在、リリースv1.7.8+hotfix.2のベータチャネルで公開されています

リリースapkを生成する方法を教えてください。

これは現在、リリースv1.7.8+hotfix.2のベータチャネルで公開されています

リリースapkを生成する方法を教えてください。

指示は次のとおりですhttps://flutter.dev/docs/deployment/android

これは現在、リリースv1.7.8+hotfix.2のベータチャネルで公開されています

リリースapkを生成する方法を教えてください。

指示は次のとおりですhttps://flutter.dev/docs/deployment/android

私は試しましたが、32で働いていません

私は試しましたが、32で働いていません

32とはどういう意味ですか? 「ファットAPKを生成でき、そのAPKは64ビットデバイスでは機能しますが、32ビットデバイスではクラッシュします」のように?

flutter doctorの結果をステップバイステップで投稿できますか(たとえば、これはprogard https://flutter.dev/docs/deployment/android#step-2---enable-のステップ2です)難読化および縮小化)、APKまたはAABを生成していますか?また、どのデバイスをテストしていますか?

まだ置く必要がありますか
ベータ版の修正後、gradleのndk { abiFilters 'armeabi-v7a' , 'x86', 'armeabi' }は不要になりましたか?

必要のない@ksamj

私は試しましたが、32で働いていません

32とはどういう意味ですか? 「ファットAPKを生成でき、そのAPKは64ビットデバイスでは機能しますが、32ビットデバイスではクラッシュします」のように?

flutter doctorの結果をステップバイステップで投稿できますか(たとえば、これはprogard https://flutter.dev/docs/deployment/android#step-2---enable-のステップ2です)難読化および縮小化)、APKまたはAABを生成していますか?また、どのデバイスをテストしていますか?

ドクターサマリー(すべての詳細を表示するには、フラッタードクター-vを実行します):
[✓]フラッター(チャンネルベータ版、v1.7.8 + hotfix.2、Mac OS X 10.14.5 18F132、ロケールru-RU)

[✓] Androidツールチェーン-Androidデバイス用に開発(Android SDKバージョン28.0.3)
[✓] Xcode-iOSおよびmacOS用に開発(Xcode 10.2.1)
[✓] iOSツール-iOSデバイス用に開発
[✓] Android Studio(バージョン3.4)
[✓]接続されたデバイス(1つ利用可能)

•問題は見つかりませんでした。

ドクターサマリー(すべての詳細を表示するには、フラッタードクター-vを実行します):
[✓]フラッター(チャンネルベータ版、v1.7.8 + hotfix.2、Mac OS X 10.14.5 18F132、ロケールru-RU)

[✓] Androidツールチェーン-Androidデバイス用に開発(Android SDKバージョン28.0.3)
[✓] Xcode-iOSおよびmacOS用に開発(Xcode 10.2.1)
[✓] iOSツール-iOSデバイス用に開発
[✓] Android Studio(バージョン3.4)
[✓]接続されたデバイス(1つ利用可能)

•問題は見つかりませんでした。
ドクターサマリー(すべての詳細を表示するには、フラッタードクター-vを実行します):
[✓]フラッター(チャンネルベータ版、v1.7.8 + hotfix.2、Mac OS X 10.14.5 18F132、ロケールru-RU)

[✓] Androidツールチェーン-Androidデバイス用に開発(Android SDKバージョン28.0.3)
[✓] Xcode-iOSおよびmacOS用に開発(Xcode 10.2.1)
[✓] iOSツール-iOSデバイス用に開発
[✓] Android Studio(バージョン3.4)
[✓]接続されたデバイス(1つ利用可能)

•問題は見つかりませんでした。
APKをビルドする
指示どおりにすべてを実行しましたが、32ビットにはインストールされません

指示どおりにすべてを実行しましたが、32ビットにはインストールされません

32ビットデバイスへの32ビットapkのインストールが成功しなかったことを示すスクリーンショット/ログ、およびそれはどのデバイスモデルですか?

こんにちは、みんな、

v1.7.8+hotfix.2が安定したチャンネルにリリースされたため、この修正はすべてのチャンネルで利用できるようになりました。 皆さんの忍耐と支援に感謝します!

指示どおりにすべてを実行しましたが、32ビットにはインストールされません

32ビットデバイスへの32ビットapkのインストールが成功しなかったことを示すスクリーンショット/ログ、およびそれはどのデバイスモデルですか?

助けてくれてありがとう、私はappbundleを構築しようとしました、そしてそれはうまくいきました。

@tvolkert同じ問題を確認してください。 https://github.com/flutter/flutter/issues/31962#issuecomment -509458960

@ nimesh1997その問題はこれとは何の関係もありません。 リンクされた問題で提供されている回答が役に立たなかった場合は、問題を含むStackoverflowの質問を投稿することを検討してください。

@ tvolkert-明確にするために-上記の修正プログラムは、フラッタードキュメントの指示に従って個別のapkを構築するために使用できます、正しいですか?
したがって、以前の部分的な解決策で説明したように、gradleファイルに他の変更を加える必要はありません。
あなたとチームの他のメンバーに素晴らしい仕事と時間通りの配達をありがとう!

最新のホットフィックスを使用してアプリの1つをコンパイルしました。 その結果、コンパイルされたapp-production-armeabi-v7a-release.apkはGalaxy S3 mini(Android OS 4.1.2)で実行できません。スプラッシュ画面の後、アプリは通知なしに閉じます。
ただし、GalaxyS8などの64台の電話でまったく同じapkを正常に実行できます。
コマンドラインからフラッターを実行する方法は次のとおりです。

flutter build apk --target = "lib / config / main_production.dart" --flavor = product --split-per-abi

これが私のflutter doctor -v

[√]フラッター(チャネル安定版、v1.7.8 + hotfix.2、Microsoft Windows [バージョン10.0.17763.557]、ロケールen-US)
•E:\ DevToolsflutterのFlutterバージョン1.7.8+ hotfix.2
•フレームワークリビジョン2e540931f7(7日前)、2019-07-02 09:31:07 -0700
•エンジンリビジョンb1cb0d9e9b
•Dartバージョン2.4.0

[√] Androidツールチェーン-Androidデバイス用に開発(Android SDKバージョン28.0.3)
•E:\ DevTools \ Android \ SdkにあるAndroidSDK
•AndroidNDKの場所が構成されていません(オプション。ネイティブプロファイリングのサポートに役立ちます)
•プラットフォームandroid-28、build-tools 28.0.3
•ANDROID_SDK_ROOT = E:\ DevTools \ Android \ Sdk
•Javaバイナリ:E:\ DevTools \ android-studio \ jre \ bin \ java
•JavaバージョンのOpenJDKランタイム環境(ビルド1.8.0_152-release-1343-b01)
•すべてのAndroidライセンスが受け入れられました。

[√] Android Studio(バージョン3.4)
•E:\ DevTools \ android-studioのAndroidStudio
•Flutterプラグインバージョン37.0.1
•Dartプラグインバージョン183.6270
•JavaバージョンのOpenJDKランタイム環境(ビルド1.8.0_152-release-1343-b01)

[√]接続されたデバイス(1つ利用可能)
•x86用に構築されたAndroidSDK•エミュレーター-5554•android-x86•Android8.1.0(API 27)(エミュレーター)

•問題は見つかりませんでした。

さらに-脂肪APKも実行することはできません- (同じ腕-32デバイス上で)インストール&だけが閉じ、それを実行した後。
問題の処理方法と解決方法を教えてください。ありがとうございます。

@ angel1stここでAABやAPKファイルを共有して、トラブルシューティングに役立てることができますか?

@ truongsinh-確かに、ここにあります:

app-production-releases.zip

私は両方のAPKをアップロードしましたが、申し立てられた問題は上記のようにarm-32バージョンにあります。

それまでの間、誰かがとても親切で、8月1日以降にGoogle Playストアで何が起こるかを教えてくれますか?あなたがarm-64バージョンのアプリを持っていない場合-apkは停止しますarm64デバイスに提供されますか、それともarm32のみのバージョンまたはその両方をアップロードできなくなりますか?

@ angel1st Android 4.4.2 Galaxy S4でアプリ(app-production-armeabi-v7a-release.apk)を実行できました。 素敵なアプリ!

これはGalaxyS3 mini / Android OS4.1.2に非常に固有のものだと思います。 その間に、問題を再現できるかどうかを確認するために、この構成を要求しました。

@ angel1stは、最も有益な情報源です: https//android-developers.googleblog.com/2019/01/get-your-apps-ready-for-64-bit.html

要件[64ビットのもの]は適用されません:

  • 現在64ビットコードをサポートしていないフォームファクタであるWearOSまたはAndroidTVを明示的にターゲットとするAPKまたはアプリバンドル。
  • Android 9Pie以降を実行しているデバイスに配布されていないAPKまたはアプリバンドル。

2019年8月1日以降:

  • Google Playに公開する場合、32ビットバージョンに加えて64ビットバージョンを提供するには、ネイティブコードを含むすべての新しいアプリとアプリのアップデートが必要です。

つまり、既存のアプリの新しいバージョンをアップロードしたり、コンプライアンスなしで新しいアプリを公開したりすることはできませんが、アプリは引き続き配布されます。

@ angel1st Android OS4.1.2再現することができました。

logcatは次のとおりです。

[ERROR:flutter/fml/platform/posix/native_library_posix.cc(16)] Could not open library 'libapp.so' due to error 'Cannot load library: load_library[1093]: Library 'libapp.so' not found'.
07-10 00:16:50.298 8739-8739/? E/flutter: [ERROR:flutter/fml/platform/posix/native_library_posix.cc(16)] Could not open library 'libapp.so' due to error 'Cannot load library: load_library[1093]: Library 'libapp.so' not found'.
07-10 00:16:50.298 8739-8739/? E/flutter: [ERROR:flutter/runtime/dart_vm_data.cc(19)] VM snapshot invalid and could not be inferred from settings.
07-10 00:16:50.298 8739-8739/? E/flutter: [ERROR:flutter/runtime/dart_vm.cc(238)] Could not setup VM data to bootstrap the VM from.
07-10 00:16:50.298 8739-8739/? E/flutter: [ERROR:flutter/runtime/dart_vm_lifecycle.cc(89)] Could not create Dart VM instance.
07-10 00:16:50.298 8739-8739/? A/flutter: [FATAL:flutter/shell/common/shell.cc(218)] Check failed: vm. Must be able to initialize the VM.

その間にhttps://github.com/flutter/flutter/issues/35838を提出しました。

cc @ jason-simmons

@ truongsinh-概要をありがとう。

@ blasten-迅速なフィードバックに感謝します。 私の知る限り、ATMでできることは何もありませんが、指を交差させたモニター#35838は、今月のある時点で解決されるのでしょうか。 最新のホットフィックスでコンパイルされたAndroid4.1.2の他のapkにも同じ問題が発生すると思いますか?
参考までに-以前のフラッター安定バージョンでコンパイルされたアプリapkにはこの問題はありません(Android4.1.2を搭載したS3miniは私のテストデバイスの1つです)。

今日、他の誰かがグーグルからメールを受け取った。

「必要なアクション:2019年8月1日までにアプリを64ビット準拠に更新してください」

すでに32ビットバージョンと64ビットバージョンの両方を公開していますが?

それは言う

2019年8月1日までに、ネイティブコードを使用するすべてのアプリは、アップデートを公開するために64ビットバージョンを提供する必要があります。 このメールの送信時点で、少なくとも1つのアプリ*がまだ要件を満たしていません

*注:このアプリのリストは、このメールの送信時点でのGoogleの最善の見積もりを反映しています。 (...)

グーグルの「最良の見積もり」は正しくないと思いますか?

Flutterチームに感謝します。 Flutterをアップグレードし、安定したチャネル上に構築すると、警告が消えます。
テスターに​​バグがないことを望んでいますが、これまでのところ、実際のデバイスにはまだバグは見つかりませんでした。

Team Flutterに感謝します。修正プログラムを使用してFlutterをアップグレードすると、.aabをビルドするときにこの問題が修正されます。

この成果を上げてくれたフラッターチームに感謝します。 プログラムを続行します。

@ angel1st一部のSamsungデバイスでも問題が発生しています。

https://github.com/flutter/flutter/issues/36128

@ abdullayev007-ありがとう! #35838をご覧になることをお勧めします。何らかの形で関連している可能性があります。

指示どおりにすべてを実行しましたが、32ビットにはインストールされません

32ビットデバイスへの32ビットapkのインストールが成功しなかったことを示すスクリーンショット/ログ、およびそれはどのデバイスモデルですか?
IMG-20190710-WA0000

デバイスはSamsungM10です

@tvolkert次の問題を修正するための解決策を教えてください。
https://github.com/flutter/flutter/issues/36063

ありがとう

開発チャネルからの最新バージョンのフラッター(v1.8.4)を試しました。 私も新しいプロジェクトを作成しました-バニラフラッタープロジェクトとそれからリリース署名されたバージョンを構築しようとしました。 ビルドされ、アプリのサイズはわずか10.4mbです。 しかし、このトレイルで上記のすべての手順を試しましたが、何の役にも立ちませんでした。 誰かがビルドを実行するための一連の明確な手順を示し、それをaabまたはapkを使用してエミュレーターとローカルデバイスを使用して、フラッターからプレイストアにプッシュできますか? 1週間以上経ちましたが、Androidではprodに移行せず、フラッターに基づいてプロジェクトを構築しましたが、iOSでappstoreに公開することはできます。 いくつかの助けは素晴らしいでしょう。

`[✓] Flutter(Channel dev、v1.8.4、Mac OS X 10.14.5、ロケールen-US)
•/ Users / muthu / muthu / devapps / flutterにあるFlutterバージョン1.8.4
•フレームワークリビジョン954714c967(7日前)、2019-08-02 10:10:39 -0700
•エンジンリビジョン26368225b5
•Dartバージョン2.5.0(ビルド2.5.0-dev.1.0 bd049f5b53)

[!] Androidツールチェーン-Androidデバイス用に開発(Android SDKバージョン29.0.1)
•../ Library / Android / sdkにあるAndroidSDK
•AndroidNDKの場所が構成されていません(オプション。ネイティブプロファイリングのサポートに役立ちます)
•プラットフォームandroid-29、build-tools 29.0.1
•Javaバイナリ:/ Applications / Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
•JavaバージョンのOpenJDKランタイム環境(ビルド1.8.0_152-release-1343-b01)
✗Androidライセンスのステータスは不明です。
Android SDKManagerを再インストールまたは更新してみてください。
https://developer.android.com/studio/#downloadsを参照するか、 https: //flutter.dev/setup/#android-setupにアクセスして
詳細な手順については。

[✓] Xcode-iOSおよびmacOS用に開発(Xcode 10.3)
•/ Applications / Xcode.app / Contents / DeveloperのXcode
•Xcode10.3、ビルドバージョン10G8
•CocoaPodsバージョン1.7.3

[✓] Android Studio(バージョン3.4)
•/ Applications / AndroidStudio.app/ContentsにあるAndroidStudio
•Flutterプラグインバージョン38.2.1
•Dartプラグインバージョン183.6270
•JavaバージョンのOpenJDKランタイム環境(ビルド1.8.0_152-release-1343-b01)

[✓] VS Code(バージョン1.36.1)
•/ Applications / Visual StudioCode.app/ContentsのVSコード
•Flutter拡張バージョン3.3.0

[✓]接続されたデバイス(3つ利用可能)
•x86用に構築されたAndroidSDK•エミュレーター-5554•android-x86•Android9(API 28)
(エミュレータ) `

@muthufmass 、機能していないものと障害を再現する方法の詳細を記載した新しい問題を提出してください。 ありがとう!

誰かが、プレイストアにプッシュできるビルドを実行するための一連のステップを明確に示すことができますか?

https://flutter.dev/docs/deployment/android

誰かが、プレイストアにプッシュできるビルドを実行するための一連のステップを明確に示すことができますか?

https://flutter.dev/docs/deployment/android

これらの手順はすでに実行されており、prodリリースビルドでは機能しません。 デバッグビルドは機能します! デバッグビルドでは、フラッターの.soファイルは存在しますが、リリースバージョンには存在しないという違いがはっきりとわかります。 それらは、apkをエミュレーターまたは署名されたapkを持つデバイスにインストールする際に問題を引き起こすものです。

@muthufmass 、機能していないものと障害を再現する方法の詳細を記載した新しい問題を提出してください。 ありがとう!

上記のクリアされた手順を共有したことを願っています。 fluttercreateを使用した新鮮なアプリの作成-最新のfluttersdkを使用したバニラコード。 デバッグバージョンはスムーズに実行されますが、リリースバージョンをビルドできません。 サイズに関するapkのprodバージョンとdevバージョンの大きな違い。 上記のすべての手順を試しましたが、実行するリリースバージョンをビルドできませんでした。 ビルドは非常に高速に行われ、ファイルはリリース時に11 mb未満になりますが、debugapkでは約40mb以上になります。 デバッグapkは機能しますが、prodリリースに署名されたapkはインストールされません。

Screen Shot 2019-08-09 at 8 29 12 PM

@muthufmass新しい問題を提出するときは、Android SDKのバージョン、デバイスモデル、医師の出力、およびflutter createから始まる手順を含めてください。

@muthufmassおよびadblogcat出力。

この問題は解決されました。適切に追跡できるように、新しい問題を提出してください。

今すぐ別のチケットを調達しましたhttps://github.com/flutter/flutter/issues/37935

プロジェクトにフレーバーがあり、x64とx32の両方をサポートしたい場合は、jniLibsフォルダーをフレーバーフォルダーに追加するだけで、次のように機能します。
image

adobe animateccでこれを行うにはどうすればよいですか
詳細情報が必要

Google Play Consoleは最近、さまざまな警告のためにロールアウトボタンの無効化を開始しました。 そして、それらの警告の1つは、.aabファイルの代わりにapkを使用しています。 プロジェクトがAndroidStudioまたはUnityで作成されている場合は、.aabファイルを作成するためのソリューションがあります。 しかし、apkがAnimateCCまたはHaxe / Flash Developによって作成された場合はどうなりますか? 変換する方法はありますか?

@newapproachあなたのコメントがFlutterと関係があるかどうかは私にはわかりませんか? 詳細を記載した新しい問題を提出していただけませんか? ありがとう!

同じ問題がありますが、flutter.soは「armeabi-v7aフォルダー」に含まれていません。
x86およびarmeabi-v7a用のサードパーティライブラリのみがありますが、arm64はありません。
「armeabi-v7awith
ndk {
abiFilters "armeabi-v7a" //動作しません "armeabi"、 "x86"、
}
@ mravn-googleがandroid-armに提案するようにtarget-platformとして設定します。

アーチを指定せず、ライブラリを含まないAPK
screen shot 2018-07-26 at 21 06 53

ライブラリがあり、アームスペックがないAPK
screen shot 2018-07-26 at 21 10 30

アーチを指定してライブラリを含めるAPK
screen shot 2018-07-26 at 21 12 58

さらなるステップをデバッグする方法について何か提案はありますか?

私もこのエラーを見つけました、それは修正されましたか? 私を助けることができますか?

Stack Overflowで質問するか、新しいバグを開くことをお勧めします。 このクローズされたバグが、上記の問題の解決を支援する人々にとって適切な場所になるとは思えません。 ありがとう!

これが私の解決策でした:

  1. app gradle
splits {
        // Configures multiple APKs based on ABI.
        abi {
            // Enables building multiple APKs per ABI.
            enable true
            // By default all ABIs are included, so use reset() and include to specify that we only
            // want APKs for armeabi-v7a and arm64-v8a.

            // Resets the list of ABIs that Gradle should create APKs for to none.
            reset()

            // Specifies a list of ABIs that Gradle should create APKs for.
            include "armeabi-v7a", "arm64-v8a"

            // Specifies that we do not want to also generate a universal APK that includes all ABIs.
            universalApk false
        }
    }
  1. flutter build apk --release --target-platform=android-arm実行します
  2. app-armeabi-v7a-release.apkをPlayストアにアップロードする
  3. versionCodeインクリメント
  4. flutter build apk --release --target-platform=android-arm64実行します
  5. app-arm64-v8a-release.apkをPlayストアにアップロードする

Google Playストアは、デバイスアーキテクチャに従ってアプリを提供します。 32ビットデバイスは満足しています。64ビットデバイスは満足しています。両方のアーキテクチャに対応しながら、APKサイズが比較的小さいままであることを知って満足しています。

同じAPKに両方のアーキテクチャのサポートを含める場合、アプリのサイズは10MB以上になると予想されます

動作しません..ピクセル2のプレイストアで表示すると、このデバイスではサポートされていないと表示されます

それは機能します。多くの有名なアプリがこの方法で複数のAPKをデプロイし、Playストアが適切なAPKを適切なデバイスに長い間提供できるようにしています。

ただし、アプリバンドルはこれを行うための最新の方法です。

それは機能します。多くの有名なアプリがこの方法で複数のAPKをデプロイし、Playストアが適切なAPKを適切なデバイスに長い間提供できるようにしています。

ただし、アプリバンドルはこれを行うための最新の方法です。

なぜそれがピクセル2のプレイストアに表示されないのかわかりません...念のために、正確に2回フォローします。
アプリバンドルを使用しましたが、アプリがクラッシュするため、代替手段を探しています

このスレッドは、閉じられた後、最近のアクティビティがないため、自動的にロックされています。 それでも同様の問題が発生する場合は、 flutter doctor -vの出力や問題の最小限の再現など、新しいバグを開いてください。

このページは役に立ちましたか?
0 / 5 - 0 評価