Flutter: Mendukung APK dengan binari 32-bit dan 64-bit di dalamnya

Dibuat pada 15 Jun 2018  ·  286Komentar  ·  Sumber: flutter/flutter

menggunakan flutter build apk --release --flavor pro make file apk , tetapi arm64-v8a tidak menyertakan libflutter.so file.so peluncuran aplikasi gagal.
ketika saya menambahkan --target-platform=android-arm64 : flutter build apk --release --flavor pro --target-platform=android-arm64 , file apk termasuk jadi flie. Tetapi peluncuran aplikasi gagal pada cpu 32 bit.
apa yang bisa saya lakukan, file apk dapat berjalan di 64 dan 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

Saya membuat proyek baru, debug atau rilis, bekerja dengan baik. perbedaan dari proyek baru dari proyek saya adalah saya menambahkan file so pihak ketiga

image

dimana masalahnya ?

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

Komentar yang paling membantu

Saya memiliki masalah yang sama, membangun untuk 32-bit akan mengecualikan perangkat 64-bit, itu berjalan pada mereka. Membangun untuk 64 dengan menetapkan --target-platform android-arm64 berfungsi pada perangkat 64-bit, tetapi mogok pada perangkat 32-bit. Google juga akan membatasi unggahan apk menjadi 64-bit pada 2019.

Tim Flutter, tolong selesaikan masalah dasar ini!

Semua 286 komentar

AFAIK, saat ini, Flutter hanya akan menambahkan libflutter.so ke satu folder platform yang dipilih di APK rilis. Solusi yang berhasil bagi saya adalah memaksa build.gradle untuk melakukan 32bit saja (tidak termasuk semua perpustakaan 64bit + Intel)

release {

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

cc @Hixie

@swavkulinski bagaimana Anda akan merilis ke apks ke playstore?

Punya masalah yang sama - tetapi flutter.so tidak termasuk dalam folder "armeabi-v7a.
Hanya memiliki perpustakaan pihak ketiga untuk x86 dan armeabi-v7a - tetapi tidak ada arm64.
Ingin membuat flutter hanya untuk "armeabi-v7a dengan
ndk{
abiFilters "armeabi-v7a" // juga tidak berfungsi"armeabi", "x86",
}
dan tetapkan sebagai platform target seperti yang disarankan @mravn-google ke Android-arm.

APK tanpa menentukan lengkungan dan tidak menyertakan perpustakaan
screen shot 2018-07-26 at 21 06 53

APK dengan pustaka dan tanpa spesifikasi lengan
screen shot 2018-07-26 at 21 10 30

APK dengan lengkungan yang ditentukan dan sertakan perpustakaan
screen shot 2018-07-26 at 21 12 58

Adakah saran bagaimana cara men-debug langkah lebih lanjut?

@xxseabxx saya memiliki masalah yang sama

Saya memiliki masalah yang sama, membangun untuk 32-bit akan mengecualikan perangkat 64-bit, itu berjalan pada mereka. Membangun untuk 64 dengan menetapkan --target-platform android-arm64 berfungsi pada perangkat 64-bit, tetapi mogok pada perangkat 32-bit. Google juga akan membatasi unggahan apk menjadi 64-bit pada 2019.

Tim Flutter, tolong selesaikan masalah dasar ini!

Tim Flutter, tolong selesaikan masalah dasar ini!

Jadi, apakah saya salah dengan mengatakan bahwa flutter hanya dapat mendukung rilis apk untuk 32 atau 64 bit, tetapi tidak keduanya?

ada keberuntungan di sini?

Saya pikir komentar xxseabxx mungkin berhasil tetapi saya belum mencobanya ...

Saya juga mengalami masalah yang sama.

Di semua dependensi saya, saya mengisolasi setidaknya satu paket yang menyebabkan masalah, saya mengisi laporan bug yang sesuai: https://github.com/azihsoyn/flutter_mlkit/issues/36

Untuk mengisolasi masalah, untuk setiap ketergantungan/plugin saya:

1) Buat proyek flutter kosong

2) Ganti main.dart dengan

kode contoh paket (mis: https://pub.dartlang.org/packages/flutter_html_view#-example-tab-)

3) Perbarui pubspec.yaml yang sesuai

4) lari

$ flutter build apk

Ternyata yang dibuat adalah flutter_mlkit.

Saya ingin dapat menargetkan arsitektur 32 & 64.

Punya masalah yang sama. --target-platform=Android-arm64 berfungsi untuk saya, tetapi saya ingin mendukung 32 bit hingga Google menarik steker pada 32 bit

Tim Flutter, tolong selesaikan masalah dasar ini!

banyak SDK ketiga tidak berfungsi, saya pikir ini mendesak

Saya dapat mereproduksi ini ketika menambahkan Mapbox ke aplikasi Android.

Saya memiliki masalah yang sama juga. Saya menggunakan baiduMap di Proyek saya, model bebug baik-baik saja, rilis crash.
pengguna flutter build apk --release --target-platform=android-arm64 di ponsel saya baik-baik saja, tetapi ponsel 32 bit akan mogok. Tim Flutter, harap selesaikan masalah ini sesegera mungkin.

Mirip dengan https://github.com/azihsoyn/flutter_mlkit/issues/36 , ini berfungsi untuk saya, apk dapat berjalan di ponsel 32bit dan 64bit. @peace2knowledge

ini seharusnya menjadi masalah yang sangat penting untuk rilis apk

apakah ada solusi untuk masalah ini?

  1. ekstrak lib/armeabi-v7a/libflutter.so dari $<FLUTTER>/bin/cache/artifacts/engine/android-arm-release/flutter.jar
  2. salin file armeabi-v7a/libflutter.so ke $<project>/android/jniLibs/armeabi-v7a/
  3. ubah $<project>/android/app/build.gradle seperti di bawah ini:
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"
            }
        }
}
    }

Untuk NDK, toolchain 64-bit memerlukan minSdkVersion >= 21.

Ini membebaskan saya (dengan set minSdkVersion yang tepat):

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

Hapus semua abiFilters, ini berfungsi untuk saya.

@zoechi @Hixie benjolan lembut. Saya juga mengalami ini ketika mencoba berintegrasi dengan aplikasi yang ada, yang merupakan kasus penggunaan terpenting kami saat ini.

minddk=21, tetapi belum memperbarui platform target

@neiljaywarner acungan jempol pada komentar awal akan lebih efektif untuk meningkatkan prioritas

  1. ekstrak lib/armeabi-v7a/libflutter.so dari $<FLUTTER>/bin/cache/artifacts/engine/android-arm-release/flutter.jar
  2. salin file armeabi-v7a/libflutter.so ke $<project>/android/jniLibs/armeabi-v7a/
  3. ubah $<project>/android/app/build.gradle seperti di bawah ini:
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"
            }
        }
}
    }

Ini tidak berhasil untuk saya--ini menghasilkan APK yang tidak memiliki folder lib (dan dengan demikian berukuran setengah dari apk saya sebelumnya).

Kami juga menemukan bahwa jika kami menerapkan solusi 32-bit saja yang telah diposting beberapa orang (mis. https://medium.com/flutterpub/flutter-app-couldnt-find-libflutter-so-c95ad81cbccd) hasilnya tidak -aplikasi kinerja. Khususnya dalam satu tes pada Samsung S6 & S9 kami melihat pengguliran yang sangat lambat pada daftar besar.

Saya tidak berpikir masalahnya hanya arm64 yang hilang libflutter.so .

Saya mencoba menambahkan perpustakaan yang hilang ke APK dengan membangun untuk arm64, menyalin libflutter.so dan kemudian membangun kembali dan secara manual menambahkan perpustakaan arm64 ke APK, menyelaraskan kembali dan menandatangani ulang:

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 yang dihasilkan memiliki libflutter.so untuk armeabi-v7a dan arm64-v8a, tetapi mogok saat diluncurkan dengan kesalahan berikut:

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'

Saya kira aset snapshot yang terpisah perlu dikirimkan untuk setiap lengkungan juga. Untuk saat ini membangun dua APK terpisah adalah satu-satunya solusi yang bekerja untuk saya.

ini adalah masalah yang cukup menyebalkan untuk dihadapi setelah menghabiskan waktu benar-benar menulis frontend di flutter hanya untuk menemukan rilis tidak membangun apk dengan benar.

apakah saya akan mengalami masalah yang sama setelah saya melakukan iOS?

Jam berapa bisa menyelesaikan masalah ini?

Apakah ini hanya karena file gradle kami tidak tahu cara menggabungkan semua bit yang tepat untuk keduanya? @jason-simmons @cbracken mungkin tahu?

Atau @FaisalAbid mungkin?

Apakah ini hanya karena file gradle kami tidak tahu cara menggabungkan semua bit yang tepat untuk keduanya? @jason-simmons @cbracken mungkin tahu?

Atau @FaisalAbid mungkin?

Dengan bit yang tepat, saya berasumsi maksud Anda lebih dari libflutter.so, per komentar ini: https://github.com/flutter/flutter/issues/18494#issuecomment -449557182

Saat ini saya pikir satu-satunya solusi adalah membangun APK 32-bit sampai ada perbaikan. Namun perhatikan bahwa kami telah melihat masalah kinerja dengan 32-bit (walaupun kode tidak optimal dengan daftar besar).

Ini berfungsi dengan baik bagi saya untuk membuat APK 64-bit dan 32-bit terpisah dan mengunggah keduanya ke Google (mereka menangani penyediaan APK yang benar ke perangkat yang benar secara otomatis).

Anda melakukan satu build dengan abiFilters disetel ke armeabi-v7a dan --target-platform=android-arm , unggah APK itu, lalu lakukan build lain dengan abiFilters set ke arm64-v8a dan --target-platform=android-arm64 dan unggah yang itu juga.

Perhatikan bahwa Anda juga perlu menggunakan kode versi yang berbeda untuk setiap APK, jadi sertakan sesuatu dalam kode versi untuk menunjukkan bahwa itu 64 atau 32 bit, sama seperti yang Anda lakukan untuk DPI atau API level.

Saat ini opsi terbaik adalah mengatur abiFilters secara kondisional dari platform target

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

Masalah yang saya miliki adalah sekarang saya perlu mengunggah dua apk dengan kode versi yang berbeda
Perbaikan nyata untuk ini adalah mampu membangun bundel Android dengan beberapa platform target. Bundel aplikasi sedang dalam flutter master saat ini tetapi saya tidak dapat membuatnya berfungsi untuk ini

Play store akan membutuhkan 64 bit mulai 1 Agustus.

Dengan asumsi masih akan ada perangkat 32bit yang ingin menjalankan aplikasi kami setelah 1 Agustus, bagaimana memastikan 32bit DAN 64bit disertakan dalam build rilis?

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

_Semua aplikasi baru dan pembaruan aplikasi yang menyertakan kode asli wajib menyediakan versi 64-bit selain versi 32-bit saat memublikasikan ke Google Play._

Persyaratan ini sekarang mudah dipenuhi dengan aplikasi Flutter hanya dengan membuat dua APK – satu untuk perangkat 32-bit dan satu lagi untuk perangkat 64-bit – dan mengunggah keduanya sebagai bagian dari rilis yang sama. Google Play akan secara otomatis memberikan APK yang sesuai ke perangkat yang sesuai. Saya melakukan ini dan itu bekerja dengan baik. Saya setuju dengan komentator lain bahwa itu tidak _ideal_, tetapi IMO sebenarnya tidak terlalu menjadi masalah untuk menjadikan ini bagian dari alur kerja Anda.

Akan sangat bagus jika ini bisa diperbaiki dalam waktu dekat. Pendekatan multi-APK hanyalah solusi sementara hingga Flutter membuat APK dengan beberapa versi arsitektur .so, seperti yang dilakukan oleh proyek Android lainnya.

Ini membutuhkan banyak penanganan manual (kode versi, sistem build, otomatisasi) ditambah Android App Bundle yang seharusnya membebaskan pengembang dari langkah-langkah pembuatan manual.

Saat ini masalah ini hanya menyebutkan versi 32 & 64 bit, tetapi ada juga x86, x64 plus beberapa pengembang di China masih berbicara tentang mendukung mips.

Bukankah flutter seharusnya mendukung sebanyak mungkin dari 7 arsitektur Android dengan ukuran apk terkecil di luar kotak?

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

@MarcelEdward Seharusnya - namun IMHO ukuran APK bukanlah aspek yang paling penting, mengingat Android sekarang sepenuhnya mendukung App Bundle (aab) dan pengguna akhir akan tetap mengunduh build yang dioptimalkan untuk ponsel mereka.

Untuk ukuran APK khusus platform yang harus dioptimalkan/sekecil mungkin.

Selama pengembangan, mungkin sulit untuk menginstal ulang APK ukuran penuh setiap kali Anda mengubah kode asli. Triknya adalah menggunakan abifilters untuk membatasi build debug ke arsitektur ponsel pengujian Anda. Saya tidak yakin apakah ini relevan sekarang, mengingat Flutter mendukung hot reload.

https://github.com/flutter/flutter/issues/17829 Tentang bundel aplikasi aap, tetapi saya hanya dapat menemukan 32bit saat kompilasi Dengan flutter build apk

Jadi ketika saya memahami richt maka kita harus membangun dua versi serperate dengan setidaknya 32 dan 64 mengupload keduanya dan kemudian app stroe Akan secara ajaib membangun aap sehingga konsumen Mendapatkan Versi yang dioptimalkan untuk arsitektur spesifik mereka

@MarcelEdward Play store tidak membuat bundel aplikasi. Itu hanya menyajikan APK yang sesuai untuk perangkat berdasarkan arsitektur perangkat. Ini telah didukung jauh sebelum app bundle hadir, tidak hanya untuk arsitektur tetapi juga untuk ukuran/resolusi layar, level API, dan pembeda lainnya. Anda dapat membaca lebih lanjut tentang ini di sini .

Anda dapat melihat contoh bagus tentang ini dengan melihat 13 varian Google Maps di sini (perhatikan bahwa APKMirror tidak ada hubungannya dengan fungsi ini selain menjadi cara mudah untuk mendapatkan daftar varian untuk aplikasi tertentu). Play Store menyajikan APK yang sesuai dari varian ini untuk perangkat Anda berdasarkan karakteristiknya.

Jika Anda menggunakan bundel aplikasi, maka Anda hanya perlu mengunggah bundel sekali daripada mengunggah beberapa APK, tetapi pemahaman saya adalah bahwa Play Store kemudian menghasilkan berbagai varian APK untuk Anda, sehingga hasil akhirnya serupa tetapi ada lebih sedikit pekerjaan bagi Anda untuk mengotomatisasi diri sendiri. (Paket aplikasi juga mendukung modul baru yang dimuat secara dinamis, tapi itu cerita lain.)

Jadi sepertinya fitur yang diinginkan di sini adalah dapat menjalankan flutter build dengan dua argumen --target-platform dan flutter secara otomatis memasukkan kedua arsitektur ke dalam APK, benar?

@Hixie tidak libflutter.so hanya dihasilkan sekali per versi flutter dan jenis rilis? Dalam hal ini Anda akan memiliki 8 varian (32,64,x86,x86_64). Saya pikir itu hanya harus dipilih ketika aplikasi flutter dibangun dan disaring tergantung pada ponsel target atau kasus penggunaan. Gradle dapat melakukan penyaringan dengan cukup baik.

Apa yang dimiliki ponsel adalah sesuatu yang levelnya cukup rendah, saya tidak tahu arsitektur apa yang dimiliki orang-orang yang menggunakan aplikasi kami. Flutter mengkompilasi 32bit ketika tidak ada arsitektur yang ditentukan jadi saya akan menganggap 32bit cocok untuk semua. Tapi sekarang permainannya store akan membutuhkan 64bit pada bulan Agustus, jadi ketika 32bit cocok untuk semua dan 64bit diperlukan maka keduanya harus masuk ke build rilis?

Saya sendiri belum memiliki ponsel Android, jadi saya akan menganggapnya akan berfungsi jika ada di simulator. Sampai pengguna aplikasi kami menyatakan sebaliknya.

@MarcelEdward2 Ini bukan hanya 32-bit vs 64-bit. Ada empat arsitektur yang didukung oleh Android NDK modern:

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

Saat ini Flutter secara default membuat APK yang berisi kode asli yang dikompilasi hanya untuk armeabi-v7a. Ini akan berjalan dengan baik pada arm64-v8a, meskipun dengan penalti kinerja dibandingkan dengan sesuatu yang dikompilasi untuk arm64-v8a secara asli. Namun, itu akan berjalan di bawah emulator ARM pada x86 atau x86_64, dengan asumsi perangkat memaketkan satu. Jika perangkat x86/x86_64 tidak memiliki emulator ARM, itu tidak akan berjalan sama sekali.

Sekali lagi, persyaratan Agustus tidak mengharuskan Anda membuat satu APK universal atau AAB yang berisi kedua arsitektur tersebut. Ini hanya mengharuskan setiap rilis yang Anda buat berisi (setidaknya) satu APK yang cocok untuk perangkat 64-bit. Modifikasi di Flutter untuk memungkinkan membangun satu APK/AAB universal dengan dukungan untuk beberapa arsitektur akan bagus dalam hal alur kerja pengembang, tetapi Anda dapat memenuhi persyaratan ini dengan atau tanpa peningkatan tersebut.

Diedit untuk menambahkan: secara pribadi saya pikir dukungan kelas satu untuk bundel aplikasi adalah cara terbaik untuk meningkatkan situasi multi-lengkungan.

appbundle sepertinya solusinya ... Saya kira langkah selanjutnya adalah ini: #29303

Seperti yang saya pahami, bug ini sangat terkait dengan perpindahan ke .aab sebagai format output default untuk flutter build dan membuat .aab menyertakan build 32 dan 64-bit:
https://developer.android.com/studio/projects/dynamic-delivery

Pemahaman saya adalah beberapa pekerjaan ini mungkin sudah berlangsung. @dnfield mungkin tahu.

/cc @mklim

Sepertinya .aab akan membantu, tetapi mungkin tidak terlalu diperlukan. Apakah masalahnya sesederhana hanya menambahkan binari lengan 32 dan 64 bit ke APK?

Ah aku mengerti. Itu karena kita perlu menyertakan snapshot AOT untuk lengkungan target juga. Dan sekarang kami hanya meletakkannya di bawah aset, kami tidak menempatkan versi per arsitektur di bawah libs . Jika kami dapat menempatkan snapshot AOT ke dalam folder libs khusus arsitektur yang mungkin berfungsi, jika tidak, kami ingin menggunakan format .aab untuk alasan itu.

Kami tetap ingin melakukan ini untuk mendukung pembuatan .AAR untuk kasus penggunaan add2app. Aku akan menyodok itu.

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

Ini berhasil untuk saya setelah berhari-hari pemecahan masalah

Solusi yang diposting oleh @AppleEducate tidak berfungsi ketika saya mencoba menjalankan aplikasi di emulator.

Letakkan di bagian rilis

Ini adalah solusi saya:

  1. di 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. jalankan flutter build apk --release --target-platform=android-arm

  2. unggah app-armeabi-v7a-release.apk ke play store

  3. kenaikan versionCode

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

  5. unggah app-arm64-v8a-release.apk ke play store

Google play store akan melayani Aplikasi sesuai dengan arsitektur perangkat. Perangkat 32bit senang, perangkat 64bit senang, dan saya senang mengetahui bahwa ukuran APK saya tetap relatif kecil sambil tetap melayani kedua arsitektur.

Jika kami menyertakan dukungan untuk kedua arsitektur dalam APK yang sama, perkirakan ukuran aplikasi Anda menjadi 10 MB+

@edTheGuy00 Saya ragu menarik seberapa besar unggahan ke play store. Ponsel android akan meminta 125+ ruang bebas sementara dan akan menolak menggunakan penyimpanan eksternal untuk membongkar. Itu saja yang akan diketahui pengguna tentang ukuran aplikasi, Tidak masalah berapa banyak aplikasi yang digunakan setelah menginstal. Ini akan meminta ruang kosong 125mb+ untuk menginstal.

Harap memungkinkan untuk memasukkan semua kemungkinan arsitektur. Saya tidak peduli jika unggahan ke play store akan menjadi 250mb.

Alangkah baiknya jika flutter akan menggunakan ruang gigabite pada penyimpanan eksternal untuk diinstal pada ponsel android. Itu jika flutter dapat mempengaruhi instalasi di ponsel android

Saya pikir skrip flutter.gradle harus menyertakan semua ABI ke dalam APK final (APK Universal) dan kemudian secara default mengaktifkan APK terpisah. Alat android akan memilih APK yang tepat untuk diunggah ke perangkat yang terhubung dan semuanya baik-baik saja. APK universal terakhir kemudian dapat diunggah ke play-store, atau APK terpisah untuk setiap ABI.

Sementara itu sebagai solusi Anda dapat menambahkan ini ke bagian bawah build.gradle Anda di direktori android\app .

// 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/"
        }
    }
}

Saya juga merekomendasikan menambahkan ini ke bagian buildTypes > release . Ini akan memastikan APK rilis Anda berisi kedua ABI.

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

Setelah berkolaborasi dengan

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/", "")
            }
        }
    }
}

Pembaruan: Setelah mencoba menjalankan APK ini di perangkat, itu gagal dan karenanya bukan solusi yang layak. Kesalahannya adalah "Kesalahan saat menginisialisasi Dart VM: Snapshot tidak kompatibel dengan konfigurasi VM saat ini:
snapshot membutuhkan 'penggunaan produk_bare_instructions no-"menegaskan" kausal_async_stacks arm-eabi softfp'
tetapi VM memiliki 'penggunaan produk_bare_instructions no-"menegaskan" kausal_async_stacks arm64-sysv'"

Ah aku mengerti. Itu karena kita perlu menyertakan snapshot AOT untuk lengkungan target juga. Dan sekarang kami hanya meletakkannya di bawah aset, kami tidak menempatkan versi per arsitektur di bawah libs . Jika kami dapat menempatkan snapshot AOT ke dalam folder libs khusus arsitektur yang mungkin berfungsi, jika tidak, kami ingin menggunakan format .aab untuk alasan itu.

Kami tetap ingin melakukan ini untuk mendukung pembuatan .AAR untuk kasus penggunaan add2app. Aku akan menyodok itu.

@dnfield apakah Anda sudah berhasil dalam hal ini?

Bekerja melalui bagian plug-in saat ini. Kami telah mencoba untuk memprioritaskan bagian-bagiannya untuk memperbaiki masalah Android X tetapi akan melihat lebih banyak lagi yang keluar dari itu.

@gerryhigh dan saya sendiri sedang menyelidiki ini. Tolong abaikan balasan terakhir saya. Masalahnya hanya fakta bahwa libflutter.so tidak disertakan untuk 64bit tetapi untuk AOT Anda harus menjalankan proses build dua kali, sekali untuk 32bit dan lagi untuk 64bit. Anda kemudian mendapatkan dua set kode Dart yang dikompilasi di aset aplikasi Anda serta dua versi libflutter.so. Saya pikir tujuan akhirnya adalah untuk menyiapkan tugas kompilasi untuk Flutter sehingga menjalankan dua langkah build yang terpisah dan telah membagi penyiapan APK secara otomatis.

Tetapi untuk saat ini, satu-satunya solusi adalah menjalankan build dua kali dan mengunggah beberapa APK ke Play Store.

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

Ini dapat dicapai dengan lebih baik dengan mengaktifkan split-APK. Detail lebih lanjut dapat ditemukan di sini: https://developer.android.com/studio/build/configure-apk-splits

@slightfoot ya ini adalah solusi terbaik yang saya temukan sejauh ini seperti yang disebutkan dalam komentar saya di sana https://github.com/flutter/flutter/issues/18494#issuecomment -477502287

@slightfoot jika saya mengerti dengan benar, tidak mungkin membangun APK universal karena beberapa kode terletak di folder aset yang tidak memungkinkan untuk membagi file sesuai dengan arsitektur yang ditargetkan sebagai folder lib?

Snapshot yang dibangun untuk setiap arsitektur berbeda. Cukup salin mesin libflutter.so akan menyebabkan snapshot tidak dapat dimuat jika arsitektur snapshot tidak sesuai dengan arsitektur mesin flutter.
Jadi saat ini tidak ada cara bagi kami untuk membangun apk universal yang berisi semua arsitektur kecuali memisahkan file snapshot dan menyertakan file snapshot untuk setiap arsitektur.

Saya agak bingung mengapa ini menjadi masalah.

Build debug membuat libflutter.so di x86_64, x86, armeabi-v7a, dan arm64-v8a.

Rilis build harus melakukan hal yang persis sama.

AGP (Android Gradle Plugin) sudah menyertakan fungsionalitas untuk memfilter arsitektur, jadi jika pengguna ingin melakukannya untuk build rilis, mereka dapat memodifikasi build.gradle mereka.

@eseidel @dnfield Saya tidak benar-benar berpikir ini diselesaikan oleh Android App Bundle - mereka belum menjadi output Android default dan ketika menjalankan dari IDE apks akan digunakan cukup lama namun saya yakin.

AAB adalah alasan lain mengapa Flutter harus menyertakan semua arsitektur libflutter.sehingga Play Store dapat memfilter arsitektur mana yang dikirimkannya ke perangkat.

@athornz masalahnya bukan pada libflutter.so tetapi dengan kompilasi kode dart Anda hingga AOT snapshot build debug menyertakan Dart VM sehingga semua kode dart Anda hanya menjalankan JIT pada VM , tetapi rilis build mengkompilasi kode dart Anda ke dalam snapshot dan menempatkan snapshot itu ke dalam folder aset. Idealnya snapshot harus dikompilasi untuk setiap arsitektur dan ditempatkan di samping libflutter.so tetapi bukan itu masalahnya saat ini. Jadi meskipun Anda dapat menyertakan libflutter.so untuk semua arsitektur, snapshot hanya akan berfungsi untuk arsitektur apa pun yang dikompilasi.

Adakah rencana untuk memperbaiki masalah ini?

Google Play store meminta pengembang untuk memberikan dukungan 64-bit setelah 1 Agustus 2019.

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

Persyaratan 64-bit: apa artinya bagi pengembang
Mulai 1 Agustus 2019:
_Semua aplikasi baru dan pembaruan aplikasi yang menyertakan kode asli wajib menyediakan versi 64-bit selain versi 32-bit saat memublikasikan ke Google Play._
Ekstensi: Google Play akan terus menerima pembaruan 32-bit saja untuk game yang ada yang menggunakan Unity 5.6.6 atau lebih lama hingga Agustus 2021.
Mulai 1 Agustus 2021:
Google Play akan berhenti menyajikan aplikasi tanpa versi 64-bit pada perangkat yang mendukung 64-bit, yang berarti aplikasi tersebut tidak akan lagi tersedia di Play Store pada perangkat tersebut.
Ini akan mencakup game yang dibuat dengan Unity 5.6.6 atau lebih lama.

@trevorwang kita sudah bisa membangun 64bit dan mengunggahnya bersama dengan 32bit ke Play Store. Jadi itu tidak masalah.

@slightfoot Maksud Anda saya harus membuat APK 64-bit lain dan mengunggahnya ke Google Play?

Seperti yang Anda ketahui, Google Play tidak tersedia di Cina daratan. Kami lebih memilih APK universal untuk mendukung semua platform.

@trevorwang cukup banyak. Inilah cara saya melakukannya https://github.com/flutter/flutter/issues/18494#issuecomment -477502287

Hal split tidak berfungsi di file gradfle. Anda harus melakukan sesuatu dengan salah satu file build.gradle sehingga flutter tahu cara mengompilasi arsitektur yang berbeda. Atau google play akan menolak kompilasi kedua.

Terima kasih @edTheGuy00

Tapi kami sangat membutuhkan APK universal termasuk all abis untuk China Market.

@trevorwang Anda dapat membangun untuk setiap target dan secara eksplisit menyatakan untuk arsitektur mana setiap APK. Ini adalah bagaimana hal itu dilakukan untuk sebagian besar situs mirror APK.

Batasan 64bit hanyalah batasan dari Google Play Store. Anda masih dapat menerapkan APK hanya armeabi-v7a dan semua orang akan dapat menjalankan aplikasi Anda.

Membangun APK terpisah per arsitektur adalah solusi dan jelas bukan solusi untuk semua orang.

Setelah batasan Google Play 64bit mulai berlaku, masalah ini akan memengaruhi sebagian besar pengembang Flutter, jadi kami benar-benar membutuhkan solusi yang memungkinkan beberapa arsitektur dalam satu apk/bundel.

Hanya pengingat cepat

Tim Flutter menggunakan jumlah "Jempol" pada masalah GitHub sebagai panduan untuk prioritasnya.

Saya pikir masalah ini harus menjadi prioritas utama.

Terima kasih atas kerja @gerryhigh dan @slightfoot

Saya telah menambahkan flutter ke aplikasi yang ada dan memperbaiki masalah ini dengan solusi berikut.
_Harap tambahkan ini ke modul aplikasi Anda dari proyek host._

Ini adalah skrip untuk mode Debug, harap ubah sesuai untuk rilis.

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/", "")
                }
            }
        }
    }
}

Ada perkembangan terbaru?

Apa yang akhirnya saya lakukan, karena saya ingin

  • apk terpisah untuk setiap arsitektur
  • tidak perlu mengubah versionCode secara manual
  • jalankan satu perintah untuk menghasilkan apks
  1. Menambahkan ini ke gradle. Ia menambahkan 1 atau 2 di akhir versionCode, jadi versi 1004 menjadi 10041 untuk arm dan 10042 untuk arm64.
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. Untuk menghasilkan apk saya menggunakan perintah terminal yang lebih panjang (yang dapat Anda masukkan ke dalam skrip). Ini menjalankan build dua kali dan membuat salinan apks di akhir:
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;

Semoga ini membantu.

Jadi ini adalah masalah yang saya alami juga .. Saya telah membangun bundel aplikasi alih-alih apk dan ketika saya mengunggahnya ke google itu memberi saya peringatan dan tidak akan membiarkan saya menguji alfa.

Saya telah menggunakan codemagic untuk melakukannya, apakah ada cara untuk menandatanganinya dan memasukkannya ke dalam bundel? atau menggunakan codemagic untuk menandainya?

Saya menghadapi masalah yang sama yang saya pikir seharusnya tidak ada sama sekali.

Kenapa ini ada di Milestone "Goals".

P2: Ini adalah tugas yang menurut kami layak untuk diperbaiki di tahun-tahun mendatang. Ini mencakup masalah yang telah kami identifikasi yang mungkin memblokir pengiriman penuh aplikasi luas yang dihadapi konsumen, masalah kebenaran, dan bug yang berkaitan dengan polesan dan kualitas. Tanggal pada tonggak sejarah ini benar-benar sewenang-wenang dan hanya dimaksudkan untuk mengurutkan tonggak sejarah dengan tepat.

Ini sudah menjadi masalah kritis dan akan menjadi penghenti acara akhir tahun ini setelah Google memberlakukan batasan 64bit.

Saya telah mencapai tonggak sejarah dalam hal ini. Belum ada tanggal yang pasti.

Untuk lebih jelasnya: adalah mungkin, tetapi sulit, untuk mematuhi pedoman baru hari ini. Kami ingin membuatnya lebih mudah.

Jadi metode @andreidiaconu bekerja untuk saya selama saya membuat aplikasi secara manual.

Tapi saya telah menggunakan codemagic untuk membangun dan menyebarkan.

Jadi ini sia-sia, Flutter perlu membangunnya.

Saat ini saya pribadi tidak terlalu peduli jika itu rumit. Jika rumit itu akan diotomatisasi oleh skrip. Pertanyaannya adalah apakah mungkin dan bagaimana karena Konsol Google Play memperingatkan saya:

Rilis ini tidak sesuai dengan persyaratan 64-bit Google Play
APK atau App Bundle berikut tersedia untuk perangkat 64-bit, tetapi hanya memiliki kode asli 32-bit: 6.
Mulai 1 Agustus 2019, semua rilis harus mematuhi persyaratan 64-bit Google Play.
Sertakan kode asli 64-bit dan 32-bit di aplikasi Anda. Gunakan format publikasi Android App Bundle untuk memastikan secara otomatis bahwa setiap arsitektur perangkat hanya menerima kode asli yang diperlukan. Ini menghindari peningkatan ukuran keseluruhan aplikasi Anda.

Saya tidak menginginkan solusi yang memerlukan kode versi berbeda dan saya menginginkan solusi yang bekerja dengan Android App Bundle (AAB).

Peringatan
Rilis ini tidak sesuai dengan persyaratan 64-bit Google Play

APK atau App Bundle berikut tersedia untuk perangkat 64-bit, tetapi hanya memiliki kode asli 32-bit: 3.

Ada solusi?

Saya telah mencapai tonggak sejarah dalam hal ini. Belum ada tanggal yang pasti.

Untuk lebih jelasnya: adalah mungkin, tetapi sulit, untuk mematuhi pedoman baru hari ini. Kami ingin membuatnya lebih mudah.

Haruskah dokumen diperbarui dengan instruksi tentang cara melakukan ini untuk apk dan bundel aplikasi? Yang saya lihat sejauh ini hanyalah sekumpulan kode dan konfigurasi yang saya tidak yakin harus meletakkannya di mana. Saya mungkin bisa mengetahuinya dengan beberapa trial and error, tapi itu kurang ideal.

masalah yang sama

Terima kasih atas kerja @gerryhigh dan @slightfoot

Saya telah menambahkan flutter ke aplikasi yang ada dan memperbaiki masalah ini dengan solusi berikut.
_Harap tambahkan ini ke modul aplikasi Anda dari proyek host._

Ini adalah skrip untuk mode Debug, harap ubah sesuai untuk rilis.

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/", "")
                }
            }
        }
    }
}

Solusi/solusi ini terlihat paling menjanjikan, terima kasih @trevorwang ! Saya memang memiliki masalah dalam mengimplementasikan ini dalam proyek flutter yang ada. Apakah Anda memiliki contoh file build.gradle atau sesuatu yang setara yang akan mendemonstrasikan ini?

HARAP DICATAT BAHWA INI MUNGKIN TIDAK AKAN MEMECAHKAN MASALAH ANDA - LIHAT DI BAWAH

Berkat jawaban @trevorwang & saran @noinskit, saya telah berhasil memasukkan lib asli 64bit dalam versi rilis dengan tambahan kecil untuk ./android/app/build.gradle ditunjukkan di bawah ini.
Anda juga dapat melihat seluruh file di sini .

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 terima kasih! Saya tiba di sesuatu yang serupa. Dalam kasus saya, saya perlu mengubah assembleRelease dalam cuplikan Anda menjadi mergeReleaseJniLibFolders , jika tidak, file *.so tambahan berakhir di bawah "perantara/...", tetapi tidak di apk terakhir.

@noinskit Tampaknya solusi saya sebelumnya rawan kesalahan. Setelah menjalankan flutter clean itu menghasilkan aab hanya dengan lib 32bit. Mengganti assembleRelease dengan mergeReleaseJniLibFolders tampaknya juga berfungsi setelah membersihkan build true.

@SPodjasek apakah Anda harus mengubah opsi lain?

Ini app.gradle saya

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/", "")
                }
            }
        }
    }
}

Kedua direktori perantara/jniLibs/release/ arm64-v8a dan armeabi-v7a saya memiliki libflutter.so seperti yang diharapkan tetapi APK rilis final masih kehilangan libflutter.so di arm64-v8a.

Berikut adalah tangkapan layarnya

flutter

@function1983 Anda dapat melihat build.gradle sini .
Pada versi flutter saya:

[✓] 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)

Aku sudah mencoba untuk menggunakan @SPodjasek 's solusi untuk membangun sebuah appbundle yang meliputi 64 dan 32 bit versi. Itu berhasil dibuat, saya dapat mengunggahnya ke Konsol Google Play dan saya dapat menginstalnya di ponsel 32 dan 64 bit. Tetapi aplikasi mogok ketika diluncurkan pada perangkat android-arm64 karena suatu alasan (tampaknya berfungsi pada ponsel Android 32bit lama yang saya uji).

Inilah kesalahan yang saya dapatkan pada perangkat 64bit:

Batalkan pesan: '[ FATAL:flutter/runtime/dart_vm.cc (416)] Kesalahan saat menginisialisasi Dart VM: Snapshot tidak kompatibel dengan konfigurasi VM saat ini: snapshot memerlukan 'product use_bare_instructions no-"asserts" kausal_async_stacks arm-eabi softfp ' tetapi VM memiliki 'penggunaan produk_bare_instructions no-"menegaskan" kausal_async_stacks arm64-sysv'

Tidak yakin apa yang bisa saya lakukan... Mungkin saat ini hanya mendukung perangkat 64bit.

@Torrunt kesalahan itu karena Mesin mencoba memuat snapshot AOT untuk 32bit dan menemukan satu untuk 64.

Kami sedang berupaya untuk dapat menghasilkan AAB yang memiliki keduanya sehingga toko dapat membaginya dengan benar.

@SPodjasek Menggunakan ini meningkatkan ukuran file app- release.apk saya dari 11.1 MB menjadi 15,7 MB

@SPodjasek Menggunakan ini meningkatkan ukuran file app- release.apk saya dari 11.1 MB menjadi 15,7 MB

Ya, karena secara paksa menyertakan libflutter.so untuk 32 & 64bit. Jika Anda tidak membutuhkannya, tetap gunakan default saat ini untuk menyertakan hanya 32bit dan tunggu tim flutter menanganinya dengan benar.

sepertinya ada beberapa kemungkinan:

  • tunggu sampai tim flutter menyelesaikan masalah arsitektur 32 vs 64 yang membuat google play store menerima build flutter lagi
  • kita harus membatasi perangkat android yang digunakan hanya 32 bit, jadi aplikasi flutter hanya akan berjalan di perangkat 32 bit
  • kita harus entah bagaimana meyakinkan google untuk tidak memaksakan 64 bit di play store. (Saya ingin tahu apa perbedaan antara 32 dan 64 bit, seperti angka yang lebih besar?)
  • instal 32 aplikasi entah bagaimana di perangkat 64 bit tetapi tidak di play store ...

Catatan untuk orang yang menggunakan --target-platform untuk membangun android-arm dan android-arm64 secara terpisah dan mengunggah dua APK.
Perhatikan bahwa beberapa plugin menggunakan pustaka asli yang dapat menargetkan keduanya, dan flutter tidak memfilter folder pustaka sehingga APK "32 bit" Anda sebenarnya masih menargetkan arm64 juga dan itu akan macet karena libflutter.so tidak ada dan snapshot AOT ada dibangun untuk armv7.

Jadi, Anda harus secara eksplisit memfilter abi target di file build.gradle Anda.

Saya pikir flutter build apk --target-platform ... secara logis harus melakukan pemfilteran ini.

Menggunakan solusi @SPodjasek , saya mendapat kesalahan tentang mencocokkan arm-eabi versus arm64-sysv . Saya pikir solusi terbaik, yang berhasil untuk saya, hanya membangun untuk 32 bit untuk saat ini sampai ini semua beres ( solusi @swavkulinski di sini ):

Di level build.gradle app build.gradle :

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

Meringkas masalah dari subjek - tidak mungkin membuat APK seperti itu untuk armeabi-v7a dan arm64-v8a. Flutter menggunakan snapshot AOT yang bergantung pada ABI, jadi dengan APK satu-satunya solusi yang mungkin adalah menggunakan beberapa build APK.
Solusinya adalah menggunakan App Bundle, yang untuk saat ini juga memiliki beberapa masalah (#31922).
Setelah #32787 digabungkan, sekarang dimungkinkan untuk menggunakan App Bundle.

Bagaimana cara mengatur rasa dan file target saya (-t lib/another_main.dart, misalnya) saat membuat Bundel aplikasi Android melalui Android Studio? oo

Ini akan didukung melalui flutter build appbundle setelah https://github.com/flutter/flutter/pull/32787 digabungkan!

@swavkulinski bagaimana Anda akan merilis ke apks ke playstore?

Itu masih mungkin saat itu. Sekarang Anda harus membatasi hingga 64bit. Kami dikunci oleh perpustakaan NDK pihak ketiga yang hanya 32bit.

@blasten
Apakah ini juga akan menambah dukungan untuk flutter build apk --release ? Atau apakah itu direncanakan untuk menghentikan dukungan untuk APK demi app bundle dalam jangka panjang? Saya cukup menyukai kesederhanaan relatif dari APK gemuk.

@zimmi Benar. Bundel aplikasi harus menjadi cara untuk maju. Anda masih dapat menggunakan flutter build apk --release bila perlu. Apa yang lebih sederhana dalam APK gemuk dibandingkan dengan AAB?

Apa yang lebih sederhana dalam APK gemuk dibandingkan dengan AAB?

AAB bukan file instalasi. Android sendiri tidak bisa menggunakannya. Ini format file untuk Google Play store saja. Jadi perlu apk ketika:

  • Menginstal langsung ke perangkat.
  • Langsung mendistribusikan aplikasi.
  • Mendistribusikan melalui pasar aplikasi lain kecuali Google Play store. (amazon & seluruh Cina).

Jadi begitu. Terima kasih untuk latar belakangnya.

Anda juga dapat mengekstrak APK dari AAB menggunakan bundletool .

@blasten
Terima kasih telah mengonfirmasi!
Mengenai komentar kesederhanaan: Apa yang dikatakan @audkar . Juga dengan AAB, pengembang harus memikirkan skenario kegagalan potensial yang disebabkan oleh aset yang hilang. Pengujian pada semua kemungkinan konfigurasi perangkat sulit dilakukan, jadi jika kegagalan itu terjadi, kemungkinan besar dalam produksi.

Ukuran aplikasi mungkin merupakan harga yang bersedia dibayar beberapa orang untuk ketenangan pikiran itu.

Saya yakin ada tempat yang lebih baik untuk membahas manfaat dari setiap pendekatan daripada masalah ini, saya tidak ingin menggagalkannya.

/cc @jonahwilliams kita mungkin perlu mendukung APK gemuk di build apk .
Haruskah kita juga mengubah default untuk build apk ?

Dukungan apk gemuk pasti dibutuhkan. Ada banyak alat (distribusi beta, dll.) yang belum berfungsi dengan bundel aplikasi.

flutter build appbundle sekarang dalam master, apakah ada orang sukarela yang ingin mencobanya?

Kami memiliki beberapa diskusi untuk mendukung daftar platform di build apk , sehingga Anda dapat melakukan sesuatu seperti ini: flutter build apk --target-platform android-arm,android-arm64

@blasten Saya beralih ke saluran master, memutakhirkan dan membangun appbundle, itu bekerja dengan baik. Kemudian unggah ke konsol bermain dan semua peringatan hilang. (macOS 10.14.4)

Luar biasa! Saya akan mengkompilasi build saya malam ini setelah saya membuat perubahan.

Bundelnya sepertinya tidak berfungsi, aplikasi macet saat diunduh.

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]]

Sepertinya com.mattetti.sounds.MainActivity tidak ada dalam bundel?

Tidak yakin mengapa, bagaimana saya bisa memeriksa mengapa itu dihapus?

@mattetti Apakah Anda menggunakan modul Flutter ? Apakah MainActivity memperpanjang FlutterActivity ?

@blasten
Inilah dependensi saya

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

Tetapi saya juga baru menyadari bahwa saya mengganti nama paket aplikasi saya tetapi tidak mengubah jalur ke file MainActivity.java yang masih android/app/src/main/java/com/example/old_name/ yang mungkin menjadi masalah. Besok, saya akan mencoba mengubah jalur dan mendorong bundel lain.

halo @blasten , saya mencoba membangun appbundle dan mendapatkan kesalahan ini

[  +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

Proyek saya menggunakan rasa dan ini adalah perintah yang saya jalankan

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

Apakah app bundle juga akan menyertakan mapping.txt? Saat mengunggah bundel aplikasi ke Konsol Google Play melalui Codemagic, tidak ada mapping.txt yang disertakan, jadi tidak ada pengujian otomatis atau laporan pra-peluncuran - yang Anda miliki saat mengunggah apk :(

jadi pertanyaannya adalah:

Apakah tim Flutter akan membuat pembaruan untuk rilis 64-bit atau tidak sebelum Agustus sehingga kami dapat mengunggah dan memperbarui aplikasi kami yang dibuat dengan flutter atau tidak?

@YazeedAlKhalaf Ya. Anda dapat menggunakan flutter build appbundle hari ini dan Anda akan mendapatkan bundel aplikasi yang berisi 32 dan 64 bit.

@mattetti apakah masalahnya sudah diperbaiki?

@nohli mapping.txt terdengar seperti permintaan fitur. Jangan ragu untuk mengajukan bug baru.

@skybur dapatkah Anda menjalankan flutter doctor ? Apakah proyek Flutter Anda merupakan aplikasi atau modul?

@blasten Proyek saya adalah sebuah aplikasi.

Ini hasil dokter flutter

[√] 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 : mendapatkan kesalahan yang sama dengan skybur

Mencoba menggunakan flutter build appbundle lalu unggah ke toko, lalu buka dari ponsel Android:
Kecelakaan instan saat dibuka.

catatan 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 sangat tidak jelas bagi saya mengapa orang terus mengatakan bahwa bundel aplikasi menyelesaikan masalah ini.

Bundel aplikasi tidak lebih dari APK terpisah otomatis, dan tidak ada pemisahan pada folder aset. Jadi snapshot masih hanya menargetkan satu arsitektur.

Saya mungkin kehilangan sesuatu tetapi menurut saya, satu-satunya solusi sekarang adalah membangun APK untuk setiap arsitektur dengan pemfilteran ndk yang sesuai di file gradle. Dan kemudian unggah masing-masing APK ini.

jika kami tidak dapat menyelesaikan masalah ini dengan APK, tidak ada kemungkinan bundel aplikasi juga dapat berfungsi.

@ndusart Saya rasa itu tidak benar. Dokumen bundel aplikasi mengatakan:

res/, lib/, dan assets/: Direktori ini identik dengan yang ada di APK biasa. Saat Anda mengunggah app bundle, Google Play memeriksa direktori ini dan hanya mengemas file yang memenuhi konfigurasi perangkat target, sambil mempertahankan jalur file.

Jadi entah bagaimana bisa membagi aset.

@jereksel ini hanya memberi tahu bahwa direktori ini bekerja dengan cara yang persis sama di app bundle daripada di apk dan folder assets/ tidak dibagi. Ini digunakan untuk memiliki aset yang disimpan dalam struktur file yang sangat spesifik dalam aplikasi, itu tidak dimaksudkan untuk diuraikan oleh OS atau apa pun.

Jika saya salah, beri tahu saya bagaimana kami dapat membagi folder ini berdasarkan target ABI.

Dan kutipan ini hanya mengkonfirmasi apa yang saya katakan, jika ini tidak mungkin sekarang dengan APK, ini tidak akan mungkin menggunakan bundel aplikasi karena folder ini bekerja persis sama di kedua cara.

Saya belum pernah melihat aset membelah diri, tetapi saya menemukan ini:

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

assets.pb — Ini setara dengan tabel sumber daya untuk aset aplikasi dan hanya akan ada jika Anda menggunakan aset dalam aplikasi Anda.

Jadi tebakan saya adalah bahwa Android Studio tidak membagi aset, tetapi bundel aplikasi sendiri memiliki dukungan untuk itu.

Apakah Anda memiliki dokumentasi resmi? Semua itu tampaknya sangat tidak dapat diandalkan.
Artikel berikut, https://medium.com/mindorks/android-app-bundle-aab-98de6dad8ba8 , menyatakan bahwa kita dapat menambahkan akhiran nama folder di assets/ untuk membaginya tetapi saat ini hanya dapat dilakukan pada bahasa.

Jadi tetap saja, ini tampaknya belum stabil dan tidak harus didasarkan pada saat ini. Snapshot VM harus dideportasi di folder lib/ jika memungkinkan atau perintah flutter harus dilengkapi dengan fitur lengkap untuk membangun APK untuk target tertentu (masih ada pekerjaan yang harus dilakukan untuk itu karena dapat diakses oleh banyak orang) dan tunda produksi bundel aplikasi jika sudah siap.

@blasten

Saya beralih ke saluran master, memutakhirkan dan membangun appbundle. Sayangnya aplikasi gagal setelah diunduh dari google play store dengan logcat berikut

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 sekarang dalam master, apakah ada orang sukarela yang ingin mencobanya?

Kami memiliki beberapa diskusi untuk mendukung daftar platform di build apk , sehingga Anda dapat melakukan sesuatu seperti ini: flutter build apk --target-platform android-arm,android-arm64

@blasten

Saya beralih ke saluran master, memutakhirkan dan membangun appbundle. Sayangnya aplikasi gagal setelah diunduh dari google play store dengan logcat berikut

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 sekarang dalam master, apakah ada orang sukarela yang ingin mencobanya?
Kami memiliki beberapa diskusi untuk mendukung daftar platform di build apk , sehingga Anda dapat melakukan sesuatu seperti ini: flutter build apk --target-platform android-arm,android-arm64

Punya masalah yang sama, meskipun saya belum memiliki log.

@skybur masalah yang Anda alami mungkin terkait dengan https://github.com/flutter/flutter/issues/33119. Jika demikian, tambalan ini harus memperbaikinya.

@ndusart
Ya kamu benar. Saya telah memeriksa kode sumber bundletool dan pemisahan aset hanya berdasarkan bahasa:
https://github.com/google/bundletool/blob/master/src/main/Java/com/android/tools/build/bundletool/splitters/ModuleSplitter.java#L286

Ini adalah solusi saya:

  1. di 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. jalankan flutter build apk --release --target-platform=android-arm
  2. unggah app-armeabi-v7a-release.apk ke play store
  3. kenaikan versionCode
  4. jalankan flutter build apk --release --target-platform=android-arm64
  5. unggah app-arm64-v8a-release.apk ke play store

Google play store akan melayani Aplikasi sesuai dengan arsitektur perangkat. Perangkat 32bit senang, perangkat 64bit senang, dan saya senang mengetahui bahwa ukuran APK saya tetap relatif kecil sambil tetap melayani kedua arsitektur.

Jika kami menyertakan dukungan untuk kedua arsitektur dalam APK yang sama, perkirakan ukuran aplikasi Anda menjadi 10 MB+

Ada hal penting yang harus diberitahukan kepada kalian. Jika Anda menggunakan metode yang saya kutip. Anda mungkin perlu mengomentari pengaturan, ketika Anda ingin terus men-debug Aplikasi Anda. Saya menghadapi kesalahan Gradle build gagal menghasilkan Android package , dan macet selama beberapa jam, menghasilkan gradlew clean ...etc, dan akhirnya mengetahui ini harus dikomentari!

Semoga ini membantu seseorang untuk melompat keluar.

flutter build appbundle sekarang dalam master, apakah ada orang sukarela yang ingin mencobanya?

Kami memiliki beberapa diskusi untuk mendukung daftar platform di build apk , sehingga Anda dapat melakukan sesuatu seperti ini: flutter build apk --target-platform android-arm,android-arm64

flutter build appbundle berhasil! Saya tidak perlu menambahkan pengaturan itu, dan lakukan saja kodenya. Namun, Dibutuhkan sedikit banyak waktu untuk mengkompilasi, tapi Ini satu-satunya cara untuk lulus Google Play sekarang.

@Tokenyet apakah Anda dapat mengunduh aplikasi dari Play Store dan menjalankannya setelah mengunggah .aab ? Jika demikian, maukah Anda menempelkan output flutter doctor ?

@blasten

Saya beralih ke saluran master, memutakhirkan dan membangun appbundle. Sayangnya aplikasi gagal setelah diunduh dari google play store dengan logcat berikut

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 sekarang dalam master, apakah ada orang sukarela yang ingin mencobanya?
Kami memiliki beberapa diskusi untuk mendukung daftar platform di build apk , sehingga Anda dapat melakukan sesuatu seperti ini: flutter build apk --target-platform android-arm,android-arm64

Hal yang sama persis di sini, ketika mencoba menjalankan aplikasi saya dari Play Store (dibuat sebagai appbundle). Log apa yang kalian butuhkan untuk menyelesaikan ini?

Ini akan membantu:

  1. Unduh bundletool dari https://developer.android.com/studio/command-line/bundletool
  2. Jalankan flutter build appbundle (Harap tunjukkan jika Anda meneruskan tanda apa pun atau jika Anda membuat _custom_ perubahan pada skrip Gradle apa pun)
  3. Jalankan bundletool build-apks --bundle=build/app/outputs/bundle/release/app.aab --output=out.apks untuk mengekstrak kumpulan APK.
  4. Jalankan unzip -l out.apks dan terakhir flutter doctor dan rekatkan output dari kedua perintah di komentar Anda.

Jika memungkinkan:

Uji secara lokal di perangkat menggunakan bundletool dan set APK. Berikut langkah-langkahnya , tempel logcat di komentar Anda.

Saya tidak dapat mereproduksi masalah meskipun saya hanya menguji secara lokal menggunakan bundletool .

@blasten Jadi kesalahan sebelumnya sudah diperbaiki tetapi saya mengalami kesalahan lain. Saya berasumsi ini disebabkan oleh sesuatu dalam proyek saya. Apakah ada cara saya bisa men-debug ini?

[+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 Saya mengikuti semua langkah Anda, log saya:

➜  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
Sebenarnya ini disebut Assets Targeting dan memungkinkan Anda untuk menargetkan/membagi direktori dalam aset berdasarkan API Grafik, Kompresi Bahasa & Tekstur.
Seperti yang terlihat di sini: .../bundletool/model/targeting/TargetedDirectorySegment.java

Mengenai flutter@master AAB saat ini berfungsi untuk saya secara lokal - menggunakan bundletool untuk menguji dan menginstal pada perangkat nyata. Saya telah menonaktifkan pemisahan kepadatan & bahasa di build.gradle jadi build-apks memberi saya ini:

  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

Mengujinya di Test Lab Saya juga memiliki semua hijau.
Masih menunggu Play Store memproses versi ini untuk menguji saluran ini.

@Tokenyet apakah Anda dapat mengunduh aplikasi dari Play Store dan menjalankannya setelah mengunggah .aab ? Jika demikian, maukah Anda menempelkan output flutter doctor ?

Saya dapat mengunduh aplikasi dari Play Store, dan menjalankannya. Anda dapat [mencobanya] (https://play.google.com/store/apps/details?id=com.bumbystudio.starry_clock). (Sunting: Ups, Ini tidak menyala ... dari PlayStore)

Di bawah ini adalah flutter doctor Anda butuhkan. Semoga membantu.

[√] Flutter (Channel master, v1.6.1-pre.88, di Microsoft Windows [Versi 10.0.17134.765], lokal zh-TW)

[√] Rantai alat Android - kembangkan untuk perangkat Android (Android SDK versi 28.0.3)
[√] Android Studio (versi 3.3)
[√] Kode VS, edisi 64-bit (versi 1.30.2)
[!] Perangkat yang terhubung
! Tidak ada perangkat yang tersedia

Ini bekerja dengan baik untuk saya!

tipe bangunan {
melepaskan {
// TODO: Tambahkan konfigurasi penandatanganan Anda sendiri untuk build rilis.
// Menandatangani dengan kunci debug untuk saat ini, jadi flutter run --release berfungsi.
penandatangananConfig penandatangananConfigs.debug
}
debug {
ndk {
abiFilter 'armeabi-v7a'
}
}
}

@SPodjasek masih, kita perlu membagi assets/ berdasarkan ABI. Bagaimana ini bisa dilakukan saat ini?

Saya menginstal di perangkat saya dan sepertinya tidak berfungsi. Yang saya dapatkan hanyalah
layar hitam.

Terima kasih,

Purusothaman Ramanujam

Pada Kamis, 23 Mei 2019, 18:43 Tokenyet, [email protected] menulis:

@Tokenyet https://github.com/Tokenyet apakah Anda dapat mengunduh aplikasi
dari Play Store dan jalankan setelah mengunggah file .aab? Jika ini adalah
kasus, maukah Anda menempelkan output dari flutter doctor?

Saya dapat mengunduh aplikasi dari Play Store, dan menjalankannya. Anda bisa memberikannya
mencoba
https://play.google.com/store/apps/details?id=com.bumbystudio.starry_clock
.

Di bawah ini adalah dokter flutter saya yang Anda butuhkan. Semoga membantu.

[√] Flutter (Channel master, v1.6.1-pre.88, di Microsoft Windows [Versi .]
10.0.17134.765], lokal zh-TW)

[√] Rantai alat Android - kembangkan untuk perangkat Android (versi Android SDK
28.0.3)
[√] Android Studio (versi 3.3)
[√] Kode VS, edisi 64-bit (versi 1.30.2)
[!] Perangkat yang terhubung
! Tidak ada perangkat yang tersedia


Anda menerima ini karena Anda berlangganan utas ini.
Balas email ini secara langsung, lihat di GitHub
https://github.com/flutter/flutter/issues/18494?email_source=notifications&email_token=AAIHDZYY47H6PUQQJYEO4J3PW2J7RA5CNFSM4FFE2B7KYY3PNVWWK3TUL52HS4DFVREXG43VMVBW2ZDORFLPWZ2Jkt-4DN5MVXH19JKissue
atau matikan utasnya
https://github.com/notifications/unsubscribe-auth/AAIHDZZXV67JCNVJYLVA3WLPW2J7RANCNFSM4FFE2B7A
.

@ndusart Pada titik ini tidak mungkin - mungkin mengajukan permintaan fitur di bundletool dan Google akan mempertimbangkan untuk mengimplementasikannya.

@SPodjasek jadi itulah yang saya katakan, semua masalah ini berjalan dengan cara yang salah.

Semua diskusi tampaknya berakhir dengan "ho jangan khawatir, ketika kita bisa membangun bundel aplikasi, semua akan baik-baik saja" tetapi itu sama sekali tidak terjadi sekarang dan dalam waktu dekat.
Agak mengecewakan melihat tim flutter membiarkan orang berpikir itu mungkin dengan cara ini.

flutter harus dapat menyediakan cara untuk dengan mudah membangun APK split baik dengan melakukan pemisahan itu sendiri atau mengelola untuk memindahkan snapshot VM ke folder lib/ dan membiarkan pemisahannya berfungsi (kita kemudian dapat menggunakan bundel aplikasi juga )

Mari kita rekap:

  1. Flutter akan mendukung APK gemuk melalui flutter build apk ... .
  2. Jika Anda ingin mencoba fitur ini _sekarang_ coba flutter build appbundle di cabang master. Jika bundel aplikasi tidak berfungsi untuk kasus penggunaan Anda, maka (1) harus mencakup kasus yang tersisa.

Oke @blasten saya memang melihat kode master dan snapshot dipindahkan ke folder lib:
https://github.com/flutter/flutter/blob/dc28ba8919604ff19ea7cbad8d9400516347b08a/packages/flutter_tools/gradle/flutter.gradle#L470 -L481

Jadi tidak hanya menambahkan dukungan app bundle. Lebih jelas sekarang.
Sedikit penjelasan akan sangat dihargai meskipun karena dinyatakan bahwa masalahnya adalah folder aset dan tidak ada informasi yang diberikan pekerjaan dilakukan ke arah ini karena masalah ini dan dukungan bundel aplikasi cukup independen.

Terima kasih atas pekerjaan Anda.

@ndusart - @blasten telah melakukan perubahan pada embedding Android sehingga akan mencari binary blob di folder lib sekarang, jadi bisa bundel di kedua jenis kalau tidak salah...

Jika snapshot dipindahkan ke lib, maka mungkin #30846 juga akan diperbaiki?

@blasten
Saya beralih ke saluran master, memutakhirkan dan membangun appbundle. Sayangnya aplikasi gagal setelah diunduh dari google play store dengan logcat berikut

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 sekarang dalam master, apakah ada orang sukarela yang ingin mencobanya?
Kami memiliki beberapa diskusi untuk mendukung daftar platform di build apk , sehingga Anda dapat melakukan sesuatu seperti ini: flutter build apk --target-platform android-arm,android-arm64

Punya masalah yang sama, meskipun saya belum memiliki log.

Sama disini. Sedang mengalami kesalahan. Master yang ditingkatkan dan menjalankan flutter build appbundle . Singkirkan kesalahan tetapi aplikasi macet saat dibuka.

Saya mencoba mengunggah appbundle menggunakan versi master flutter terbaru ke app store dengan perubahan terbaru. Kesalahan 64 bit hilang sekarang, tetapi aplikasi saya segera macet.

Yang benar-benar aneh adalah menjalankan versi 64 bit menggunakan perintah di bawah ini berfungsi dengan baik.
flutter build apk --target-platform android-arm64
flutter instal api

Itu hanya mogok ketika aplikasi diinstal melalui appbundle di appstore. Untuk saat ini saya telah mengembalikan appstore kembali ke apk 32 bit.

Saya tidak memiliki sesuatu yang istimewa di gradle.build saya

minSdkVersi 21
targetSdkVersion 28
versionCode flutterVersionCode.toInteger()
nama versi flutterVersionName
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
multiDexEnabled benar

Saya menjalankan Flutter (Channel master, v1.6.4-pre.13, di Mac OS X 10.14.5 18F132, lokal en-US)

Apakah ada cara untuk menguji bundel ini sebelum mengunggah ke appstore? Apakah ini masalah umum yang sedang dikerjakan google atau apakah saya perlu membuat beberapa perubahan pada file gradle saya?

@chitwoob Silakan ikuti langkah-langkahnya: https://github.com/flutter/flutter/issues/18494#issuecomment -495049530

@blasten Saya mengalami masalah dengan alat bundel yang tidak terkait dengan masalah ini.

saya mendapat
Kesalahan: Gagal memulai server ADB

Saat berlari
build-apks --connected-device --bundle=./app.aab --output=./my_app.apks --adb

Saya telah menginstal adb dengan benar. Ketika saya mencoba adb logcat berfungsi dengan baik.

Akan menjadi komentar yang panjang, tapi ini benar-benar memperbaiki masalah

Ini adalah solusi saya:

  1. di 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. jalankan flutter build apk --release --target-platform=android-arm
  2. unggah app-armeabi-v7a-release.apk ke play store
  3. kenaikan versionCode
  4. jalankan flutter build apk --release --target-platform=android-arm64
  5. unggah app-arm64-v8a-release.apk ke play store

Google play store akan melayani Aplikasi sesuai dengan arsitektur perangkat. Perangkat 32bit senang, perangkat 64bit senang, dan saya senang mengetahui bahwa ukuran APK saya tetap relatif kecil sambil tetap melayani kedua arsitektur.

Jika kami menyertakan dukungan untuk kedua arsitektur dalam APK yang sama, perkirakan ukuran aplikasi Anda menjadi 10 MB+

Mengikuti langkah-langkah ini memberikan "Gradle build gagal menghasilkan paket Android." kesalahan
_ Setelah satu jam debugging, temukan perbaikannya. _

Untuk membuat aplikasi yang berbeda untuk x86 dan x64, ikuti langkah-langkah berikut:

Langkah 1: Sertakan cuplikan kode dalam file app/build.gradle . File akan terlihat seperti:

....
    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 {
....

Langkah 2: Buat apk rilis menggunakan flutter build apk --release
Ini akan membuat apk berbasis x86 di folder build/app/outputs/apk/app.apk
Unggah apk ini ke google play store.
x86 selesai sampai sekarang

Pada titik ini jangan jalankan flutter clean
Saya melakukan ini dan mendapatkan kesalahan saat membuat x64 apk

Langkah 3: Sekarang buka pubspec.yaml dan ubah version dari
version: 1.0.0+1 hingga version: 1.0.0+2

Nomor di sebelah + adalah kode versi

Langkah 4: Sekarang jalankan perintah
flutter build apk --release --target-platform=android-arm64

Setelah perintah ini selesai, buka build/app/outputs/apk/release/ . Di sana Anda akan menemukan apk dengan nama app-arm64-v8a-release.apk . Ini adalah file apk 64 bit Anda dengan kode versi yang berbeda.

Sekarang unggah apk x64 ini ke play store .... dan ini dia. Anda telah mengunggah aplikasi x86 dan x64 ke play store.

Akan menjadi komentar yang panjang, tapi ini benar-benar memperbaiki masalah

[...]
Untuk membuat aplikasi yang berbeda untuk x86 dan x64, ikuti langkah-langkah berikut:

Langkah 1: Sertakan cuplikan kode dalam file app/build.gradle . File akan terlihat seperti:

....
    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 {
....

Langkah 2: Buat apk rilis menggunakan flutter build apk --release
[...]

Setuju dengan jawaban Anda. Bekerja untuk saya, meskipun saya tidak harus mengikuti Langkah 1 (saya menggunakan build.gradle default)

Kemudian, Anda hanya perlu menambah nomor dan versi build Anda agar Google Play menerimanya.

Saya masih mengalami masalah dengan flutter build appbundle di tangan saya.

Akan menjadi komentar yang panjang, tapi ini benar-benar memperbaiki masalah

[...]
Untuk membuat aplikasi yang berbeda untuk x86 dan x64, ikuti langkah-langkah berikut:
Langkah 1: Sertakan cuplikan kode dalam file app/build.gradle . File akan terlihat seperti:

....
    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 {
....

Langkah 2: Buat apk rilis menggunakan flutter build apk --release
[...]

Setuju dengan jawaban Anda. Bekerja untuk saya, meskipun saya tidak harus mengikuti Langkah 1 (saya menggunakan build.gradle default)

Kemudian, Anda hanya perlu menambah nomor dan versi build Anda agar Google Play menerimanya.

Saya masih mengalami masalah dengan flutter build appbundle di tangan saya.

Tidak bekerja. Saya sangat kecewa. Aplikasi mogok ketika dicoba untuk digunakan pada emulator x86 serta pada perangkat lengan nyata. Mencoba dengan saluran master/beta/stabil. Tidak ada rilis yang siap. Itu masih menjadi show stopper bagi kami. Perintah Appbundle menghasilkan bundel yang dapat diinstal untuk dimainkan tetapi selama aplikasi runtime hanya menampilkan layar splash dan kemudian membeku. Tim Flutter tolong berikan solusi yang jelas atau WA.

@mormih terima kasih atas kesabaran Anda -- kami sedang berupaya mereproduksi. Jika Anda tidak keberatan, dapatkah Anda mengirimi saya email ([email protected]) termasuk yang berikut, ini akan membantu:

  • Platform host yang Anda gunakan untuk membangun.
  • Perintah yang Anda gunakan untuk membangun aplikasi.
  • Jalankan perintah build Anda dengan --bug-report (mis. flutter build appbundle --bug-report ) dan lampirkan file bugreport.zip
  • Lampirkan bundel aplikasi yang dihasilkan sehingga kami dapat mencoba menjalankannya di perangkat lokal
  • Lampirkan hasil adb bugreport setelah mencoba menjalankan aplikasi

Terima kasih!

@tvolkert Saya juga memiliki masalah crash dengan pesan berikut:

Pemeriksaan gagal: vm. Harus dapat menginisialisasi VM.

Platform host saya adalah mac dan macOS 10.14.5. Apakah Anda dapat mereproduksinya, atau Anda ingin saya mengikuti langkah-langkah yang Anda tulis di atas? Juga, mungkin ini harus memiliki tiket khusus karena ini adalah masalah yang terpisah dari yang OP.. Cheers

@mormih Saya tidak yakin tetapi apakah Anda sudah mencoba memasukkan x86 juga dalam daftar abi?

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

flutter build appbundle (pada master) juga tidak berfungsi untuk saya, apakah splashscreen macet seperti yang dicatat orang lain ...

Satu-satunya solusi yang saya temukan untuk merilis (di Play store) untuk 32- dan 64bit sejauh ini adalah sebagai berikut. (Sebagian tercakup dalam utas tetapi mungkin membantu seseorang):

  1. Buat apk dengan filter v7 aktif + perintah build apk default:
    Di file app/build.gradle Anda:
    defaultConfig { ... ndk{ abiFilters "armeabi-v7a" } }
    dan kemudian lari
    flutter build apk
    (default ke --release)

  2. Bump nomor build Anda di pubspec.yaml.
    Misalnya dari version: 1.1.0+6 ke version: 1.1.0+7

  3. Buat apk dengan filter v8 di + build dengan arm64 sebagai platform target:
    sekarang perbarui build.gradle seperti:
    defaultConfig { ... ndk{ abiFilters "arm64-v8a" } }
    dan kemudian lari
    flutter build apk --release --target-platform android-arm64

Apakah termasuk overhead karena harus mengunggah 2 apk (dan dengan demikian membuat 2 nomor build) tetapi setidaknya tampaknya berhasil dan saya dapat merilis untuk perangkat 32 dan 64bit ...

Catatan: Saya melepaskan x86 karena itu hanya melibatkan sekelompok kecil perangkat seluler (dan berpotensi tidak ada pengguna saya), ditambah lagi saya tidak memerlukan build rilis di emulator (debug sudah cukup untuk pengujian). Tapi ini tentu saja mungkin tidak berlaku untuk orang lain.

@ezmegy metode adalah satu-satunya yang bekerja untuk saya. Terima kasih

Di suatu tempat di komentar seseorang meninggalkan ini.

image

Ini telah bekerja untuk saya dan hanya 1 kode terminal.
Ini menghasilkan 2 file yang saya benci dan menciptakan 2 versi.

@ezmegy Terima kasih! Anda menyelamatkan hari saya

Terima kasih @ezmegy , "trik" Anda berhasil!

Terima kasih @ezmegy !
Saya ingin membagikan alur kerja saya saat ini yang mungkin bisa membantu:


Buat beberapa rasa build pada app/build.gradle per arsitektur

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

Lalu saya bisa membangun keduanya dengan:
flutter build apk --flavor arm32
dan
flutter build apk --flavor arm64 --target-platform android-arm64
tanpa memodifikasi gradle pada setiap build


Mengenai kode versi, saya lebih suka mengatur satu secara default dan menurunkan yang lain dari yang itu
Misalnya set arm32 dengan 1.0.0+10000 dan buat kode versi untuk arm64 yaitu 1.0.0+10001
Ini seharusnya mudah dibuat menggunakan bash (atau di dalam fastfile jika Anda menggunakan fastlane)

Anda dapat mengatur nomor build menggunakan argumen --build-number atau melalui fastlane jika Anda menggunakannya

Pembuatan skrip kode versi ini membantu saya dalam CI/CD

CMIIW

Bagi saya ini berhasil dengan cukup baik
https://github.com/flutter/flutter/issues/10728#issuecomment -461375218

Akan menjadi komentar yang panjang, tapi ini benar-benar memperbaiki masalah

Ini adalah solusi saya:

  1. di 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. jalankan flutter build apk --release --target-platform=android-arm
  2. unggah app-armeabi-v7a-release.apk ke play store
  3. kenaikan versionCode
  4. jalankan flutter build apk --release --target-platform=android-arm64
  5. unggah app-arm64-v8a-release.apk ke play store

Google play store akan melayani Aplikasi sesuai dengan arsitektur perangkat. Perangkat 32bit senang, perangkat 64bit senang, dan saya senang mengetahui bahwa ukuran APK saya tetap relatif kecil sambil tetap melayani kedua arsitektur.
Jika kami menyertakan dukungan untuk kedua arsitektur dalam APK yang sama, perkirakan ukuran aplikasi Anda menjadi 10 MB+

Mengikuti langkah-langkah ini memberikan "Gradle build gagal menghasilkan paket Android." kesalahan
_ Setelah satu jam debugging, temukan perbaikannya. _

Untuk membuat aplikasi yang berbeda untuk x86 dan x64, ikuti langkah-langkah berikut:

Langkah 1: Sertakan cuplikan kode dalam file app/build.gradle . File akan terlihat seperti:

....
    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 {
....

Langkah 2: Buat apk rilis menggunakan flutter build apk --release
Ini akan membuat apk berbasis x86 di folder build/app/outputs/apk/app.apk
Unggah apk ini ke google play store.
x86 selesai sampai sekarang

Pada titik ini jangan jalankan flutter clean
Saya melakukan ini dan mendapatkan kesalahan saat membuat x64 apk

Langkah 3: Sekarang buka pubspec.yaml dan ubah version dari
version: 1.0.0+1 hingga version: 1.0.0+2

Nomor di sebelah + adalah kode versi

Langkah 4: Sekarang jalankan perintah
flutter build apk --release --target-platform=android-arm64

Setelah perintah ini selesai, buka build/app/outputs/apk/release/ . Di sana Anda akan menemukan apk dengan nama app-arm64-v8a-release.apk . Ini adalah file apk 64 bit Anda dengan kode versi yang berbeda.

Sekarang unggah apk x64 ini ke play store .... dan ini dia. Anda telah mengunggah aplikasi x86 dan x64 ke play store.

Ini bekerja untuk saya juga tanpa langkah 1. Terima kasih untuk semuanya. Saya telah menggunakan filter ndk ndk {
abiFilters "armeabi-v7a", "x86"
}
dalam file gradle build. Saya tidak tahu itu wajib atau tidak. Selain itu, saya telah mengikuti semua langkah dari langkah 2 dan mengunggah dua apk, satu untuk 32 bit dan lainnya untuk 64 bit.

Sebelumnya saya telah mengunggah appbundle, kali ini mengunggah file apk. Bekerja dengan baik. Saya harus memeriksa dengan appbundle dan juga mencoba memperbaikinya tanpa mengunggah dua apk.

Catatan :
Sebelum melakukan proses ini, aplikasi saya mogok di perangkat arm-64 bit berikut
Redmi MI,
Redmi 3S Prime
Kehormatan 8x

Bekerja di perangkat arm-64 bit berikut
Samsung Galaxy J4
Samsung On8

Hai Tim Flutter,

tolong pertimbangkan juga pasar aplikasi lain seperti yang ada di China. Di Cina, kami tidak diizinkan menggunakan Google Play Store, sebaliknya, kami memiliki banyak pasar aplikasi seperti XiaoMi, HuaWei, dan Ali ...dll.

Di pasar aplikasi tersebut, kami TIDAK diizinkan untuk menyediakan rilis apk dalam arsitektur yang berbeda, kami hanya dapat mengunggah SATU DAN HANYA SATU apk per rilis, dan rilis tersebut akan menggantikan apk rilis sebelumnya. Yang berarti bahwa pekerjaan saat ini adalah menggunakan "armeabi-v7a".

Koreksi saya jika saya salah, dengan menggunakan "armeabi-v7a", semua perangkat 64-bit akan menjalankan libflutter.so 32-bit, dan saya kira itu akan lebih lambat.

Jadi saya akan menyarankan jika tim flutter dapat memberikan metode untuk memungkinkan kami membangun apk yang mencakup libflutter.so 32-bit dan 64-bit, meskipun ukuran apk akan lebih besar. (Di Cina, kami biasanya memiliki kecepatan internet yang sangat cepat dan kami membayar sedikit untuk memiliki paket penggunaan 4G tanpa batas, dan orang biasanya tidak peduli dengan ukuran apk)

Hai Tim Flutter,

tolong pertimbangkan juga pasar aplikasi lain seperti yang ada di China. Di Cina, kami tidak diizinkan menggunakan Google Play Store, sebaliknya, kami memiliki banyak pasar aplikasi seperti XiaoMi, HuaWei, dan Ali ...dll.

Di pasar aplikasi tersebut, kami TIDAK diizinkan untuk menyediakan rilis apk dalam arsitektur yang berbeda, kami hanya dapat mengunggah SATU DAN HANYA SATU apk per rilis, dan rilis tersebut akan menggantikan apk rilis sebelumnya. Yang berarti bahwa pekerjaan saat ini adalah menggunakan "armeabi-v7a".

Koreksi saya jika saya salah, dengan menggunakan "armeabi-v7a", semua perangkat 64-bit akan menjalankan libflutter.so 32-bit, dan saya kira itu akan lebih lambat.

Jadi saya akan menyarankan jika tim flutter dapat memberikan metode untuk memungkinkan kami membangun apk yang mencakup libflutter.so 32-bit dan 64-bit, meskipun ukuran apk akan lebih besar. (Di Cina, kami biasanya memiliki kecepatan internet yang sangat cepat dan kami membayar sedikit untuk memiliki paket penggunaan 4G tanpa batas, dan orang biasanya tidak peduli dengan ukuran apk)

Dalam kasus Anda, Anda dapat memberikan standar 32-bit dan semuanya akan baik-baik saja, bukan?
Peringatan 64 bit hanya untuk Google Play. Saya percaya ini bukan masalah bagi China.
(Mohon koreksi saya jika saya salah.)

@ KunalT6569 Saya kira langkah 3 seperti yang dinyatakan oleh Anda:

Langkah 3: Sekarang buka pubspec.yaml dan ubah versi dari
versi: 1.0.0+1 ke versi: 1.0.0+2

diperlukan untuk mengizinkan pengunggahan kedua file apk ke konsol google play, bukan?

Saya punya satu pertanyaan lagi - setelah kedua file apk siap, Anda cukup mengunggahnya melalui bagian App releases\New Release\Browse Files , bukan?

@angel1st Ya, Langkah 3 diperlukan karena Google play tidak akan mengizinkan pengunggahan dua apk dengan kode versi yang sama.

Untuk mengunggah banyak apk ke google play, saya merujuk ke video ini.
https://www.youtube.com/watch?v=rMl_oLlf_g0

FYI:

Rencana kami saat ini adalah merilis beta menggunakan salah satu rilis dev terbaru dalam 10 hari mendatang. Kemudian, rencana kami adalah menunggu hingga kami memiliki proses terdokumentasi yang diperbarui untuk cara mengirim di Android yang tidak memicu peringatan tentang build 64bit dari Play Store, memiliki cara untuk mengemas APK yang mendukung 64 bit, dan untuk membuktikan kami dapat merilis galeri menggunakan proses itu, dan segera setelah kami melakukannya, ikuti proses untuk merilis beta baru yang kemudian akan kami dorong ke stabil sekitar seminggu kemudian.

Ini berarti kami kemungkinan akan memiliki beta pada awal Juni, dan beta pada akhir Juni atau awal Juli yang akan segera stabil setelahnya.

@Hixie Ada Masalah Lain Muncul di sini
bundel aplikasi dengan flutter terbaru (master sampai sekarang) tidak menghasilkan versi x86, x86_64
File yang dihasilkan oleh cabang master
WinRAR_2019-05-30_02-55-34

File yang dihasilkan oleh Versi Lama dengan studio android
WinRAR_2019-05-30_03-03-15

Perilaku yang Diharapkan adalah menyertakan versi x86 , x86_64 juga dalam file yang dihasilkan oleh versi baru

@canewsin terlepas dari masalah ini, kami tidak menyediakan binari rilis x86 (https://github.com/flutter/flutter/issues/9253) - adalah "versi lama" di https://github.com/flutter/ flutter/issues/18494#issuecomment -497118805 merujuk ke build debug?

Saya memiliki masalah yang sama, membangun untuk 32-bit akan mengecualikan perangkat 64-bit, itu berjalan pada mereka. Membangun untuk 64 dengan menetapkan --target-platform android-arm64 berfungsi pada perangkat 64-bit, tetapi mogok pada perangkat 32-bit. Google juga akan membatasi unggahan apk menjadi 64-bit pada 2019.

Tim Flutter, tolong selesaikan masalah dasar ini!

konfigurasi default {
....
nama versi flutterVersionName
ndk.abiFilter 'armeabi-v7a','arm64-v8a','x86','x86_64'
}
// siap!

saya mengkompilasi aplikasi saya dengan cabang master flutter terbaru dan mengunggah ke play store sebagai bundel aplikasi tetapi aplikasi mogok di perangkat log ini diambil dari lab uji

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

Dokter berdebar -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 sepertinya masalah ini telah diperbaiki di https://github.com/flutter/engine/pull/9078. Di pohon Flutter Anda, perbarui cabang master lokal Anda, git fetch upstream && git merge upstream/master

Setelah melihat pertanyaan berulang, yang sudah dijawab di komentar sebelumnya, saya menulis artikel singkat yang mendokumentasikan opsi apa yang kita miliki sekarang https://medium.com/@truongsinh/flutter -android-64-bit-so-what-the-repotnya -15da6f8e3a46. Berikut TLDRnya:
1_Awm6pB8jR3wGdHMC4DsatQ

@truongsinh , kami juga menyelesaikan dukungan untuk menggunakan flutter build appbundle untuk membangun bundel aplikasi yang berisi biner 32 dan 64 bit untuk diterapkan ke Play Store. Lihat https://github.com/flutter/flutter/issues/31922 untuk info lebih lanjut - silakan coba dan beri tahu kami jika Anda mengalami masalah.

@truongsinh , kami juga menyelesaikan dukungan untuk menggunakan flutter build appbundle untuk membangun bundel aplikasi yang berisi biner 32 dan 64 bit untuk diterapkan ke Play Store. Lihat #31922 untuk info lebih lanjut - silakan coba dan beri tahu kami jika Anda mengalami masalah.

Yap saya masih menunggu flutter build appbundle untuk menghasilkan aplikasi yang tidak macet atau macet :D

Yap saya masih menunggu flutter build appbundle untuk menghasilkan aplikasi yang tidak macet atau macet :D

Diakui . Jika Anda memiliki kasus yang dapat direproduksi dari kejadian ini yang dapat kita lihat, itu bagus. Jika Anda bersedia membuat file .aab tanpa tanda tangan dari rilis 1.7.1 dan mengirimkannya kepada saya melalui email ([email protected]), saya akan sangat menghargainya!

FYI, pengumuman berikut telah dikirim ke [email protected] mengenai dukungan 64-bit kami.

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

Saya mengalami masalah ini juga.

Ketika saya membuat bundel aplikasi di Android Studios, saya dapat memuatnya dengan baik di simulator saya, tetapi aplikasi itu mogok ketika saya mengunduhnya dari play store

Hai Teman-teman yang menggunakan cabang master flutter dan membuat bundel aplikasi
jika Anda men-debug aplikasi Anda, aplikasi Anda berjalan dengan baik
beberapa wajah macet saat mengunduh dari play store jika ini terjadi, Anda telah memeriksa bundel aplikasi Anda apakah itu berfungsi pada perangkat Anda karena mode debug menghasilkan binari JIT dan mode rilis menghasilkan binari AOT saat ini penempatannya juga berbeda saya pikir begitu untuk menguji aplikasi Anda dengan benar
hasilkan apk dari bundel aplikasi hanya untuk konfigurasi spesifik berdasarkan perangkat Anda dan hapus instalan aplikasi debug sepenuhnya dari perangkat Anda dan instal aplikasi keluaran baru ini dari bundel aplikasi jika macet itu akan macet saat diunduh dari play store atau sebaliknya, semoga ini akan membantu orang lain. .

Referensi untuk Output ke APK dari bundel aplikasi Anda dari baris cmd
https://developer.android.com/studio/command-line/bundletool

FYI, kerusakan dalam bundel aplikasi lebih baik dilacak di https://github.com/flutter/flutter/issues/31922. Namun, posting silang di sini:

Halo semua,

TLDR:

Kami telah mengidentifikasi masalah mogok saat diunduh dari Play Store dan sedang memperbaikinya, untuk dikirimkan dalam jangka waktu yang sama seperti yang diuraikan di atas di https://github.com/flutter/flutter/issues/31922#issuecomment -498880614

Penjelasan tingkat tinggi

Bagi mereka yang tertarik, penjelasan yang agak panjang adalah bahwa dengan perangkat yang menjalankan Android Marshmallow atau yang lebih baru, Play Store akan mendeteksi aplikasi yang dikemas sebagai App Bundle yang berisi beberapa ABI -- dan akan menginstal aplikasi tersebut di perangkat dalam bentuk "split APK". Saat melakukan ini, file .so yang ada di dalamnya tidak diekstraksi dari arsip zip APK, yang berbeda dari perilaku APK non-split. Karena mekanisme Flutter engine

Solusinya adalah hanya dengan dlopen perpustakaan, dan Android mengabstraksi di mana perpustakaan berada (yaitu di dalam arsip atau tidak). Namun, file .so yang diperlukan tidak pernah menjadi pustaka yang sebenarnya - mereka hanyalah gumpalan data biner yang kami muat ke dalam Dart VM. Jadi sebagai bagian dari ini, kami membuatnya menjadi pustaka ELF (mis. https://github.com/dart-lang/sdk/commit/6d608fb52bc1926a73d986d73ab228b77cfb7ca2 dan https://github.com/flutter/flutter/pull/33696).

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

Saya mendapatkan kesalahan ini setelah menambahkan cuplikan kode ke build.gradle
Gradle build failed to produce an Android package.

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

Saya mendapatkan kesalahan ini setelah menambahkan cuplikan kode ke build.gradle
Gradle build failed to produce an Android package.

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

Bisakah seseorang memecahkan masalah? Saya memiliki aplikasi pada flutter yang hanya berfungsi dengan apk 32-bit tetapi yang 64 tidak berfungsi atau tidak menginstal. Saya menguji pada ponsel 64-bit

@CgarciaTC silakan lihat https://github.com/flutter/flutter/issues/18494#issuecomment -500101807 untuk pembaruan terbaru

Halo semua,

Kami yakin semua perbaikan telah mendarat di tip-of-tree di saluran master . Jika Anda ingin mencobanya, berikut caranya:

  • flutter build appbundle

    Secara default, App Bundle berisi kode Dart Anda dan runtime Flutter yang dikompilasi untuk armeabi-v7a (32-bit) dan arm64-v8a (64-bit)

  • flutter build apk --split-per-abi

    Perintah ini akan menghasilkan dua APK:

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

  • flutter build apk

    Ini akan menghasilkan APK gemuk yang berisi kode Anda yang dikompilasi untuk semua ABI target. APK tersebut akan berukuran lebih besar daripada rekan-rekan terpisahnya, menyebabkan pengguna mengunduh biner asli yang tidak berlaku untuk arsitektur perangkat mereka.

flutter build apk --split-per-abi
Perintah ini akan menghasilkan dua APK:
build/app/outputs/apk/release/app-armeabi-v7a-release.apk
build/app/outputs/apk/release/app-arm64-v8a-release.apk

@tvolkert - dalam skenario khusus ini, bagaimana dengan setiap nomor versi rilis? Setahu saya, keduanya harus berbeda, jadi kita bisa mengupload keduanya ke Google Play. Apakah bagian itu entah bagaimana berhasil, ketika apk dibuat? Jika tidak, bagaimana penanganannya?

@angel1st itu dikelola secara otomatis saat APK dibuat, sesuai panduan di https://developer.android.com/studio/build/configure-apk-splits#configure -APK-versions

@tvolkert apakah ada informasi tentang kapan ini akan mendarat di saluran stabil?

Dapat mengonfirmasi bahwa ini berfungsi (Setelah beralih ke master) di beberapa perangkat Android. Sungguh penyelamat, terima kasih.

@tvolkert Terima kasih banyak. Adakah timeline untuk memasukkan ini ke Flutter stable?

@harsha973 Anda dengan serius menandai dan menanyakan pertanyaan yang sama persis dengan yang dia jawab 2 posting di atas milik Anda. Tidak hanya bodoh tetapi di ambang tidak sopan.

@PerLycke maaf tentang itu.

Saya telah memeriksa saluran master, memutakhirkan flutter dan sekarang saya tidak dapat benar-benar membangun aplikasi, menggunakan perintah:
flutter build apk --release --flavor production -t lib/main.dart
hasilnya adalah:

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

Jawaban masalah StackOverflow serupa tidak terlalu membantu.

@MichaelRFairhurst flutter build apk --release bekerja dengan baik untuk saya, jadi mungkin pembaruan baru pada master juga memerlukan pembaruan untuk pengaturan rasa Anda.

Saya tahu itu bukan jawaban, maaf, tapi setidaknya titik ke arah yang benar.

Kapan perbaikannya menjadi beta?

@derolf silakan lihat https://github.com/flutter/flutter/issues/18494#issuecomment -498880287 sebagai pembaruan terbaru dengan target waktu.

Halo semua,

Perbaikan ini sekarang ditayangkan di saluran dev , pada rilis v1.7.4 atau yang lebih baru.

Saat mencoba mencari tahu hal-hal 64 bit ini, saya mengalami masalah yang sama dengan @michalsuryntequiqo dan saya tidak dapat membangun apa pun sekarang melalui CLI. Itu dibangun dan berjalan dengan baik melalui Android Studio....
jalankan 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.

dokter

Sunting:
baru saja mencoba dengan komit tepat sebelum 8627ff433b4658195e66b9c0034902116f53d580 dan itu menghasilkan apk dengan kesalahan biasa Gradle build failed to produce an Android package. karena https://github.com/flutter/flutter/issues/24106

@blasten Adakah yang tahu bagaimana

Sunting 2:
Membuka masalah baru untuk ini: https://github.com/flutter/flutter/issues/34598

Saya membaca dokumentasi flutter hari ini dan saya menemukan:

Dari baris perintah:

Masukkan cd
(Menggantidengan direktori aplikasi Anda.)
Jalankan flutter build apk --split-per-abi
(Perintah build flutter default ke --release.)
Perintah ini menghasilkan dua file 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 kode versi mana yang digunakan, saat menggunakan --split-per-abi ?

Saya melihatnya di dokumentasi dan saya berpikir untuk mempublikasikannya di sini. Saya tidak mengujinya.
Saya menjalankan perintah dan tidak berhasil. Ia mengatakan:

Tidak dapat menemukan opsi bernama "split-per-abi".

Jalankan 'flutter -h' (atau 'flutter-h') untuk perintah dan opsi flutter yang tersedia.

dokter berdebar:

Flutter 1.6.3 • saluran beta • https://github.com/flutter/flutter.git
Kerangka • revisi bc7bc94083 (4 minggu lalu) • 23-05-2019 10:29:07 -0700
Mesin • revisi 8dc3a4cde2
Alat • Dart 2.3.2 (build 2.3.2-dev.0.0 e3edfd36b2)

Menjalankan "upgrade pub berkibar" di consumos_app... 19,8 detik

Dokter lari...
Ringkasan dokter (untuk melihat semua detail, jalankan flutter doctor -v):
[√] Flutter (Saluran beta, v1.6.3, di Microsoft Windows [Versión 10.0.17134.829], lokal es-AR)
[√] Rantai alat Android - kembangkan untuk perangkat Android (Android SDK versi 28.0.3)
[√] Android Studio (versi 3.4)
[√] IntelliJ IDEA Edisi Ultimate (versi 2019.1)
[√] Kode VS (versi 1.26.1)
[√] Kode VS, edisi 64-bit (versi 1.33.1)
[!] Perangkat yang terhubung
! Tidak ada perangkat yang tersedia

Saya pikir fungsi ini akan segera tersedia.

Saya melihatnya di dokumentasi dan saya berpikir untuk mempublikasikannya di sini. Saya tidak mengujinya.
Saya menjalankan perintah dan tidak berhasil. Ia mengatakan:

Tidak dapat menemukan opsi bernama "split-per-abi".
Jalankan 'flutter -h' (atau 'flutter -h') untuk perintah dan opsi flutter yang tersedia.

dokter berdebar:

Flutter 1.6.3 • saluran beta • https://github.com/flutter/flutter.git
Kerangka • revisi bc7bc94 (4 minggu lalu) • 23-05-2019 10:29:07 -0700
Mesin • revisi 8dc3a4cde2
Alat • Dart 2.3.2 (build 2.3.2-dev.0.0 e3edfd36b2)
Menjalankan "upgrade pub berkibar" di consumos_app... 19,8 detik
Dokter lari...
Ringkasan dokter (untuk melihat semua detail, jalankan flutter doctor -v):
[√] Flutter (Saluran beta, v1.6.3, di Microsoft Windows [Versión 10.0.17134.829], lokal es-AR)
[√] Rantai alat Android - kembangkan untuk perangkat Android (Android SDK versi 28.0.3)
[√] Android Studio (versi 3.4)
[√] IntelliJ IDEA Edisi Ultimate (versi 2019.1)
[√] Kode VS (versi 1.26.1)
[√] Kode VS, edisi 64-bit (versi 1.33.1)
[!] Perangkat yang terhubung
! Tidak ada perangkat yang tersedia

Saya pikir fungsi ini akan segera tersedia.

Harap diingat bahwa ini hanya di saluran dev / versi 1.7.4 dan seterusnya. Anda menjalankan saluran beta / versi 1.6.3

Saya baru saja mencobanya (membangun dan menerbitkan menggunakan Codemagic) dan itu bekerja dengan sangat baik. Terima kasih!

Google masih mengeluh bahwa saya tidak menggunakan appbundle. Mengingat peringatan ini, memublikasikan apk mungkin tidak terlalu masuk akal?

Saya akan menggunakan appbundle - tetapi ini menghentikan pengujian otomatis Google (menghasilkan laporan pra-peluncuran) agar tidak berfungsi. Haruskah saya membuka masalah baru untuk ini?

@nohli Kami memperbarui dokumen untuk mencerminkan yang terbaru tentang bundel aplikasi/APK: https://flutter.dev/docs/deployment/android#building -the-app-for-release.

Jangan ragu untuk mengajukan masalah tentang pengujian otomatis Google.

Saya membangun aplikasi saya dari bundel tetapi setelah berjalan di perangkat 64bit mengatakan libflutter.so hilang dengan membangun aplikasi untuk perangkat 32bit dan perangkat 64bit. Bagaimana cara menambahkan libflutter.so untuk kedua arsitektur dalam file bundel tunggal?

@nohli Kami memperbarui dokumen untuk mencerminkan yang terbaru tentang bundel aplikasi/APK: https://flutter.dev/docs/deployment/android#building -the-app-for-release.

Jangan ragu untuk mengajukan masalah tentang pengujian otomatis Google.

@blasten Prosedur yang diberikan pada tautan tidak menghasilkan APK 64-bit dalam bundel. Ketika saya mengunggah bundel, toko Google Play memiliki kesalahan yang sama dengan mengatakan bahwa APK Anda tidak sesuai dengan 64-bit.

@wal33d006 lihat penafian di bagian atas halaman - ini hanya berlaku untuk v1.7.4 atau lebih baru (saat ini saluran dev atau master).

@wal33d006 lihat penafian di bagian atas halaman - ini hanya berlaku untuk v1.7.4 atau lebih baru (saat ini saluran dev atau master).

@tvolkert Saya bahkan tidak dapat membangun aplikasi saya melalui saluran dev atau master.

Ini adalah hasil saya ketika saya membangunnya di saluran dev atau master:

Pesan kompiler:
file:///Users/waleed/.pub-cache/hosted/pub.dartlang.org/cached_network_image-0.5.1/lib/cached_network_image. dart:199 :38: Error: Tipe argumen 'void Function(ImageInfo, bool)' tidak dapat ditetapkan ke tipe parameter 'ImageStreamListener'.

  • 'ImageInfo' berasal dari ' package:flutter/src/painting/image_stream.dart ' ('file:///Users/waleed/Developer/flutter-sdk/flutter/packages/flutter/lib/src/painting/image_stream.dart ').
  • 'ImageStreamListener' berasal dari ' package:flutter/src/painting/image_stream.dart ' ('file:///Users/waleed/Developer/flutter-sdk/flutter/packages/flutter/lib/src/painting/image_stream.dart ').
    Coba ubah jenis parameter, atau berikan argumen ke '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: Error: Tipe argumen 'void Function(ImageInfo, bool)' tidak dapat ditetapkan ke tipe parameter 'ImageStreamListener'.
  • 'ImageInfo' berasal dari ' package:flutter/src/painting/image_stream.dart ' ('file:///Users/waleed/Developer/flutter-sdk/flutter/packages/flutter/lib/src/painting/image_stream.dart ').
  • 'ImageStreamListener' berasal dari ' package:flutter/src/painting/image_stream.dart ' ('file:///Users/waleed/Developer/flutter-sdk/flutter/packages/flutter/lib/src/painting/image_stream.dart ').
    Coba ubah jenis parameter, atau berikan argumen ke '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: Error: Tipe argumen 'void Function(ImageInfo, bool)' tidak dapat ditetapkan ke tipe parameter 'ImageStreamListener'.
  • 'ImageInfo' berasal dari ' package:flutter/src/painting/image_stream.dart ' ('file:///Users/waleed/Developer/flutter-sdk/flutter/packages/flutter/lib/src/painting/image_stream.dart ').
  • 'ImageStreamListener' berasal dari ' package:flutter/src/painting/image_stream.dart ' ('file:///Users/waleed/Developer/flutter-sdk/flutter/packages/flutter/lib/src/painting/image_stream.dart ').
    Coba ubah jenis parameter, atau berikan argumen ke '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: Kesalahan: Tipe argumen 'Fungsi Null(StringBuffer)' tidak dapat ditetapkan ke tipe parameter 'IterableFungsi()'.
  • 'StringBuffer' berasal dari ' dart:core '.
  • 'Iterable' berasal dari ' dart:core '.
  • 'DiagnosticsNode' berasal dari ' package:flutter/src/foundation/diagnostics.dart ' ('file:///Users/waleed/Developer/flutter-sdk/flutter/packages/flutter/lib/src/foundation/diagnostics.dart ').
    Coba ubah tipe parameter, atau berikan argumen ke 'IterableFungsi()'.
    informationCollector: (Informasi StringBuffer) {
    ^
    Kompiler dihentikan secara tidak terduga.

FAILURE: Build gagal dengan pengecualian.

  • Di mana:
    Baris skrip '/Users/waleed/Developer/flutter-sdk/flutter/packages/flutter_tools/gradle/flutter.gradle': 638

  • Apa yang salah:
    Eksekusi gagal untuk tugas ': app:compileflutterBuildReleaseArm '.

    Proses 'command'/Users/waleed/Developer/flutter-sdk/flutter/bin/flutter'' selesai dengan nilai keluar bukan nol 1

  • Mencoba:
    Jalankan dengan opsi --stacktrace untuk mendapatkan jejak tumpukan. Jalankan dengan opsi --info atau --debug untuk mendapatkan lebih banyak keluaran log. Jalankan dengan --scan untuk mendapatkan wawasan penuh.

  • Dapatkan bantuan lebih lanjut di https://help.gradle.org

BANGUN GAGAL dalam 14 detik
Menjalankan tugas Gradle 'bundleRelease'...
Menjalankan tugas Gradle 'bundleRelease'... Selesai 15.0 detik
Bundel tugas gradleRelease gagal dengan kode keluar 1

@wal33d006 package:cached_network_image sekarang versi 0.8.0 dan Anda menggunakan 0.5.1 -- sepertinya saat menjalankan Flutter versi yang lebih baru, Anda perlu memperbarui batasan versi di pubspec.yaml dan flutter packages upgrade

@tvolkert Anda mengatakan bahwa di v1.7.4 file libflutter.so ditambahkan secara otomatis untuk perangkat 64bit ketika kami membuat bundel menggunakan perintah flutter build appbundle ?

@nimesh1997 ya, meskipun build yang membuatnya stabil kemungkinan akan menjadi versi yang lebih baru.

@tvolkert Saya mengubah saluran saya ke saluran master ### dan juga meningkatkan versi ### package:cached_network_image ke 0.8.0 dengan mengubah di dalam pubspec.yaml. Tetapi ketika menjalankan upgrade paket flutter. Kesalahan menunjukkan di bawah ini seperti ini:
**Karena cached_network_image >=0.7.0 bergantung pada flutter_cache_manager ^0.3.2 yang bergantung pada path_provider ^0.5.0+1, cached_network_image >=0.7.0 membutuhkan path_provider ^0.5.0+1.

@ nimesh1997 dapatkah Anda mengajukan masalah terpisah dan cc saya? Ada ratusan orang yang berlangganan bug ini.

@tvolkert Kapan flutter versi 1.7.4 akan tersedia di saluran stabil dan ketika kesalahan yang disebutkan di bawah ini diselesaikan di flutter versi 1.7.4 karena kesalahan itu tidak berjalan pada perangkat 64bit (libflutter.so hilang)?

Ini adalah output yang saya dapatkan ketika saya menjalankan flutter v1.7.4 atau lebih baru: -

Pesan kompiler:
file:///home/zunroof-dev-4/package_flutter/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_image-1.0.0/lib/network. panah:75 :31:
Kesalahan: Tipe argumen 'Fungsi Null(StringBuffer)' tidak dapat ditetapkan ke tipe parameter 'IterableFungsi()'.

  • 'StringBuffer' berasal dari ' dart:core '.
  • 'Iterable' berasal dari ' dart:core '.
  • 'DiagnosticsNode' berasal dari ' package:flutter/src/foundation/diagnostics.dart ' ('file:///home/zunroof-dev-4/package_flutter/flutter/packages/flutter/lib/src/foundation/diagnostics.dart ').
    Coba ubah tipe parameter, atau berikan argumen ke 'IterableFungsi()'.
    informationCollector: (Informasi 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: Kesalahan: Tipe argumen 'String' tidak dapat ditetapkan ke tipe parameter 'DiagnosticsNode'.
  • 'DiagnosticsNode' berasal dari ' package:flutter/src/foundation/diagnostics.dart ' ('file:///home/zunroof-dev-4/package_flutter/flutter/packages/flutter/lib/src/foundation/diagnostics.dart ').
    Coba ubah tipe parameter, atau berikan argumen ke 'DiagnosticsNode'.
    konteks: '$runtimeType gagal memuat ${instructions.uri}',
    ^
    Kompiler dihentikan secara tidak terduga.

Kompilasi kesalahan, tidak menghasilkan log dan flutter doctor -v tidak menunjukkan kesalahan. apa yang harus saya lakukan?

Jika Anda menerapkan aplikasi ke Play Store, disarankan untuk menggunakan aplikasi
bundel atau pisahkan APK untuk mengurangi ukuran APK.
Untuk menghasilkan app bundle, jalankan:
flutter build appbundle --target-platform android-arm,android-arm64
Pelajari lebih lanjut di: https://developer.android.com/guide/app-bundle
Untuk membagi APK per ABI, jalankan:
flutter build apk --target-platform android-arm,android-arm64
--split-per-abi
Pelajari lebih lanjut tentang:
https://developer.android.com/studio/build/configure-apk-splits#configur
e-abi-split
Inisialisasi gradle... 7,4s
Menyelesaikan dependensi... 4,3s
registerResGeneratingTask sudah usang, gunakan registerGeneratedResFolders(FileCollection)
registerResGeneratingTask sudah usang, gunakan registerGeneratedResFolders(FileCollection)
registerResGeneratingTask sudah usang, gunakan registerGeneratedResFolders(FileCollection)
Menjalankan tugas Gradle 'assembleRelease'...
Menjalankan tugas Gradle 'assembleRelease'... Selesai 9,0 detik

Gradle build gagal menghasilkan paket Android.

@leonardop21 coba dengan

bergetar lari -v

@canewsin

YA AMPUN. Saya tidak tahu harus berbuat apa sekarang

Gradle build gagal menghasilkan paket Android.

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

1 _buildGradleProjectV2

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

2 _async ThenWrapperHelper.

(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 Masa Depan._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 (paket:flutter_tools/src/base/process.dart)

13 _async ThenWrapperHelper.

(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)

20 Masa Depan._asyncLengkap.

(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)

Kami telah memperbarui dokumen kami untuk menunjukkan bagaimana Anda dapat membangun APK dengan biner 32-bit dan 64-bit. https://flutter.dev/docs/deployment/android#building -the-app-for-release .

Silakan gunakan saluran dev : v1.7.9 atau lebih tinggi. Tim sedang berupaya untuk mempromosikan perubahan terbaru ke beta pada Jumat (28/6/2019) ini.

Pesan kompiler:
file:///Users/systemgnk/Desktop/flutter/.pub-cache/hosted/pub.dartlang.org/flare_flutter-1.5.2/lib/flare. dart:1033 :18: Kesalahan: Tipe argumen 'Int32List' tidak dapat ditetapkan ke tipe parameter 'Uint16List'.

  • 'Int32List' berasal dari ' dart:typed_data '.
  • 'Uint16List' berasal dari 'dart:typed_data'.
    Coba ubah tipe parameter, atau berikan argumen ke 'Uint16List'.
    indeks: _indices, textureCoordinates: _uvBuffer);
    ^
    Kompiler dihentikan secara tidak terduga.

FAILURE: Build gagal dengan pengecualian.

  • Di mana:
    Baris skrip '/Users/systemgnk/Desktop/flutter/packages/flutter_tools/gradle/flutter.gradle': 631

  • Apa yang salah:
    Eksekusi gagal untuk tugas ': app:compileflutterBuildReleaseArm '.

    Proses 'command'/Users/systemgnk/Desktop/flutter/bin/flutter'' selesai dengan nilai keluar bukan nol 1

  • Mencoba:
    Jalankan dengan opsi --stacktrace untuk mendapatkan jejak tumpukan. Jalankan dengan opsi --info atau --debug untuk mendapatkan lebih banyak keluaran log. Jalankan dengan --scan untuk mendapatkan wawasan penuh.

  • Dapatkan bantuan lebih lanjut di https://help.gradle.org

BANGUN GAGAL dalam 22 detik
Menjalankan tugas Gradle 'assembleRelease'...
Menjalankan tugas Gradle 'assembleRelease'... Selesai 23.3 detik
Tugas gradle assembleRelease gagal dengan kode keluar 1

[✓] Flutter (Pengembang saluran, v1.7.10, di Mac OS X 10.13.6 17G65, lokal en-US)
• Flutter versi 1.7.10 di /Users/systemgnk/Desktop/flutter
• Revisi framework 9a3a7490c8 (2 hari yang lalu), 25-06-2019 15:59:15 +0200
• Revisi mesin ae8e6d9f46
• Dart versi 2.4.0

[✓] Rantai alat Android - kembangkan untuk perangkat Android (Android SDK versi 28.0.3)
• Android SDK di /Users/systemgnk/Library/Android/sdk
• Lokasi Android NDK tidak dikonfigurasi (opsional; berguna untuk dukungan pembuatan profil asli)
• Platform android-28, build-tools 28.0.3
• Biner Java di: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
• Lingkungan Runtime OpenJDK versi Java (build 1.8.0_152-release-1248-b01)
• Semua lisensi Android diterima.

[✓] Xcode - kembangkan untuk iOS dan macOS (Xcode 10.1)
• Xcode di /Applications/Xcode.app/Contents/Developer
• Xcode 10.1, Bangun versi 10B61
• CocoaPods versi 1.6.0

[✓] Alat iOS - kembangkan untuk perangkat iOS
• ios-deploy 1.9.4

[✓] Chrome - kembangkan untuk web
• Chrome di /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (versi 3.3)
• Android Studio di /Applications/Android Studio.app/Contents
• Plugin Flutter versi 33.3.1
• Plugin Dart versi 182.5215
• Lingkungan Runtime OpenJDK versi Java (build 1.8.0_152-release-1248-b01)

[✓] Perangkat yang terhubung (4 tersedia)
• Android SDK dibuat untuk x86 • emulator-5554 • android-x86 • Android 7.0 (API 24) (emulator)
• iPhone Sistem • 73145c33ee6d180a2db3d4a96b908ceb4c49065b • ios • iOS 12.3.1
• macOS • macOS • darwin-x64 • Mac OS X 10.13.6 17G65
• Chrome • chrome • javascript web • Google Chrome 75.0.3770.100

• Tidak ada masalah yang ditemukan!

Saya masih mengalami masalah dengan membangun apk.
Saya hanya tersedia untuk membangun apk 32bit di saluran stabil.

Saya pikir saya harus menunggu sampai tim flutter memperbaiki bug ini daripada menggunakan dev atau master channel SDK.

Terima kasih.

@JaeyoungChu Lihat 2d-inc/Flare-Flutter#79

@ctrysbita Terima kasih atas tautannya. Saya mengubah saluran menjadi master dan mengubah jenis _indices dari Int32List menjadi Uint16List.
apk yang diunggah di play store tidak memiliki peringatan untuk 64bit dan itu berjalan setelah menginstal dari halaman uji play store.

Saya memiliki masalah lain dengan dev channel flutter SDK seperti dialog izin tidak muncul untuk lokasi dan peta google tidak muncul di ios dan tidak dapat menampilkan file gambar besar dengan http (gambar jaringan yang di-cache). Masalah-masalah itu tidak pasti karena saluran pengembang tetapi ketika saya kembali ke stabil dan membangun lagi semua masalah hilang. Saya tidak punya banyak waktu untuk menggali masalah ini sehingga tidak 100% yakin. Maaf tentang itu, tetapi mungkin seseorang mendapatkan petunjuk dari masalah ini.

Ini adalah solusi saya:

  1. di 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. jalankan flutter build apk --release --target-platform=android-arm
  2. unggah app-armeabi-v7a-release.apk ke play store
  3. kenaikan versionCode
  4. jalankan flutter build apk --release --target-platform=android-arm64
  5. unggah app-arm64-v8a-release.apk ke play store

Google play store akan melayani Aplikasi sesuai dengan arsitektur perangkat. Perangkat 32bit senang, perangkat 64bit senang, dan saya senang mengetahui bahwa ukuran APK saya tetap relatif kecil sambil tetap melayani kedua arsitektur.

Jika kami menyertakan dukungan untuk kedua arsitektur dalam APK yang sama, perkirakan ukuran aplikasi Anda menjadi 10 MB+

DI MANA? DI MANA kita menambahkan bagian split ke file gradle?? Saya menambahkannya di antara flutter {} dan dependensi {} dan itu tidak akan membangun APK pertama seperti yang tertulis:

Harap tinjau penyiapan proyek Gradle Anda di folder Android/.

Jadi jelas ini tidak benar, karena ini adalah satu-satunya perubahan yang saya buat pada proyek sejak build terakhir saya.

@ArtfulDodgerB92 Terima kasih atas solusinya. saluran mana yang Anda gunakan untuk membuat apk dan versi?

DI MANA? DI MANA kita menambahkan bagian split ke file gradle?? Saya menambahkannya di antara flutter {} dan dependensi {} dan itu tidak akan membangun APK pertama seperti yang tertulis:

Harap tinjau penyiapan proyek Gradle Anda di folder Android/.

Jadi jelas ini tidak benar, karena ini adalah satu-satunya perubahan yang saya buat pada proyek sejak build terakhir saya.

@ArtfulDodgerB92 itu harus berada di dalam bagian android{} , seperti yang tertulis di sini: https://developer.android.com/studio/build/configure-apk-splits.html

FYI, pengumuman berikut telah dikirim ke [email protected] mengenai dukungan 64-bit kami.

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

ada berita tentang rilis beta yang akan datang?

@nohli kami menunda rilis beta beberapa hari untuk mengambil perbaikan (kembalikan komit) ke https://github.com/flutter/flutter/issues/35291. Kami sedang bekerja untuk mendapatkan rilis ke beta ASAP.

Ini sekarang ditayangkan di saluran beta, dalam rilis v1.7.8+hotfix.2

Ini sekarang ditayangkan di saluran beta, dalam rilis v1.7.8+hotfix.2

ool bagaimana cara menghasilkan apk rilis?

Ini sekarang ditayangkan di saluran beta, dalam rilis v1.7.8+hotfix.2

ool bagaimana cara menghasilkan apk rilis?

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

Ini sekarang ditayangkan di saluran beta, dalam rilis v1.7.8+hotfix.2

ool bagaimana cara menghasilkan apk rilis?

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

saya mencoba tetapi tidak bekerja pada 32

saya mencoba tetapi tidak bekerja pada 32

Apa yang anda maksud dengan 32 ? Seperti "Saya dapat membuat apk gemuk, dan apk itu berfungsi pada perangkat 64-bit, tetapi mogok pada perangkat 32-bit"?

Bisakah Anda memposting hasil flutter doctor , langkah demi langkah Anda (misalnya ini adalah langkah 2 dari progard https://flutter.dev/docs/deployment/android#step-2---enable- obfuscation-andor-minification), apakah Anda membuat APK atau AAB, dan perangkat mana yang Anda uji?

apakah kita masih perlu menempatkan
ndk { abiFilters 'armeabi-v7a' , 'x86', 'armeabi' } secara bertahap atau tidak lagi diperlukan setelah perbaikan pada beta??

@ksamj yang tidak diperlukan.

saya mencoba tetapi tidak bekerja pada 32

Apa yang anda maksud dengan 32 ? Seperti "Saya dapat membuat apk gemuk, dan apk itu berfungsi pada perangkat 64-bit, tetapi mogok pada perangkat 32-bit"?

Bisakah Anda memposting hasil flutter doctor , langkah demi langkah Anda (misalnya ini adalah langkah 2 dari progard https://flutter.dev/docs/deployment/android#step-2---enable- obfuscation-andor-minification), apakah Anda membuat APK atau AAB, dan perangkat mana yang Anda uji?

Ringkasan dokter (untuk melihat semua detail, jalankan flutter doctor -v):
[✓] Flutter (Channel beta, v1.7.8+hotfix.2, di Mac OS X 10.14.5 18F132, lokal ru-RU)

[✓] Rantai alat Android - kembangkan untuk perangkat Android (Android SDK versi 28.0.3)
[✓] Xcode - kembangkan untuk iOS dan macOS (Xcode 10.2.1)
[✓] Alat iOS - kembangkan untuk perangkat iOS
[✓] Android Studio (versi 3.4)
[✓] Perangkat yang terhubung (1 tersedia)

• Tidak ada masalah yang ditemukan!

Ringkasan dokter (untuk melihat semua detail, jalankan flutter doctor -v):
[✓] Flutter (Channel beta, v1.7.8+hotfix.2, di Mac OS X 10.14.5 18F132, lokal ru-RU)

[✓] Rantai alat Android - kembangkan untuk perangkat Android (Android SDK versi 28.0.3)
[✓] Xcode - kembangkan untuk iOS dan macOS (Xcode 10.2.1)
[✓] Alat iOS - kembangkan untuk perangkat iOS
[✓] Android Studio (versi 3.4)
[✓] Perangkat yang terhubung (1 tersedia)

• Tidak ada masalah yang ditemukan!
Ringkasan dokter (untuk melihat semua detail, jalankan flutter doctor -v):
[✓] Flutter (Channel beta, v1.7.8+hotfix.2, di Mac OS X 10.14.5 18F132, lokal ru-RU)

[✓] Rantai alat Android - kembangkan untuk perangkat Android (Android SDK versi 28.0.3)
[✓] Xcode - kembangkan untuk iOS dan macOS (Xcode 10.2.1)
[✓] Alat iOS - kembangkan untuk perangkat iOS
[✓] Android Studio (versi 3.4)
[✓] Perangkat yang terhubung (1 tersedia)

• Tidak ada masalah yang ditemukan!
membangun apk
Saya melakukan semuanya seperti dalam instruksi tetapi tidak menginstal pada 32 bit

Saya melakukan semuanya seperti dalam instruksi tetapi tidak menginstal pada 32 bit

Adakah tangkapan layar/log yang menunjukkan bahwa penginstalan apk 32-bit pada perangkat 32-bit tidak berhasil, dan model perangkat apa itu?

Halo semua,

v1.7.8+hotfix.2 telah dirilis ke saluran stabil, jadi perbaikan ini sekarang tersedia di semua saluran. Terima kasih semuanya atas kesabaran dan bantuan Anda selama ini!

Saya melakukan semuanya seperti dalam instruksi tetapi tidak menginstal pada 32 bit

Adakah tangkapan layar/log yang menunjukkan bahwa penginstalan apk 32-bit pada perangkat 32-bit tidak berhasil, dan model perangkat apa itu?

terima kasih atas bantuannya, saya mencoba membangun appbundle dan berhasil.

@tvolkert Masalah yang sama, silakan periksa. https://github.com/flutter/flutter/issues/31962#issuecomment -509458960

@ nimesh1997 masalah itu tidak ada hubungannya dengan yang ini. Jika Anda tidak menemukan jawaban yang diberikan dalam masalah tertaut bermanfaat, mungkin Anda dapat melihat memposting pertanyaan Stackoverflow dengan masalah Anda.

@tvolkert - hanya untuk memperjelas - perbaikan terbaru di atas dapat digunakan untuk membangun apk terpisah sesuai dengan instruksi flutter docs , benar?
Oleh karena itu, tidak perlu membuat perubahan lain dalam file gradle seperti yang dijelaskan dalam solusi parsial sebelumnya
Terima kasih untuk Anda dan seluruh tim kerja yang sangat baik dan pengiriman tepat waktu!

Saya baru saja mengkompilasi salah satu aplikasi saya dengan hot fix terbaru. Akibatnya app-production-armeabi-v7a-release.apk dikompilasi tidak dapat berjalan di Galaxy S3 mini (Android OS 4.1.2) - setelah layar splash, aplikasi ditutup tanpa pemberitahuan apa pun.
Namun saya berhasil menjalankan apk yang sama pada 64 telepon misalnya Galaxy S8.
inilah cara saya menjalankan flutter dari baris perintah:

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

dan inilah flutter doctor -v

[√] Flutter (Saluran stabil, v1.7.8+hotfix.2, di Microsoft Windows [Versi 10.0.17763.557], lokal en-US)
• Flutter versi 1.7.8+hotfix.2 di E:\DevToolsflutter
• Revisi framework 2e540931f7 (7 hari yang lalu), 02-07-2019 09:31:07 -0700
• Revisi mesin b1cb0d9e9b
• Dart versi 2.4.0

[√] Rantai alat Android - kembangkan untuk perangkat Android (Android SDK versi 28.0.3)
• Android SDK di E:\DevTools\Android\Sdk
• Lokasi Android NDK tidak dikonfigurasi (opsional; berguna untuk dukungan pembuatan profil asli)
• Platform android-28, build-tools 28.0.3
• ANDROID_SDK_ROOT = E:\DevTools\Android\Sdk
• Biner Java di: E:\DevTools\android-studio\jre\bin\java
• Lingkungan Runtime OpenJDK versi Java (build 1.8.0_152-release-1343-b01)
• Semua lisensi Android diterima.

[√] Android Studio (versi 3.4)
• Android Studio di E:\DevTools\android-studio
• Plugin Flutter versi 37.0.1
• Plugin Dart versi 183.6270
• Lingkungan Runtime OpenJDK versi Java (build 1.8.0_152-release-1343-b01)

[√] Perangkat yang terhubung (1 tersedia)
• Android SDK dibuat untuk x86 • emulator-5554 • android-x86 • Android 8.1.0 (API 27) (emulator)

• Tidak ada masalah yang ditemukan!

Selain itu - apk gemuk juga tidak dapat berjalan - setelah menginstal (pada perangkat arm-32 yang sama) & menjalankannya baru saja ditutup.
Tolong beri tahu saya cara melanjutkan dan menyelesaikan masalah, terima kasih!

@angel1st apakah mungkin Anda dapat membagikan file AAB dan/atau APK Anda di sini sehingga kami dapat membantu Anda memecahkan masalah?

@truongsinh - tentu, ini dia:

app-production-releases.zip

Saya telah mengunggah kedua APK, meskipun, dugaan masalah adalah dengan versi arm-32 seperti yang disebutkan di atas.

Guys, sementara itu, apakah seseorang akan begitu baik dan memberi tahu (jika mereka tahu), apa yang akan terjadi setelah 1 Agustus di Google Play Store, jika Anda tidak memiliki versi arm-64 dari aplikasi Anda - apakah apk akan berhenti untuk dilayani ke perangkat arm64 atau Anda tidak akan dapat mengunggah versi hanya arm32 atau keduanya?

@angel1st Saya dapat menjalankan aplikasi (app-production-armeabi-v7a-release.apk) di Android 4.4.2 Galaxy S4. Aplikasi yang bagus!

Saya menduga ini sangat spesifik untuk Galaxy S3 mini / Android OS 4.1.2. Sementara itu, saya meminta konfigurasi ini untuk melihat apakah saya dapat mengulangi masalah tersebut.

@angel1st inilah sumber paling informatif: https://android-developers.googleblog.com/2019/01/get-your-apps-ready-for-64-bit.html

Persyaratan [64-bit stuff] tidak berlaku untuk:

  • APK atau app bundle secara eksplisit menargetkan Wear OS atau Android TV, yang merupakan faktor bentuk yang saat ini tidak mendukung kode 64-bit.
  • APK atau app bundle yang tidak didistribusikan ke perangkat yang menjalankan Android 9 Pie atau lebih baru.

Mulai 1 Agustus 2019:

  • Semua aplikasi baru dan pembaruan aplikasi yang menyertakan kode asli wajib menyediakan versi 64-bit selain versi 32-bit saat memublikasikan ke Google Play.

Dengan kata lain, aplikasi terus didistribusikan, meskipun Anda tidak dapat mengunggah versi baru dari aplikasi yang sudah ada, atau memublikasikan aplikasi baru tanpa kepatuhan.

@ angel1st Saya dapat

Logcatnya adalah:

[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.

Saya mengajukan https://github.com/flutter/flutter/issues/35838 sementara itu.

cc @jason-simmons

@truongsinh - terima kasih atas ikhtisarnya.

@blasten - terima kasih atas umpan balik yang cepat. Sejauh yang saya mengerti, tidak ada yang bisa saya lakukan di ATM selain monitor #35838 dengan harapan akan diselesaikan di beberapa titik bulan ini? Saya yakin masalah yang sama akan muncul di apk lain untuk Android 4.1.2 yang dikompilasi dengan hot fix terbaru?
FYI - apk aplikasi yang dikompilasi dengan versi stabil flutter sebelumnya tidak memiliki masalah ini (S3 mini dengan Android 4.1.2 adalah salah satu perangkat pengujian saya).

Ada orang lain yang mendapat email dari Google hari ini, yang mengatakan

"Diperlukan tindakan: Perbarui aplikasi Anda agar sesuai dengan 64-bit paling lambat 1 Agustus 2019"

meskipun sudah menerbitkan versi 32bit dan 64bit?

Ia mengatakan

Mulai 1 Agustus 2019, semua aplikasi yang menggunakan kode asli harus menyediakan versi 64-bit untuk memublikasikan pembaruan. Sejak email ini dikirim, setidaknya salah satu aplikasi Anda* belum memenuhi persyaratan

*Catatan: Daftar aplikasi ini mencerminkan perkiraan terbaik Google pada pengiriman email ini. (...)

Saya kira, "perkiraan terbaik" Google tidak benar?

Terima kasih untuk tim Flutter. Saya memutakhirkan Flutter dan membangun saluran stabil dan peringatan itu hilang.
berharap untuk tidak memiliki bug dengan penguji tetapi sejauh ini saya belum menemukan bug dengan perangkat nyata!

Terima kasih Tim Flutter, memutakhirkan Flutter dengan hotfix memperbaiki masalah ini saat membuat .aab

Terima kasih kepada tim flutter atas pencapaian ini. Sekarang untuk melanjutkan diprogram!

@ angel1st Saya juga mengalami masalah pada beberapa perangkat Samsung.

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

@abdullayev007 - terima kasih! Saya akan menyarankan Anda untuk melihat #35838, itu mungkin terkait.

Saya melakukan semuanya seperti dalam instruksi tetapi tidak menginstal pada 32 bit

Adakah tangkapan layar/log yang menunjukkan bahwa penginstalan apk 32-bit pada perangkat 32-bit tidak berhasil, dan model perangkat apa itu?
IMG-20190710-WA0000

Perangkatnya adalah Samsung M10

@tvolkert Tolong beri saya solusi untuk memperbaiki masalah berikut:
https://github.com/flutter/flutter/issues/36063

Terima kasih

Saya mencoba versi terbaru dari flutter dari saluran dev - v1.8.4. Saya juga membuat proyek baru - proyek vanilla flutter dan mencoba membangun versi rilis yang ditandatangani darinya. Itu dibangun dan ukuran aplikasi hanya 10,4 mb. Tetapi mencoba semua langkah di atas dalam jejak ini, tidak ada yang membantu. Adakah yang bisa memberikan serangkaian langkah yang jelas untuk mengambil build yang dapat kita dorong ke playstore dengan aab atau apk dengan emulator dan perangkat lokal dari flutter. Sudah lebih dari seminggu, kami memiliki proyek yang dibangun di atas flutter tidak pindah ke prod di android, tetapi kami dapat mempublikasikan ke appstore di ios. Beberapa bantuan akan sangat bagus.

`[✓] Flutter (Channel dev, v1.8.4, di Mac OS X 10.14.5, lokal en-US)
• Flutter versi 1.8.4 di /Users/muthu/muthu/devapps/flutter
• Revisi kerangka kerja 954714c967 (7 hari lalu), 02-08-2019 10:10:39 -0700
• Revisi mesin 26368225b5
• Dart versi 2.5.0 (build 2.5.0-dev.1.0 bd049f5b53)

[!] Android toolchain - kembangkan untuk perangkat Android (Android SDK versi 29.0.1)
• Android SDK di ../Library/Android/sdk
• Lokasi Android NDK tidak dikonfigurasi (opsional; berguna untuk dukungan pembuatan profil asli)
• Platform android-29, build-tools 29.0.1
• Biner Java di: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
• Lingkungan Runtime OpenJDK versi Java (build 1.8.0_152-release-1343-b01)
Status lisensi Android tidak diketahui.
Coba instal ulang atau perbarui Android SDK Manager Anda.
Lihat https://developer.android.com/studio/#downloads atau kunjungi https://flutter.dev/setup/#android -setup
untuk petunjuk rinci.

[✓] Xcode - kembangkan untuk iOS dan macOS (Xcode 10.3)
• Xcode di /Applications/Xcode.app/Contents/Developer
• Xcode 10.3, Bangun versi 10G8
• CocoaPods versi 1.7.3

[✓] Android Studio (versi 3.4)
• Android Studio di /Applications/Android Studio.app/Contents
• Plugin Flutter versi 38.2.1
• Plugin Dart versi 183.6270
• Lingkungan Runtime OpenJDK versi Java (build 1.8.0_152-release-1343-b01)

[✓] Kode VS (versi 1.36.1)
• Kode VS di /Applications/Visual Studio Code.app/Contents
• Ekstensi Flutter versi 3.3.0

[✓] Perangkat yang terhubung (3 tersedia)
• Android SDK dibuat untuk x86 • emulator-5554 • android-x86 • Android 9 (API 28)
(emulator)`

@muthufmass , harap ajukan masalah baru dengan detail tentang apa yang tidak berfungsi dan cara mereproduksi kegagalan. Terima kasih!

Adakah yang bisa memberikan serangkaian langkah yang jelas untuk mengambil build yang bisa kita dorong ke playstore?

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

Adakah yang bisa memberikan serangkaian langkah yang jelas untuk mengambil build yang bisa kita dorong ke playstore?

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

Langkah-langkah ini sudah diikuti, ini tidak berfungsi pada build rilis prod. debug build berfungsi! Saya jelas menemukan perbedaan, dalam build debug, file .so dari flutter ada, tetapi tidak dengan versi rilis. Itu adalah salah satunya, membuat masalah untuk menginstal apk ke emulator atau ke perangkat dengan apk yang ditandatangani.

@muthufmass , harap ajukan masalah baru dengan detail tentang apa yang tidak berfungsi dan cara mereproduksi kegagalan. Terima kasih!

Saya harap saya telah membagikan langkah-langkah yang jelas di atas. Pembuatan aplikasi baru menggunakan flutter create - kode vanilla dengan flutter SDK terbaru. Tidak dapat membangun versi rilis, sementara versi debug berjalan lancar. Perbedaan signifikan antara apk versi prod dan dev dalam ukuran. Mencoba semua langkah di atas, tidak dapat membangun versi rilis yang berjalan. Build terjadi sangat cepat dan file datang kurang dari 11 mb dengan rilis, sementara dengan debug apk sekitar 40mb+. Debug apk berfungsi, sementara rilis prod apk yang ditandatangani bahkan tidak diinstal.

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

@muthufmass ketika Anda mengajukan masalah baru, harap sertakan versi Android SDK, model perangkat, keluaran dokter, dan langkah-langkah mulai dari flutter create .

@muthufmass serta adb logcat output.

Masalah ini telah ditutup - harap ajukan masalah baru agar kami dapat melacaknya dengan benar.

mengangkat tiket terpisah sekarang https://github.com/flutter/flutter/issues/37935

Jika Anda memiliki rasa dalam proyek Anda, dan ingin mendukung x64 dan x32, cukup tambahkan folder jniLibs ke folder rasa Anda dan itu berfungsi dengan baik, seperti ini
image

bagaimana saya bisa melakukan ini di adobe animate cc
butuh info lebih lanjut

Konsol Google play baru-baru ini mulai menonaktifkan tombol peluncuran karena berbagai peringatan. Dan salah satu peringatan itu menggunakan apk alih-alih file .aab. Ada solusi untuk membuat file .aab jika project sudah dibuat di Android Studio atau Unity. Tapi bagaimana jika apk dibuat oleh Animate CC atau Haxe/Flash Develop? Apakah ada cara untuk mengkonversi?

@newapproach tidak jelas bagi saya apakah komentar Anda ada hubungannya dengan Flutter? Apakah Anda bersedia untuk mengajukan masalah baru dengan rincian lebih lanjut? Terima kasih!

Punya masalah yang sama - tetapi flutter.so tidak termasuk dalam folder "armeabi-v7a.
Hanya memiliki perpustakaan pihak ketiga untuk x86 dan armeabi-v7a - tetapi tidak ada arm64.
Ingin membuat flutter hanya untuk "armeabi-v7a dengan
ndk{
abiFilters "armeabi-v7a" // juga tidak berfungsi"armeabi", "x86",
}
dan tetapkan sebagai platform target seperti yang disarankan @mravn-google ke Android-arm.

APK tanpa menentukan lengkungan dan tidak menyertakan perpustakaan
screen shot 2018-07-26 at 21 06 53

APK dengan pustaka dan tanpa spesifikasi lengan
screen shot 2018-07-26 at 21 10 30

APK dengan lengkungan yang ditentukan dan sertakan perpustakaan
screen shot 2018-07-26 at 21 12 58

Adakah saran bagaimana cara men-debug langkah lebih lanjut?

Saya telah menemukan kesalahan ini juga, sudah diperbaiki ?? Bisa membantu saya?

Saya sarankan bertanya di Stack Overflow, atau membuka bug baru. Saya ragu bug tertutup ini akan menjadi tempat yang tepat bagi orang-orang untuk membantu Anda menyelesaikan masalah di atas. Terima kasih!

Ini adalah solusi saya:

  1. di 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. jalankan flutter build apk --release --target-platform=android-arm
  2. unggah app-armeabi-v7a-release.apk ke play store
  3. kenaikan versionCode
  4. jalankan flutter build apk --release --target-platform=android-arm64
  5. unggah app-arm64-v8a-release.apk ke play store

Google play store akan melayani Aplikasi sesuai dengan arsitektur perangkat. Perangkat 32bit senang, perangkat 64bit senang, dan saya senang mengetahui bahwa ukuran APK saya tetap relatif kecil sambil tetap melayani kedua arsitektur.

Jika kami menyertakan dukungan untuk kedua arsitektur dalam APK yang sama, perkirakan ukuran aplikasi Anda menjadi 10 MB+

tidak berfungsi .. ketika saya melihatnya di playstore di pixel 2 dikatakan tidak didukung untuk perangkat ini

Itu berhasil, banyak aplikasi terkenal telah menyebarkan banyak APK dengan cara ini dan membiarkan Play Store menyajikan yang sesuai ke perangkat yang sesuai untuk waktu yang lama.

Bundel aplikasi adalah cara modern untuk melakukan ini.

Itu berhasil, banyak aplikasi terkenal telah menyebarkan banyak APK dengan cara ini dan membiarkan Play Store menyajikan yang sesuai ke perangkat yang sesuai untuk waktu yang lama.

Bundel aplikasi adalah cara modern untuk melakukan ini.

Saya tidak tahu mengapa itu tidak muncul di playstore pixel 2 untuk saya kemudian ... Saya mengikuti persis, dua kali, hanya untuk berjaga-jaga..
Saya menggunakan bundel aplikasi dan aplikasi saya mogok maka saya mencari alternatif

Utas ini telah dikunci secara otomatis karena tidak ada aktivitas terbaru setelah ditutup. Jika Anda masih mengalami masalah serupa, silakan buka bug baru, termasuk keluaran flutter doctor -v dan reproduksi masalah minimal.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat