Flutter: دعم ملفات APK مع ثنائيات 32 بت و 64 بت بداخلها

تم إنشاؤها على ١٥ يونيو ٢٠١٨  ·  286تعليقات  ·  مصدر: flutter/flutter

باستخدام flutter build apk --release --flavor pro بإنشاء ملف apk ، لكن arm64-v8a لا تقم بتضمين libflutter.so file.so فشل تشغيل التطبيق.
عندما أقوم بإضافة --target-platform=android-arm64 : flutter build apk --release --flavor pro --target-platform=android-arm64 ، يتضمن ملف apk so flie. لكن تشغيل التطبيق فشل على وحدة المعالجة المركزية 32 بت.
ماذا يمكنني أن أفعل ، يمكن تشغيل ملف apk على 64 و 32 cpu @ mravn-google

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

أقوم بإنشاء مشروع جديد أو تصحيح أخطاء أو إصدار ، يعمل بشكل جيد. الفرق من مشروع جديد من مشروعي هو أنني أضفت ملف so

image

أين المشكلة ؟

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

التعليق الأكثر فائدة

لدي نفس المشكلة ، فالبناء لـ 32 بت سيستبعد أجهزة 64 بت ، إلا أنه يعمل عليها. يعمل البناء لـ 64 من خلال تحديد --target-platform android-arm64 على أجهزة 64 بت ، لكنه يتعطل على أجهزة 32 بت. كما ستعمل Google أيضًا على تقييد تحميل التطبيقات إلى 64 بت في عام 2019.

فريق Flutter ، يرجى حل هذه المشكلة الأساسية!

ال 286 كومينتر

AFAIK حاليًا ، ستضيف Flutter فقط libflutter.so إلى مجلد النظام الأساسي المحدد في الإصدار APK. كان الحل الذي نجح معي هو إجبار build.gradle على عمل 32 بت فقط (باستثناء جميع مكتبات 64 بت + Intel)

release {

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

cc هيكسي

swavkulinski كيف ستفرج عن التطبيق إلى playstore؟

لديك نفس المشكلة - ولكن flutter.so غير مدرج في "مجلد armeabi-v7a.
لديها مكتبات طرف ثالث فقط لـ x86 و armeabi-v7a - ولكن ليس بها arm64.
أرغب في بناء رفرفة فقط لـ "armeabi-v7a مع
ndk {
abiFilters "armeabi-v7a" // أيضًا لا تعمل "armeabi" ، "x86" ،
}
وتعيين كمنصة مستهدفة كما يقترح @ mravn-google إلى android-arm.

APK بدون تحديد القوس ولا تشمل المكتبات
screen shot 2018-07-26 at 21 06 53

APK مع مكتبات وبدون مواصفات الذراع
screen shot 2018-07-26 at 21 10 30

APK مع تحديد القوس وتضمين المكتبات
screen shot 2018-07-26 at 21 12 58

أي اقتراح كيفية تصحيح المزيد من الخطوات؟

xxseabxx لدي نفس المشكلة

لدي نفس المشكلة ، فالبناء لـ 32 بت سيستبعد أجهزة 64 بت ، إلا أنه يعمل عليها. يعمل البناء لـ 64 من خلال تحديد --target-platform android-arm64 على أجهزة 64 بت ، لكنه يتعطل على أجهزة 32 بت. كما ستعمل Google أيضًا على تقييد تحميل التطبيقات إلى 64 بت في عام 2019.

فريق Flutter ، يرجى حل هذه المشكلة الأساسية!

فريق Flutter ، يرجى حل هذه المشكلة الأساسية!

إذن ، هل أنا مخطئ بقولي أن الرفرفة يمكن أن تدعم فقط إصدار apk لـ 32 أو 64 بت ، ولكن ليس كلاهما؟

اي حظ هنا؟

أعتقد أن تعليق xxseabxx قد يعمل ولكني لم أجربه ...

أنا أيضا أواجه نفس المشكلة.

في جميع تبعياتي ، قمت بعزل حزمة واحدة على الأقل تسببت في المشكلة ، وملأت تقرير خطأ وفقًا لذلك: https://github.com/azihsoyn/flutter_mlkit/issues/36

لعزل المشكلة ، لكل من التبعية / المكون الإضافي الخاص بي:

1) إنشاء مشروع رفرفة فارغ

2) استبدل main.dart بـ

كود مثال الحزمة (على سبيل المثال: https://pub.dartlang.org/packages/flutter_html_view#-example-tab-)

3) قم بتحديث pubspec.yaml وفقًا لذلك

4) الجري

$ flutter build apk

اتضح أن الشخص الذي تم إنشاؤه كان flutter_mlkit.

أريد أن أكون قادرًا على استهداف معماريات 32 و 64.

لديك نفس المشكلة. --target-platform = android-arm64 يعمل معي ولكني أرغب في دعم 32 بت حتى تسحب Google القابس على 32 بت

فريق Flutter ، يرجى حل هذه المشكلة الأساسية!

الكثير من SDK الثالث لا يعمل ، أعتقد أنه أمر عاجل

يمكنني إعادة إنتاج هذا عند إضافة Mapbox إلى تطبيق android.

لدي نفس المشكلة أيضًا ، فأنا أستخدم baiduMap في مشروعي ، ونموذج bebug على ما يرام ، وأطلق الانهيار.
user flutter build apk --release --target-platform = android-arm64 في هاتفي على ما يرام ، لكن الهاتف 32 بت سيتعطل. فريق Flutter Team ، يرجى حل هذه المشكلة في أقرب وقت ممكن.

على غرار https://github.com/azihsoyn/flutter_mlkit/issues/36 ، إنه يعمل بالنسبة لي ، ويمكن تشغيل apk في هاتف 32 بت و 64 بت. تضمين التغريدة

يجب أن تكون هذه مشكلة مهمة جدًا لإصدار apk

هل هناك حل لهذه المشكلة؟

  1. استخراج lib/armeabi-v7a/libflutter.so من $<FLUTTER>/bin/cache/artifacts/engine/android-arm-release/flutter.jar
  2. انسخ الملف armeabi-v7a/libflutter.so إلى $<project>/android/jniLibs/armeabi-v7a/
  3. تعديل $<project>/android/app/build.gradle النحو التالي:
android {
...
    buildTypes {
        release {
            // TODO: Add your own signing config for the release build.
            // Signing with the debug keys for now, so `flutter run --release` works.
            signingConfig signingConfigs.debug
            ndk {
                abiFilters "arm"
            }
        }
        debug {
            ndk {
                abiFilters "arm"
            }
        }
}
    }

بالنسبة إلى NDK ، تتطلب سلسلة أدوات 64 بت minSdkVersion> = 21.

هذا حررني (مع تعيين minSdkVersion المناسب):

الإصدار minSdk = 16

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

الإصدار minSdk = 21

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

احذف كل abiFilters ، إنه يعمل بالنسبة لي.

تضمين التغريدة أواجه هذا أيضًا عند محاولة الدمج مع التطبيق الحالي ، وهو أهم حالة استخدام لدينا في الوقت الحالي.

mindsdk = 21 ، لكن لم تقم بتحديث النظام الأساسي المستهدف بعد

neiljaywarner ، فإن

  1. استخراج lib/armeabi-v7a/libflutter.so من $<FLUTTER>/bin/cache/artifacts/engine/android-arm-release/flutter.jar
  2. انسخ الملف armeabi-v7a/libflutter.so إلى $<project>/android/jniLibs/armeabi-v7a/
  3. تعديل $<project>/android/app/build.gradle النحو التالي:
android {
...
    buildTypes {
        release {
            // TODO: Add your own signing config for the release build.
            // Signing with the debug keys for now, so `flutter run --release` works.
            signingConfig signingConfigs.debug
            ndk {
                abiFilters "arm"
            }
        }
        debug {
            ndk {
                abiFilters "arm"
            }
        }
}
    }

لم ينجح ذلك بالنسبة لي - فقد أنشأ ملف APK كان يفتقد إلى مجلد lib (وبالتالي كان نصف حجم ملف apk السابق).

لقد وجدنا أيضًا أنه إذا طبقنا الحل 32 بت فقط الذي نشره البعض (على سبيل المثال https://medium.com/flutterpub/flutter-app-couldnt-find-libflutter-so-c95ad81cbccd) فإنه ينتج عنه -التطبيق الأداء. على وجه الخصوص في اختبار واحد على Samsung S6 و S9 ، نرى التمرير بطيئًا للغاية في قائمة كبيرة.

لا أعتقد أن المشكلة هي فقط الذراع المفقودة 64 libflutter.so .

حاولت إضافة المكتبة المفقودة إلى APK عن طريق إنشاء arm64 ، ونسخ libflutter.so ثم إعادة إنشاء مكتبة arm64 يدويًا وإضافتها إلى ملف APK ، وإعادة المحاذاة وإعادة التوقيع:

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

يحتوي ملف APK الناتج على libflutter.so لكل من armeabi-v7a و arm64-v8a ، ولكنه يتعطل عند التشغيل بسبب الخطأ التالي:

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'

أفترض أنه يجب شحن أصول اللقطة المنفصلة لكل قوس أيضًا. في الوقت الحالي ، يعد إنشاء ملفي APK منفصلين هو الحل الوحيد المناسب لي.

هذه مشكلة غريبة جدًا يجب مواجهتها بعد قضاء الوقت في كتابة واجهة أمامية في رفرفة فقط لتجد أن الإصدار لا يبني apk بشكل صحيح.

هل سأواجه نفس المشكلة بمجرد أن أقوم بعمل iOS؟

في أي وقت يمكن حل هذه المشكلة؟

هل هذا فقط لأن ملفات gradle الخاصة بنا لا تعرف كيفية تجميع كل البتات الصحيحة لكليهما؟ @ jason- simmonscbracken قد تعرف؟

أو FaisalAbid ربما؟

هل هذا فقط لأن ملفات gradle الخاصة بنا لا تعرف كيفية تجميع كل البتات الصحيحة لكليهما؟ @ jason- simmonscbracken قد تعرف؟

أو FaisalAbid ربما؟

من خلال البتات اليمنى أفترض أنك تعني أكثر من libflutter.so ، وفقًا لهذا التعليق: https://github.com/flutter/flutter/issues/18494#issuecomment -449557182

في الوقت الحالي ، أعتقد أن الحل الوحيد هو إنشاء ملفات APK 32 بت حتى يتم الإصلاح. لاحظ مع ذلك أننا رأينا مشكلات في الأداء مع 32 بت (وإن لم يكن رمزًا مثاليًا مع قوائم كبيرة).

يعمل بشكل جيد بالنسبة لي لإنشاء ملفات APK منفصلة 64 بت و 32 بت وتحميل كليهما إلى Google (يتعاملون مع توفير APK الصحيح للأجهزة الصحيحة تلقائيًا).

يمكنك إنشاء إصدار واحد مع تعيين abiFilters على armeabi-v7a و --target-platform=android-arm ، قم بتحميل ملف APK هذا ، ثم قم بإنشاء إصدار آخر باستخدام abiFilters مضبوطًا على arm64-v8a و --target-platform=android-arm64 وقم بتحميل ذلك أيضًا.

لاحظ أنك تحتاج أيضًا إلى استخدام رمز إصدار مختلف لكل ملف APK ، لذا قم بتضمين شيئًا ما في رمز الإصدار للإشارة إلى أنه 64 أو 32 بت ، تمامًا كما تفعل مع مستوى DPI أو API.

الخيار الأفضل حاليًا هو تعيين abiFilters بشروط من النظام الأساسي المستهدف

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

المشكلة التي أواجهها هي أنني الآن بحاجة إلى تحميل ملفين برموز إصدار مختلفة
يتمثل الإصلاح الحقيقي لهذا في القدرة على إنشاء حزم android مع منصات مستهدفة متعددة. حزم التطبيقات في flutter master حاليًا ولكني لم أتمكن من تشغيلها لهذا الغرض

سيتطلب متجر Play إصدار 64 بت بدءًا من 1 أغسطس.

بافتراض استمرار وجود أجهزة 32 بت ترغب في تشغيل تطبيقاتنا بعد 1 أغسطس ، كيف تتأكد من تضمين 32 بت و 64 بت في إصدارات الإصدارات؟

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

_ جميع التطبيقات الجديدة وتحديثات التطبيقات التي تتضمن رمزًا أصليًا مطلوبة لتوفير إصدارات 64 بت بالإضافة إلى إصدارات 32 بت عند النشر على Google Play._

يتم تلبية هذا المطلب بسهولة الآن مع تطبيقات Flutter من خلال إنشاء ملفي APK - أحدهما لأجهزة 32 بت والآخر لأجهزة 64 بت - وتحميلهما كجزء من نفس الإصدار. سيوفر Google Play تلقائيًا ملف APK المناسب للجهاز المناسب. أنا أفعل هذا وهو يعمل بشكل جيد. أتفق مع المعلقين الآخرين على أن الأمر ليس _ مثاليًا_ ، لكن IMO ليست مشكلة كبيرة في جعل هذا الجزء من سير عملك.

سيكون من الرائع أن يتم إصلاح هذا في المستقبل القريب. يعتبر نهج متعدد APK مجرد حل مؤقت إلى أن ينشئ Flutter ملفات APK بإصدارات متعددة.

يتطلب الكثير من المعالجة اليدوية (رموز الإصدار ، ونظام الإنشاء ، والأتمتة) بالإضافة إلى حِزم تطبيقات Android التي كان من المفترض أن تخفف مطوري خطوات الإنشاء اليدوية.

تشير هذه المشكلة حاليًا إلى إصدارات 32 و 64 بت فقط ، ولكن هناك أيضًا x86 و x64 بالإضافة إلى بعض المطورين في الصين لا يزالون يتحدثون عن دعم mips.

ألا يجب أن تدعم الرفرفة أكبر عدد من بنيات Android السبعة مع أصغر حجم apk ممكن خارج الصندوق؟

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

MarcelEdward يجب أن - لكن حجم APK IMHO ليس هو الجانب الأكثر أهمية ، بالنظر إلى أن Android يدعم الآن حزم التطبيقات (aab) بشكل كامل وسيقوم المستخدمون النهائيون بتنزيل بنية محسّنة لهواتفهم على أي حال.

بالنسبة إلى حجم ملف APK الخاص بالنظام الأساسي الذي يجب أن يكون محسنًا / صغيرًا قدر الإمكان.

أثناء التطوير ، قد يكون من المؤلم إعادة تثبيت APK بالحجم الكامل في كل مرة تقوم فيها بتغيير الرمز الأصلي. الحيلة هي استخدام عوامل تصفية abifilters للحد من إنشاء تصحيح الأخطاء في بنية هواتف الاختبار الخاصة بك. لست متأكدًا مما إذا كان هذا مناسبًا الآن ، نظرًا لأن Flutter يدعم إعادة التحميل السريع.

https://github.com/flutter/flutter/issues/17829 يتعلق بحزم تطبيقات aap ، لكن يمكنني العثور على 32 بت فقط عند التحويل باستخدام flutter build apk

لذلك عندما أفهم صيغة richt ، يتعين علينا بناء نسختين متسللتين مع 32 و 64 على الأقل من تحميلهما كليهما ، وبعد ذلك سيقوم التطبيق ببناء aap بأعجوبة حتى يحصل المستهلك على الإصدار الأمثل لهيكله المعين.

MarcelEdward لا يُنشئ متجر هنا .

يمكنك رؤية مثال جيد على ذلك من خلال إلقاء نظرة على 13 نوعًا مختلفًا من خرائط Google هنا (لاحظ أن APKMirror لا علاقة له بهذه الوظيفة بخلاف كونها طريقة سهلة للحصول على قائمة بالمتغيرات لتطبيق معين). يقدم متجر Play ملف APK المناسب من هذه المتغيرات لجهازك بناءً على خصائصه.

إذا كنت تستخدم حزمة تطبيقات ، فسيتعين عليك فقط تحميل الحزمة مرة واحدة بدلاً من تحميل ملفات APK متعددة ، لكن ما أفهمه هو أن متجر Play يقوم بعد ذلك بإنشاء متغيرات APK المختلفة من أجلك ، وبالتالي فإن النتيجة النهائية متشابهة ولكن هناك عمل أقل لك لأتمتة نفسك. (تدعم حزم التطبيقات أيضًا الوحدات الجديدة المحملة ديناميكيًا ، ولكن هذه قصة أخرى.)

لذلك يبدو مثل ميزة المطلوب هنا هو أن تكون قادرة على تشغيل flutter build مع اثنين --target-platform الحجج ويكون flutter تلقائيا وضع كل أبنية في APK، هل هذا صحيح؟

Hixie ليس libflutter.so يتم إنشاؤه مرة واحدة فقط لكل إصدار رفرفة ونوع الإصدار؟ في هذه الحالة سيكون لديك 8 متغيرات (32،64 ، x86 ، x86_64). أعتقد أنه يجب تحديد هذه الأشياء ببساطة عند إنشاء تطبيق flutter وتصفيته اعتمادًا على الهاتف المستهدف أو حالة الاستخدام. يمكن لـ Gradle إجراء التصفية بشكل جيد.

ما يمتلكه الهاتف هو مستوى منخفض جدًا ، لم أحصل على فكرة عن الهندسة المعمارية التي يمتلكها الأشخاص الذين يستخدمون تطبيقاتنا. يجمع Flutter 32 بت عندما لا يتم تحديد بنية ، لذا سأفترض أن 32 بت يناسب الجميع. ولكن الآن اللعب سيتطلب المتجر 64 بت في أغسطس ، لذلك عندما يناسب 32 بت الجميع و 64 بت مطلوبًا ، يجب أن يدخل هذان النوعان في بنية الإصدار؟

لم أحصل على هاتف android بنفسي ، لذا سأفترض أنه سيعمل عندما يعمل على جهاز محاكاة. إلى أن يذكر مستخدمو التطبيق خلاف ذلك.

@ MarcelEdward2 ليس فقط 32 بت مقابل 64 بت. هناك أربع بنيات مدعومة بواسطة Android NDK الحديث:

  • armeabi-v7a
  • arm64-v8a
  • إلى x86
  • إلى x86_64

في الوقت الحالي ، يتم تعيين Flutter بشكل افتراضي لبناء ملف APK يحتوي على كود أصلي تم تجميعه لـ armeabi-v7a فقط. سيعمل هذا بشكل جيد على arm64-v8a ، على الرغم من وجود عقوبة أداء مقارنة بشيء تم تجميعه لـ arm64-v8a أصلاً. ومع ذلك ، سيتم تشغيله ضمن محاكي ARM على x86 أو x86_64 ، بافتراض أن الجهاز يجمع واحدًا. إذا كان الجهاز x86 / x86_64 لا يحتوي على محاكي ARM ، فلن يعمل على الإطلاق.

مرة أخرى ، لا يتطلب منك متطلب أغسطس إنشاء ملف APK عالمي واحد أو AAB واحد يحتوي على كلا البنيتين. يتطلب الأمر ببساطة أن يحتوي كل إصدار تقوم بإنشائه على (على الأقل) ملف APK واحد مناسب لأجهزة 64 بت. ستكون التعديلات في Flutter لإتاحة إمكانية إنشاء ملف APK / AAB عالمي واحد مع دعم للعديد من البنى أمرًا رائعًا من حيث سير عمل المطور ، ولكن يمكنك تلبية هذا المطلب مع هذه التحسينات أو بدونها.

تم التعديل للإضافة: شخصيًا أعتقد أن الدعم من الدرجة الأولى لحزم التطبيقات هو أفضل طريقة لتحسين الوضع متعدد الأقواس.

appbundle يبدو وكأنه الحل للمضي قدمًا ... أعتقد أن الخطوة التالية هي: # 29303

نظرًا لأنني أفهم هذا الخطأ ، فهو مرتبط جدًا بالانتقال إلى .aab باعتباره تنسيق الإخراج الافتراضي لـ flutter build وجعل ذلك .aab يشتمل بعد ذلك على إصدارات 32 بت و 64 بت:
https://developer.android.com/studio/projects/dynamic-delivery

كنت أفهم أن بعض هذا العمل قد يكون قيد التقدم بالفعل. dnfield قد تعرف.

/ سي سي @ مكليم

يبدو أن .aab قد يساعد ، لكنه قد لا يكون ضروريًا حقًا. هل المشكلة بسيطة مثل إضافة كل من ثنائيات الذراع 32 و 64 بت إلى APK؟

آه فهمت. ذلك لأننا سنحتاج إلى تضمين لقطة AOT للقوس الهدف أيضًا. والآن نضع ذلك فقط ضمن الأصول ، ولا نضع إصدارًا لكل بنية تحت libs . إذا تمكنا من وضع لقطة AOT في مجلد libs الخاص بالعمارة الذي قد يعمل ، وإلا فإننا نريد استخدام تنسيق .aab لهذا السبب.

نريد القيام بذلك على أي حال لدعم بناء .AAR لحالات استخدام add2app. سوف نكز في ذلك.

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

لقد نجح هذا الأمر بالنسبة لي بعد أيام من استكشاف الأخطاء وإصلاحها

الحل المنشور بواسطة AppleEducate لا يعمل عندما أحاول تشغيل التطبيق على المحاكي.

ضعه في قسم التحرير

كان هذا هو الحل:

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

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

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

            // Specifies that we do not want to also generate a universal APK that includes all ABIs.
            universalApk false
        }
    }
  1. تشغيل flutter build apk --release --target-platform=android-arm

  2. تحميل app-armeabi-v7a-release.apk إلى متجر play

  3. زيادة versionCode

  4. تشغيل flutter build apk --release --target-platform=android-arm64

  5. تحميل app-arm64-v8a-release.apk إلى متجر play

سيخدم متجر Google play التطبيق وفقًا لهندسة الجهاز. أجهزة 32 بت سعيدة ، وأجهزة 64 بت سعيدة وأنا سعيد بمعرفة أن حجم APK الخاص بي لا يزال صغيرًا نسبيًا بينما لا يزال يخدم كلا البنيتين.

إذا قمنا بتضمين الدعم لكل من البنيتين في نفس APK ، فتوقع أن يكون حجم التطبيق الخاص بك 10 ميجا بايت +

@ edTheGuy00 أشك في أن حجم التحميل الكبير إلى متجر

يرجى إتاحة إمكانية تضمين جميع البنى الممكنة. لا يهمني إذا كان التحميل إلى متجر الألعاب سيكون 250 ميجابايت.

سيكون من الرائع أن تستخدم الرفرفة مساحة الجيجا بايت على وحدة التخزين الخارجية للتثبيت على هاتف android. هذا إذا كان بإمكان الرفرفة التأثير على التثبيت على هاتف android

أعتقد أن البرنامج النصي flutter.gradle يجب أن يتضمن جميع ABIs في APK النهائي (Universal APK) ثم تشغيل ملفات APK المنقسمة افتراضيًا. ستحدد أدوات android ملف APK المناسب للتحميل على الجهاز المتصل وكل شيء على ما يرام. يمكن بعد ذلك تحميل ملف APK العام النهائي إلى متجر play ، أو إما ملفات APK المقسمة لكل ABI.

في هذه الأثناء كحل ، يمكنك إضافة هذا إلى الجزء السفلي من build.gradle في دليلك 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/"
        }
    }
}

أوصي أيضًا بإضافة هذا إلى قسم buildTypes > release الخاص بك. سيضمن هذا أن إصدار APK الخاص بك يحتوي على كل من ABIs.

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

بعد التعاون مع slightfoot ، توصلنا إلى هذا ولكن لا يزال الأمر غير صحيح تمامًا حيث يتعين عليك إنشاء مرتين في البداية لالتقاط libs التي يتم إدراجها في دليل src الخاص بك.

project.afterEvaluate {
    assembleRelease.doFirst {

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

تحديث: بعد محاولة تشغيل ملف APK هذا على الجهاز ، فشل ، وبالتالي لا يعد حلاً قابلاً للتطبيق. الخطأ هو "خطأ أثناء تهيئة Dart VM: اللقطة غير متوافقة مع تكوين VM الحالي:
تتطلب اللقطة "تعليمات الاستخدام_باري_المنتج لا-" تؤكد "سبب_أسينك_أكوام arm-eabi softfp"
لكن الجهاز الظاهري يحتوي على "تعليمات_الاستخدام_باري_المنتج رقم"

آه فهمت. ذلك لأننا سنحتاج إلى تضمين لقطة AOT للقوس الهدف أيضًا. والآن نضع ذلك فقط ضمن الأصول ، ولا نضع إصدارًا لكل بنية تحت libs . إذا تمكنا من وضع لقطة AOT في مجلد libs الخاص بالعمارة الذي قد يعمل ، وإلا فإننا نريد استخدام تنسيق .aab لهذا السبب.

نريد القيام بذلك على أي حال لدعم بناء .AAR لحالات استخدام add2app. سوف نكز في ذلك.

dnfield هل حققت بعض النجاح في هذا ، حتى الآن؟

العمل من خلال قطعة المكونات في الوقت الراهن. لقد حاولنا إعطاء الأولوية لأجزاء منه لإصلاح مشكلات Android X ، ولكن يجب أن نرى المزيد من ذلك.

gerryhigh وأنا كنت أبحث في هذا. من فضلك تجاهل ردودي الأخيرة. تكمن المشكلة في حقيقة أن libflutter.so غير مضمن لـ 64 بت ولكن بالنسبة لـ AOT ، يجب عليك تشغيل عملية الإنشاء مرتين ، مرة واحدة لـ 32 بت ومرة ​​أخرى لـ 64 بت. يمكنك بعد ذلك الحصول على مجموعتين من كود Dart المترجم في أصول التطبيق الخاص بك بالإضافة إلى نسختين من libflutter.so. أعتقد أن الهدف النهائي سيكون إعداد مهام تجميع لـ Flutter بحيث يتم تشغيل خطوتين منفصلتين للبناء وتقسيم ملفات APK تلقائيًا.

ولكن في الوقت الحالي ، الحل الوحيد هو تشغيل الإصدار مرتين وتحميل ملفات APK متعددة إلى متجر Play.

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

يمكن تحقيق ذلك بشكل أفضل من خلال تمكين حزم APK المنقسمة. يمكن العثور على مزيد من التفاصيل هنا: https://developer.android.com/studio/build/configure-apk-splits

slightfoot نعم ، هذا هو أفضل حل وجدته حتى الآن كما هو مذكور في تعليقي هناك https://github.com/flutter/flutter/issues/18494#issuecomment -477502287

slightfoot إذا فهمت بشكل صحيح ، فلن يكون من الممكن إنشاء ملف APK عالمي حيث توجد بعض التعليمات البرمجية في مجلد الأصول الذي لا يسمح بتقسيم الملفات وفقًا لـ archtecture المستهدف كمجلد lib؟

اللقطة المصممة لكل هندسة مختلفة. ببساطة نسخ المحرك libflutter.so سيتسبب في تعذر تحميل اللقطة إذا كانت بنية اللقطة لا تتطابق مع بنية محرك الرفرفة.
لذلك لا توجد حاليًا طريقة لنا لإنشاء ملف apk عالمي يحتوي على جميع البنى ما لم يتم فصل ملفات اللقطة وتضمين ملف اللقطة لكل بنية.

أنا في حيرة من أمري حول سبب كون هذه مشكلة.

ينشئ Debug إنشاء libflutter.so في x86_64 و x86 و armeabi-v7a و arm64-v8a.

يجب أن تفعل بنيات الإصدار نفس الشيء تمامًا.

يتضمن AGP (Android Gradle Plugin) بالفعل وظيفة لتصفية البنى ، لذلك إذا رغب المستخدم في القيام بذلك لإصدار إصدار ، فيمكنه تعديل build.gradle الخاص به.

eseideldnfield لا أعتقد حقا هذا هو حلها عن طريق الروبوت التطبيق حزم - أنها ليست إخراج الروبوت الافتراضي بعد، وعند تشغيل ملفات apk من IDE سيتم استخدامها لبعض الوقت ولكن أنا متأكد.

تعد AABs سببًا آخر لضرورة تضمين Flutter لجميع بنيات libflutter. بحيث يمكن لمتجر Play Store تصفية البنية التي يوفرها للأجهزة.

athornz لا تكمن المشكلة في libflutter.so ولكن مع تجميع شفرة dart إلى AOT snapshot تتضمن تصميمات debug Dart VM ، لذا فإن كل رمز dart يعمل فقط JIT على VM ، لكن إصدارات الإصدار قم بتجميع كود dart الخاص بك في لقطة ووضع تلك اللقطة في مجلد الأصول. من الناحية المثالية ، يجب تجميع اللقطة لكل بنية ووضعها بجانب libflutter.so ولكن هذا ليس هو الحال في الوقت الحالي. لذلك ، بينما يمكنك تضمين libflutter.so لجميع البنى ، فإن اللقطة ستعمل فقط لأي بنية تم تجميعها من أجلها.

أي خطة لإصلاح هذه المشكلة؟

يطلب متجر Google Play من المطور تقديم دعم 64 بت بعد 1 أغسطس 2019.

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

متطلب 64 بت: ماذا يعني ذلك للمطورين
اعتبارًا من 1 أغسطس 2019:
_ جميع التطبيقات الجديدة وتحديثات التطبيقات التي تتضمن رمزًا أصليًا مطلوبة لتوفير إصدارات 64 بت بالإضافة إلى إصدارات 32 بت عند النشر على Google Play._
الامتداد: سيستمر Google Play في قبول تحديثات 32 بت فقط للألعاب الحالية التي تستخدم Unity 5.6.6 أو أقدم حتى أغسطس 2021.
اعتبارًا من 1 أغسطس 2021:
سيتوقف Google Play عن عرض التطبيقات التي لا تحتوي على إصدارات 64 بت على الأجهزة التي تدعم 64 بت ، مما يعني أنها لن تكون متاحة في متجر Play على تلك الأجهزة.
سيشمل ذلك الألعاب المصممة باستخدام Unity 5.6.6 أو أقدم.

trevorwang يمكننا بالفعل إنشاء 64 بت وتحميلها مع 32 بت إلى متجر Play. إذن هذه ليست مشكلة.

slightfoot هل تقصد أنه يجب علي إنشاء ملف APK آخر 64 بت وتحميله على Google Play؟

كما تعلم ، Google Play غير متوفر في بر الصين الرئيسي. نحن نفضل ملف APK عالميًا لدعم جميع الأنظمة الأساسية.

تضمين التغريدة هكذا أفعل ذلك https://github.com/flutter/flutter/issues/18494#issuecomment -477502287

لا يعمل الشيء المنقسم في ملف gradfle. عليك أن تفعل شيئًا بأحد ملفات build.gradle حتى يعرف flutter كيفية تجميع بنى مختلفة. أو جوجل بلاي سيرفض التجميع الثاني.

شكرا @ edTheGuy00

لكننا نحتاج حقًا إلى ملف APK عالمي بما في ذلك جميع ملفات abis لسوق الصين.

trevorwang ، يمكنك إنشاء كل هدف وتحديد بنية كل ملف APK بشكل صريح. هذه هي الطريقة التي يتم بها ذلك لمعظم مواقع مرآة APK.

الحد 64 بت هو مجرد قيود على متجر Google Play. لا يزال بإمكانك نشر ملف APK armeabi-v7a فقط وسيتمكن الجميع من تشغيل تطبيقك.

يُعد إنشاء ملفات APK منفصلة لكل بنية حلاً بديلًا وليس حلاً للجميع بالتأكيد.

بمجرد دخول قيود Google Play 64bit حيز التنفيذ ، ستؤثر هذه المشكلة على معظم مطوري Flutter ، لذلك نحتاج حقًا إلى حل يسمح ببنى متعددة داخل حزمة / حزمة واحدة.

مجرد تذكير سريع

يستخدم فريق Flutter عدد "Thumbs-up" في مشكلة GitHub كدليل لأولويتها.

أعتقد أن هذه المسألة يجب أن تكون ذات أولوية عالية.

شكرا لعمل gerryhigh و slightfoot

لقد أضفت flutter إلى تطبيق موجود وقمت بإصلاح هذه المشكلة من خلال الحل التالي.
_يرجى إضافة هذا إلى وحدة التطبيق الخاصة بك في المشروع المضيف.

هذا هو البرنامج النصي الخاص بوضع التصحيح ، يرجى تغييره وفقًا للإصدار.

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

أي تطورات حديثة؟

ما انتهى بي الأمر ، لأنني أردت

  • تطبيقات منفصلة لكل هندسة
  • عدم الاضطرار إلى تعديل رمز الإصدار يدويًا
  • قم بتشغيل أمر واحد لإنتاج ملفات apk
  1. تمت إضافة هذا إلى gradle. يضيف 1 أو 2 في نهاية رمز الإصدار ، لذا فإن الإصدار 1004 يصبح 10041 للذراع و 10042 لـ 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. لإنتاج ملفات Apks ، أستخدم أمرًا طرفيًا أطول (يمكنك وضعه في نص برمجي). يقوم بتشغيل الإصدار مرتين ويقوم بإنشاء نسخ من ملفات التطبيقات في النهاية:
flutter clean; flutter build apk --release --target-platform=android-arm; mv build/app/outputs/apk/release/app-release.apk build/app/outputs/apk/release/app-release-arm32.apk; flutter build apk --release --target-platform=android-arm64; mv build/app/outputs/apk/release/app-release.apk build/app/outputs/apk/release/app-release-arm64.apk;

أتمنى أن يساعدك هذا.

إذن فهذه مشكلة أواجهها أيضًا .. لقد قمت بإنشاء حزمة تطبيقات بدلاً من apk وعندما أقوم بتحميلها على google ، فإنها تعطيني تحذيرًا ولن تسمح لي باختبارها.

لقد كنت أستخدم codemagic للقيام بذلك ، فهل هناك طريقة للتوقيع عليها ووضعها في حزمة؟ أو استخدام codemagic لتقوم بتقطيعها؟

أواجه نفس المشكلة التي اعتقدت أنها لا يجب أن توجد على الإطلاق.

كيف يحدث هذا على "الأهداف" المعلم.

الأولوية الثانية: هذه مهام نعتقد أنها تستحق الإصلاح في السنوات القادمة. يتضمن المشكلات التي حددناها والتي قد تمنع الشحن الكامل للتطبيقات التي تواجه المستهلك على نطاق واسع ، ومشكلات الصحة ، والأخطاء المتعلقة بالتلميع والجودة. التاريخ في هذا المعلم تعسفي تمامًا ويهدف فقط إلى فرز الحدث بشكل مناسب.

إنها مشكلة حرجة بالفعل وستصبح أداة إيقاف كاملة للعرض في وقت لاحق من هذا العام بمجرد أن تفرض Google قيود 64 بت.

لقد صدمت علامة بارزة في هذا. لا يوجد تاريخ محدد بعد.

لنكون واضحين: من الممكن ، ولكن من الصعب ، الامتثال للمبادئ التوجيهية الجديدة اليوم. نريد أن نجعل ذلك أسهل.

لذلك عملت طريقة andreidiaconu بالنسبة لي طالما أني أقوم بإنشاء التطبيق يدويًا.

لكني كنت أستخدم codemagic للبناء والنشر.

إذن هذا مضيعة ، يحتاج Flutter إلى بنائه.

في الوقت الحالي أنا شخصياً لا أهتم حقًا إذا كان الأمر معقدًا. إذا كان الأمر معقدًا ، فسيتم تشغيله تلقائيًا بواسطة برنامج نصي. السؤال هو ما إذا كان ذلك ممكنًا وكيف لأن Google Play Console يحذرني:

هذا الإصدار غير متوافق مع متطلبات Google Play 64 بت
تتوفر حزم APK أو حِزم التطبيقات التالية لأجهزة 64 بت ، لكنها تحتوي فقط على رمز أصلي 32 بت: 6.
اعتبارًا من 1. أغسطس 2019 ، يجب أن تتوافق جميع الإصدارات مع متطلبات Google Play 64 بت.
قم بتضمين كود أصلي 64 بت و 32 بت في تطبيقك. استخدم تنسيق نشر "حزمة تطبيقات Android" للتأكد تلقائيًا من أن بنية كل جهاز تتلقى فقط الرمز الأصلي الذي تحتاجه. هذا يتجنب زيادة الحجم الكلي لتطبيقك.

لا أريد حلاً يحتاج إلى رموز إصدار مختلفة وأريد حلاً يعمل مع حزم تطبيقات Android (AAB).

تحذير
هذا الإصدار غير متوافق مع متطلبات Google Play 64 بت

تتوفر حزم APK أو حِزم التطبيقات التالية لأجهزة 64 بت ، لكنها تحتوي فقط على رمز أصلي 32 بت: 3.

اي حل؟

لقد صدمت علامة بارزة في هذا. لا يوجد تاريخ محدد بعد.

لنكون واضحين: من الممكن ، ولكن من الصعب ، الامتثال للمبادئ التوجيهية الجديدة اليوم. نريد أن نجعل ذلك أسهل.

هل يجب تحديث المستندات بإرشادات حول كيفية القيام بذلك لكل من حزم التطبيقات و apk؟ كل ما رأيته حتى الآن هو مجموعات من التعليمات البرمجية والتكوين التي لست متأكدًا من مكانها بالضبط. ربما يمكنني اكتشافها ببعض التجارب والخطأ ، لكنها أقل من مثالية.

المشكلة نفسها

شكرا لعمل gerryhigh وslightfoot

لقد أضفت flutter إلى تطبيق موجود وقمت بإصلاح هذه المشكلة من خلال الحل التالي.
_يرجى إضافة هذا إلى وحدة التطبيق الخاصة بك في المشروع المضيف.

هذا هو البرنامج النصي الخاص بوضع التصحيح ، يرجى تغييره وفقًا للإصدار.

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

يبدو هذا الحل / الحل واعدًا للغاية ، شكرًا trevorwang ! لدي مشاكل في تنفيذ هذا في مشروع رفرفة موجود. هل لديك مثال على ملف build.gradle أو شيء مكافئ من شأنه أن يعرض هذا؟

يرجى ملاحظة أن هذا على الأرجح لن يحل مشكلتك - انظر أدناه

بفضل الجوابtrevorwang واقتراحnoinskit لقد تمكنت لتشمل 64BIT يبس الأم في الإفراج يبني مع إضافة صغيرة ل ./android/app/build.gradle هو مبين أدناه.
يمكنك أيضًا عرض الملف بالكامل هنا .

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

تضمين التغريدة وصلت إلى شيء مشابه. في حالتي ، أحتاج إلى تغيير assembleRelease في مقتطفك إلى mergeReleaseJniLibFolders ، وإلا سينتهي الملف الإضافي * .so ضمن "intermediates / ..." ، ولكن ليس في ملف apk النهائي.

noinskit يبدو أن الحل السابق كان عرضة للخطأ. بعد تشغيل flutter clean ، قام بإنشاء aab بـ 32 بت فقط. يبدو أن استبدال assembleRelease بـ mergeReleaseJniLibFolders يعمل أيضًا بعد تنظيف البنية بشكل صحيح.

SPodjasek هل عليك تعديل أي خيارات أخرى؟

هنا هو app.gradle الخاص بي

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

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

يحتوي كلا المجلدين الوسيطين / jniLibs / release / arm64-v8a و armeabi-v7a على libflutter.so كما هو متوقع ولكن الإصدار الأخير APK لا يزال يفتقد libflutter.so في arm64-v8a.

ها هي لقطة الشاشة

flutter

@ function1983 يمكنك مشاهدة build.gradle الكامل هنا .
اعتبارًا من إصدار الرفرفة الخاص بي:

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

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

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

لقد كنت تحاول استخدام الحلSPodjasek الصورة لبناء appbundle التي تضم كلا الإصدارين 64 و 32 بت. تم إنشاؤه بنجاح ، يمكنني تحميله على Google Play Console ويمكنني تثبيته على كل من الهواتف 32 و 64 بت. لكن التطبيق يتعطل عند تشغيله على جهاز android-arm64 لسبب ما (يبدو أنه يعمل على هاتف android قديم 32 بت كنت أختبره رغم ذلك).

هذا هو الخطأ الذي تلقيته على جهاز 64 بت:

إحباط الرسالة: '[ FATAL: flutter / runtime / dart_vm.cc (416)] خطأ أثناء تهيئة Dart VM: اللقطة غير متوافقة مع تكوين VM الحالي: تتطلب اللقطة' product use_bare_instructions no- "تؤكد" السببية_اسينك_ Stacks arm-eabi softfp "لكن الجهاز الافتراضي يحتوي على" تعليمات استخدام المنتج - "لا" - "تؤكد" السببية_async_stacks arm64-sysv "

لست متأكدًا مما يمكنني فعله ... قد يتعين علي الالتزام بدعم أجهزة 64 بت فقط في الوقت الحالي.

Torrunt هذا الخطأ يرجع إلى أن المحرك يحاول رفض لقطة AOT لـ 32 بت والعثور على واحدة مقابل 64.

نحن نعمل على أن نكون قادرين على إنتاج AAB به كلا الأمرين حتى يتمكن المتجر من تقسيمهما بشكل صحيح.

SPodjasek باستخدام هذا ، زاد حجم ملف app-release.apk الخاص بي من 11.1 ميغابايت إلى 15.7 ميغابايت

SPodjasek باستخدام هذا ، زاد حجم ملف app-release.apk الخاص بي من 11.1 ميغابايت إلى 15.7 ميغابايت

نعم ، لأنه يتضمن بقوة libflutter.so لـ 32 و 64 بت. إذا لم تكن بحاجة إلى ذلك ، فالتزم بالإعداد الافتراضي الحالي ليشمل 32 بت فقط وانتظر حتى يتعامل فريق الرفرفة مع هذا بشكل صحيح.

يبدو أن هناك بعض الاحتمالات:

  • انتظر حتى يحل فريق flutter الشيء البنيوي 32 مقابل 64 مما يجعل متجر google play يقبل إنشاء الرفرفة مرة أخرى
  • يتعين علينا تقييد أجهزة Android المستخدمة إلى 32 بت فقط ، لذلك لن تعمل تطبيقات الرفرفة إلا على أجهزة 32 بت
  • علينا إقناع Google بطريقة ما بعدم فرض 64 بت على متجر الألعاب. (أتساءل ما الفرق بين 32 و 64 بت ، شيء مثل الأعداد الكبيرة؟)
  • قم بتثبيت 32 تطبيقًا بطريقة ما على أجهزة 64 بت ولكن ليس في متجر play ...

ملاحظة للأشخاص الذين يستخدمون --target-platform للإنشاء مقابل android-arm و android-arm64 بشكل منفصل وتحميل ملفي APK.
انتبه إلى أن بعض المكونات الإضافية تستخدم مكتبات أصلية قد تستهدف كليهما ، ولا يقوم flutter بتصفية مجلدات المكتبات ، لذا فإن ملف APK "32 بت" الخاص بك سيظل في الواقع يستهدف arm64 أيضًا وسيتعطل لأن libflutter.so غير موجود ولقطات AOT موجودة بني ل armv7.

لذلك ، ستحتاج بالفعل إلى تصفية الهدف abi في ملف build.gradle الخاص بك.

أعتقد أن flutter build apk --target-platform ... يجب أن يقوم بهذه التصفية بشكل منطقي.

باستخدام حل SPodjasek ، تلقيت خطأ حول مطابقة arm-eabi مقابل arm64-sysv . أعتقد أن الحل الأفضل ، الذي نجح معي ، هو مجرد البناء لـ 32 بت في الوقت الحالي حتى يتم حل كل هذا (حل هنا ):

في المستوى app build.gradle :

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

تلخيص المشكلة من الموضوع - لن يكون من الممكن إنشاء مثل هذا APK لكل من armeabi-v7a و arm64-v8a. يستخدم Flutter لقطات AOT التي تعتمد على ABI ، لذلك مع APK سيكون الحل الوحيد الممكن هو استخدام إصدارات APK متعددة.
سيكون الحل هو استخدام حزم التطبيقات ، والتي ، كما هو الحال الآن ، بها أيضًا بعض المشكلات (# 31922).
بعد دمج # 32787 ، أصبح من الممكن الآن استخدام حزم التطبيقات.

كيف يمكنني تعيين النكهة والملف الهدف (-t lib / another_main.dart ، على سبيل المثال) عند إنشاء حزمة تطبيقات Android عبر Android Studio؟ س

سيتم دعم ذلك عبر flutter build appbundle بعد دمج https://github.com/flutter/flutter/pull/32787 !

swavkulinski كيف ستفرج عن التطبيق إلى playstore؟

كان لا يزال ممكنا في ذلك الوقت. الآن عليك أن تحد من 64 بت. تم إغلاق مكتبة NDK التابعة لجهة خارجية والتي كانت 32 بت فقط.

تضمين التغريدة
هل سيؤدي هذا أيضًا إلى إضافة دعم لـ flutter build apk --release ؟ أم أنه من المخطط التخلص التدريجي من دعم ملفات APK لصالح حزم التطبيقات على المدى الطويل؟ أحب تمامًا البساطة النسبية لملف APK السمين.

zimmi صحيح. يجب أن تكون حِزم التطبيقات هي السبيل للمضي قدمًا. لا يزال بإمكانك استخدام flutter build apk --release عند الضرورة. ما هو أبسط في APK الدهون مقارنة AAB؟

ما هو أبسط في APK الدهون مقارنة AAB؟

AAB ليس ملف تثبيت. Android نفسه لا يمكنه استخدامه. إنه تنسيق ملف لمتجر Google Play فقط. لذا أحتاج إلى apk عندما:

  • التثبيت مباشرة على الجهاز.
  • توزيع التطبيق مباشرة.
  • التوزيع عبر أي سوق تطبيقات آخر باستثناء متجر Google Play. (أمازون وكل الصين).

أرى. شكرا على الخلفية.

يمكنك أيضًا استخراج ملفات APK من AAB باستخدام bundletool .

تضمين التغريدة
شكرا للتأكيد!
بخصوص تعليق البساطة: ماذا قال audkar . أيضًا مع AABs ، يتعين على المطور التفكير في سيناريوهات الفشل المحتملة الناتجة عن الأصول المفقودة. يعد الاختبار على جميع تكوينات الجهاز الممكنة أمرًا صعبًا ، لذا إذا حدثت هذه الأعطال ، فمن المحتمل أن تكون في الإنتاج.

قد يكون حجم التطبيق هو السعر الذي يرغب البعض في دفعه مقابل راحة البال.

أنا متأكد من أن هناك أماكن أفضل لمناقشة مزايا كل نهج من هذه القضية ، على الرغم من ذلك ، لا أريد أن أخرجها عن مسارها.

/ ccjonahwilliams قد نحتاج إلى دعم ملفات APK للدهون في build apk .
هل يجب علينا أيضًا تغيير الإعداد الافتراضي لـ build apk ؟

هناك حاجة بالتأكيد إلى دعم APK الدهون. هناك الكثير من الأدوات (التوزيع التجريبي وما إلى ذلك) التي لا تعمل حتى الآن مع حزم التطبيقات.

flutter build appbundle الآن في الماجستير ، فهل يريد أي شخص متطوع أن يجربه؟

لقد أجرينا بعض المناقشات لدعم قائمة الأنظمة الأساسية في build apk ، لذا يمكنك القيام بشيء مثل هذا: flutter build apk --target-platform android-arm,android-arm64

blasten لقد تحولت إلى القناة الرئيسية ، وقمت بالترقية وبناء مجموعة التطبيقات ، لقد عملت بشكل جيد. ثم قم بتحميله على وحدة التحكم في اللعب وذهبت جميع التحذيرات. (macOS 10.14.4)

مدهش! سأقوم بتجميع بنائي الليلة بعد إجراء التغييرات.

يبدو أن الحزمة لا تعمل مع ذلك ، حيث يتعطل التطبيق عند تنزيله.

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

يبدو أن com.mattetti.sounds.MainActivity ليس في الحزمة؟

لست متأكدًا من السبب ، كيف يمكنني التحقق من سبب إزالته؟

mattetti هل تستخدم وحدة Flutter ؟ هل يمتد MainActivity FlutterActivity ؟

تضمين التغريدة
ها هي تبعياتي

environment:
  sdk: ">=2.2.2 <3.0.0"

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

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

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

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

لكنني لاحظت أيضًا أنني قمت بإعادة تسمية حزمة تطبيقي ولكني لم أغير المسار إلى ملف MainActivity.java والذي لا يزال android/app/src/main/java/com/example/old_name/ الذي قد يكون هو المشكلة. غدًا ، سأحاول تغيير المسار ودفع حزمة أخرى.

مرحبًا blasten ، لقد حاولت إنشاء حزمة التطبيق وحصلت على هذا الخطأ

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

يستخدم مشروعي النكهة وهذا هو الأمر الذي أقوم بتشغيله

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

هل ستشمل حزمة التطبيق أيضًا mapping.txt؟ عند تحميل حزم التطبيقات إلى Google Play Console عبر Codemagic ، لا يوجد ملف mapping.txt مضمن ، لذلك لا يوجد اختبار آلي أو تقارير ما قبل الإطلاق - وهو ما لديك عند تحميل ملف apk :(

لذا فإن السؤال هو:

هل سيقوم فريق Flutter بإجراء تحديث للإصدار 64 بت أم لا قبل أغسطس حتى نتمكن من تحميل وتحديث تطبيقاتنا المصممة برفرفة أم لا؟

YazeedAlKhalaf نعم. يمكنك استخدام flutter build appbundle اليوم وستحصل على حزمة تطبيقات تحتوي على 32 بت و 64 بت.

mattetti هل تم حل المشكلة؟

يبدو nohli mapping.txt وكأنه طلب ميزة. لا تتردد في تقديم خطأ جديد.

skybur هل يمكنك تشغيل flutter doctor ؟ هل مشروع Flutter الخاص بك هو تطبيق أو وحدة نمطية؟

blasten مشروعي هو تطبيق.

ها هي نتيجة طبيب الرفرفة

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

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

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

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

[!] Connected device
    ! No devices available

! Doctor found issues in 1 category.

@ blasten : الحصول على نفس الخطأ مثل skybur

محاولة استخدام flutter build appbundle ثم تحميلها إلى المتجر ، ثم فتحها من هاتف Android:
تحطم فوري عند الافتتاح.

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

Kiruel ، ليس من الواضح جدًا بالنسبة لي سبب استمرار الناس في قول أن حزمة التطبيقات تحل هذه المشكلة.

حزمة التطبيقات ليست أكثر من ملف APK مقسم آليًا ، ولا يوجد تقسيم في مجلد الأصول. لذلك لا تزال اللقطات تستهدف بنية واحدة فقط.

ربما أفتقد شيئًا ما ولكن في رأيي ، فإن الحل الوحيد الآن هو إنشاء APK لكل معماريات مع تصفية ndk المقابلة في ملف gradle. ثم قم بتحميل كل ملف APK.

إذا لم نتمكن من حل هذه المشكلة باستخدام APK ، فلا توجد فرصة أن تعمل حزمة التطبيقات أيضًا.

ndusart لا أعتقد أن هذا صحيح. تقول مستندات حزمة التطبيق:

الدقة / ، lib / ، والأصول /: هذه الأدلة مماثلة لتلك الموجودة في ملف APK نموذجي. عند تحميل حزمة التطبيقات الخاصة بك ، يقوم Google Play بفحص هذه الأدلة وحزم الملفات التي تلبي تكوين الجهاز المستهدف فقط ، مع الاحتفاظ بمسارات الملفات.

لذلك يمكن تقسيم الأصول بطريقة أو بأخرى.

jereksel ، أخبر فقط أن هذه الأدلة تعمل تمامًا في حزمة التطبيقات بنفس الطريقة التي تعمل بها في apk وأن المجلد assets/ غير مقسم. يتم استخدامه لتخزين الأصول في بنية ملف محددة جدًا في التطبيق ، ولا يُقصد تحليلها بواسطة نظام التشغيل أو أي شيء آخر.

إذا كنت مخطئًا ، أخبرني فقط كيف يمكننا تقسيم هذا المجلد بناءً على هدف ABI.

وهذا الاقتباس يؤكد فقط ما أقوله ، إذا لم يكن ذلك ممكنًا الآن مع APK ، فلن يكون ذلك ممكنًا باستخدام حزمة التطبيقات لأن هذه المجلدات تعمل تمامًا بالطريقتين.

لم أر الأصول تنقسم بنفسي ، لكني وجدت هذا:

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

الأصول .pb - هذا هو المكافئ لجدول الموارد لأصول التطبيق ولن يكون موجودًا إلا إذا كنت تستخدم الأصول في التطبيق الخاص بك.

لذا أعتقد أن Android Studio لا يقسم الأصول ، لكن حزم التطبيقات نفسها تدعم ذلك.

هل لديك أي وثائق رسمية؟ كل هذا يبدو غير موثوق به للغاية.
تنص المقالة التالية ، https://medium.com/mindorks/android-app-bundle-aab-98de6dad8ba8 ، على أنه يمكننا إلحاق لاحقة باسم المجلدات في assets/ لتقسيمها ولكن حاليًا يمكن هذا فقط على اللغة.

ومع ذلك ، لا يبدو هذا مستقرًا بعد ولا ينبغي أن يستند إلى الآن. يجب ترحيل لقطات VM إما في المجلد lib/ إذا كان ذلك ممكنًا أو يجب أن يأتي الأمر flutter مع ميزة كاملة لإنشاء ملف APK لهدف معين (لا يزال هناك عمل يتعين القيام به على ذلك لتكون في متناول الكثير من الأشخاص) وتأخير إنتاج حزمة التطبيقات عندما تكون جاهزة لذلك.

تضمين التغريدة

لقد تحولت إلى القناة الرئيسية ، وقمت بالترقية وبناء مجموعة التطبيقات. للأسف التطبيق Chashes بعد تنزيله من متجر google play مع logcat التالي

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

flutter build appbundle الآن في الماجستير ، فهل يريد أي شخص متطوع أن يجربه؟

لقد أجرينا بعض المناقشات لدعم قائمة الأنظمة الأساسية في build apk ، لذلك يمكنك القيام بشيء مثل هذا: flutter build apk --target-platform android-arm,android-arm64

تضمين التغريدة

لقد تحولت إلى القناة الرئيسية ، وقمت بالترقية وبناء مجموعة التطبيقات. للأسف التطبيق Chashes بعد تنزيله من متجر google play مع logcat التالي

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

flutter build appbundle الآن في الماجستير ، فهل يريد أي شخص متطوع أن يجربه؟
لقد أجرينا بعض المناقشات لدعم قائمة الأنظمة الأساسية في build apk ، لذلك يمكنك القيام بشيء مثل هذا: flutter build apk --target-platform android-arm,android-arm64

لدي نفس المشكلة ، على الرغم من أنه ليس لدي أي سجلات حتى الآن.

skybur ، قد تكون المشكلة التي https://github.com/flutter/flutter/issues/33119. إذا كانت هذه هي الحالة ، يجب أن يصلح هذا التصحيح .

تضمين التغريدة
نعم انت محق. لقد تحققت من شفرة مصدر bundletool وتقسيم الأصول فقط حسب اللغة بالفعل:
https://github.com/google/bundletool/blob/master/src/main/java/com/android/tools/build/bundletool/splitters/ModuleSplitter.java#L286

كان هذا هو الحل:

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

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

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

            // Specifies that we do not want to also generate a universal APK that includes all ABIs.
            universalApk false
        }
    }
  1. تشغيل flutter build apk --release --target-platform=android-arm
  2. تحميل app-armeabi-v7a-release.apk إلى متجر play
  3. زيادة versionCode
  4. تشغيل flutter build apk --release --target-platform=android-arm64
  5. تحميل app-arm64-v8a-release.apk إلى متجر play

سيخدم متجر Google play التطبيق وفقًا لهندسة الجهاز. أجهزة 32 بت سعيدة ، وأجهزة 64 بت سعيدة وأنا سعيد بمعرفة أن حجم APK الخاص بي لا يزال صغيرًا نسبيًا بينما لا يزال يخدم كلا البنيتين.

إذا قمنا بتضمين الدعم لكل من البنيتين في نفس APK ، فتوقع أن يكون حجم التطبيق الخاص بك 10 ميجا بايت +

هناك شيء مهم لأخبركم به يا رفاق. إذا كنت تستخدم الطريقة التي أقتبسها. قد تحتاج إلى التعليق على الإعداد ، عندما تريد الاستمرار في تصحيح أخطاء تطبيقك. أواجه الخطأ فشل إنشاء Gradle في إنتاج حزمة Android ، gradlew clean ... إلخ ، وأخيراً اكتشفت أنه يجب التعليق على ذلك!

أتمنى أن يكون هذا قد ساعد شخص ما على القفز.

flutter build appbundle الآن في الماجستير ، فهل يريد أي شخص متطوع أن يجربه؟

لقد أجرينا بعض المناقشات لدعم قائمة الأنظمة الأساسية في build apk ، لذا يمكنك القيام بشيء مثل هذا: flutter build apk --target-platform android-arm,android-arm64

flutter build appbundle يعمل! لست بحاجة إلى إضافة هذا الإعداد ، فقط قم بالكود. ومع ذلك ، يستغرق الأمر بعض الوقت للتجميع ، ولكنها الطريقة الوحيدة لتمرير Google Play الآن.

Tokenyet هل تمكنت من تنزيل التطبيق من متجر Play وتشغيله بعد تحميل .aab ؟ إذا كانت هذه هي الحالة ، فهل تمانع في لصق ناتج flutter doctor ؟

تضمين التغريدة

لقد تحولت إلى القناة الرئيسية ، وقمت بالترقية وبناء مجموعة التطبيقات. للأسف التطبيق Chashes بعد تنزيله من متجر google play مع logcat التالي

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

flutter build appbundle الآن في الماجستير ، فهل يريد أي شخص متطوع أن يجربه؟
لقد أجرينا بعض المناقشات لدعم قائمة الأنظمة الأساسية في build apk ، لذلك يمكنك القيام بشيء مثل هذا: flutter build apk --target-platform android-arm,android-arm64

نفس الشيء تمامًا هنا ، عند محاولة تشغيل تطبيقي من متجر Play (تم إنشاؤه كحزمة تطبيقات). ما السجلات التي تحتاجونها يا رفاق لحل هذا؟

سيكون هذا مفيدًا:

  1. تنزيل bundletool من https://developer.android.com/studio/command-line/bundletool
  2. قم بتشغيل flutter build appbundle (الرجاء توضيح ما إذا كنت قد قمت بتمرير أي علامة أو إذا قمت بإجراء _custom_ التغييرات على أي برنامج نصي من Gradle)
  3. قم بتشغيل bundletool build-apks --bundle=build/app/outputs/bundle/release/app.aab --output=out.apks لاستخراج مجموعة APK.
  4. قم بتشغيل unzip -l out.apks وأخيرًا flutter doctor والصق الناتج من كلا الأمرين في تعليقك.

اذا كان ممكنا:

اختبر محليًا على الجهاز باستخدام bundletool ومجموعة APK. هذه هي الخطوات ، الصق logcat في تعليقك.

لا يمكنني إعادة إظهار المشكلة على الرغم من أنني اختبرت محليًا فقط باستخدام bundletool .

blasten لذا تم إصلاح الخطأ السابق لكنني واجهت خطأ آخر. أفترض أن هذا ناتج عن شيء ما في مشروعي. هل هناك أي طريقة يمكنني من خلالها تصحيح هذا؟

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

blasten أتبع جميع

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

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

! Doctor found issues in 1 category.

تضمين التغريدة
في الواقع يسمى هذا Assets Targeting ويسمح لك باستهداف / تقسيم الدلائل في الأصول بناءً على واجهة برمجة تطبيقات الرسومات ، وضغط اللغة والنسيج.
كما هو موضح هنا: ... / bundletool / model / calling / TargetedDirectorySegment.java

فيما يتعلق بـ AAB الحالي flutter@master يعمل بالنسبة لي محليًا - باستخدام bundletool للاختبار والتثبيت على جهاز حقيقي. لقد عطلت تقسيم الكثافة واللغة في build.gradle لذا فإن build-apks يعطيني هذا:

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

باختباره في Test Lab ، لدي أيضًا كل شيء أخضر.
ما زلت في انتظار Play Store لمعالجة هذا الإصدار لاختبار هذه القناة.

Tokenyet هل تمكنت من تنزيل التطبيق من متجر Play وتشغيله بعد تحميل .aab ؟ إذا كانت هذه هي الحالة ، فهل تمانع في لصق ناتج flutter doctor ؟

يمكنني تنزيل التطبيق من متجر Play وتشغيله. يمكنك [تجربتها] (https://play.google.com/store/apps/details؟id=com.bumbystudio.starry_clock). (تحرير: عفوًا ، إنها ليست wokring ... من PlayStore)

يوجد أدناه flutter doctor حسب حاجتك. أتمنى أن تكون قد ساعدت.

[√] Flutter (Channel master، v1.6.1-pre.88، في Microsoft Windows [الإصدار 10.0.17134.765] ، الإعدادات المحلية zh-TW)

[√] Android Toolchain - تطوير لأجهزة Android (إصدار Android SDK 28.0.3)
[√] Android Studio (الإصدار 3.3)
[√] كود VS ، إصدار 64 بت (الإصدار 1.30.2)
[!] جهاز متصل
! لا توجد أجهزة متاحة

هذا يفي بالغرض بالنسبة لي !

buildTypes {
إطلاق سراح {
// TODO: أضف تكوين التوقيع الخاص بك لبناء الإصدار.
// التوقيع باستخدام مفاتيح التصحيح في الوقت الحالي ، لذا يعمل flutter run --release .
التوقيع تكوين تكوينConfigs.debug
}
تصحيح {
ndk {
abiFilters "armeabi-v7a"
}
}
}

SPodjasek لا يزال ، نحتاج إلى تقسيم assets/ بناءً على ABI. كيف يمكن القيام بذلك حاليا؟

لقد قمت بتثبيته في جهازي ويبدو أنه لا يعمل. كل ما حصلت عليه هو ملف
شاشة سوداء.

شكرا،

Purusothaman رامانوجام

في الخميس ، 23 مايو ، 2019 ، 6:43 مساءً ، كتبت Tokenyet ، [email protected] :

Tokenyet https://github.com/Tokenyet هل تمكنت من تنزيل التطبيق
من متجر Play وتشغيله بعد تحميل ملف .aab؟ إذا كان هذا هو ملف
حالة ، هل تمانع في لصق إخراج طبيب الرفرفة؟

يمكنني تنزيل التطبيق من متجر Play وتشغيله. يمكنك أن تعطيه
محاولة
https://play.google.com/store/apps/details؟id=com.bumbystudio.starry_clock
.

يوجد أدناه طبيب الرفرفة الخاص بي حسب حاجتك. أتمنى أن تكون قد ساعدت.

[√] Flutter (Channel master، v1.6.1-pre.88، على Microsoft Windows [الإصدار
10.0.17134.765]، الإعدادات المحلية zh-TW)

[√] Android toolchain - تطوير لأجهزة Android (إصدار Android SDK
28.0.3)
[√] Android Studio (الإصدار 3.3)
[√] كود VS ، إصدار 64 بت (الإصدار 1.30.2)
[!] جهاز متصل
! لا توجد أجهزة متاحة

-
أنت تتلقى هذا لأنك مشترك في هذا الموضوع.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/flutter/flutter/issues/18494؟email_source=notifications&email_token=AAIHDZYY47H6PUQQJYEO4J3PW2J7RA5CNFSM4FFE2B7KYY3PNVWWK3TUL52HS4DFVREXG43VMV
أو كتم الخيط
https://github.com/notifications/unsubscribe-auth/AAIHDZZXV67JCNVJYLVA3WLPW2J7RANCNFSM4FFE2B7A
.

ndusart في هذه المرحلة ، من المستحيل - ربما أرسل طلب ميزة على

SPodjasek لذلك هذا ما أقوله ، كل هذه المشكلة تسير في الاتجاه الخطأ.

يبدو أن جميع المناقشات تنتهي بـ "حسنًا ، لا تقلق ، عندما يمكننا إنشاء حزم تطبيقات ، سيكون كل شيء على ما يرام" ولكن هذا ليس هو الحال تمامًا الآن وفي المستقبل القريب.
إنه لأمر مخيب للآمال بعض الشيء أن ترى فريق الرفرفة يترك الناس يعتقدون أنه من الممكن بهذه الطريقة.

يجب أن يكون flutter قادرًا على توفير طريقة لإنشاء ملف APK مقسم بسهولة إما عن طريق إجراء التقسيم نفسه أو إدارة نقل لقطات VM إلى المجلد lib/ وترك التقسيم يعمل فقط (يمكننا بعد ذلك استخدام حزم التطبيقات أيضًا )

دعونا نلخص:

  1. سوف يدعم Flutter ملفات APK ذات الوزن الزائد عبر flutter build apk ... .
  2. إذا كنت تريد تجربة هذه الميزة _ right now_ جرب flutter build appbundle في الفرع الرئيسي. إذا لم تعمل حزم التطبيقات مع حالة الاستخدام الخاصة بك ، فيجب أن تغطي (1) الحالات المتبقية.

حسنًا blasten لقد بحثت في الكود الرئيسي وتم نقل اللقطات إلى مجلد lib:
https://github.com/flutter/flutter/blob/dc28ba8919604ff19ea7cbad8d9400516347b08a/packages/flutter_tools/gradle/flutter.gradle#L470 -L481

لذلك لا يقتصر الأمر على إضافة دعم حزمة التطبيقات فقط. إنه أكثر وضوحا الآن.
كان من الممكن تقديم القليل من التفسير على الرغم من أنه تم ذكر أن المشكلة كانت في مجلد الأصول ولم يتم تقديم أي معلومات عن العمل في هذا الاتجاه نظرًا لأن هذه المشكلة ودعم حزمة التطبيق مستقلان تمامًا.

شكرا لعملكم.

ndusart - قام blasten بإجراء تغييرات على تضمين Android بحيث يبحث الآن عن النقاط الثنائية في المجلد lib حتى تتمكن من التجميع في كلا النوعين إذا لم أكن مخطئًا ...

إذا تم نقل اللقطات إلى lib ، فربما يتم إصلاح # 30846 أيضًا؟

تضمين التغريدة
لقد تحولت إلى القناة الرئيسية ، وقمت بالترقية وبناء مجموعة التطبيقات. للأسف التطبيق Chashes بعد تنزيله من متجر google play مع logcat التالي

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

flutter build appbundle الآن في الماجستير ، فهل يريد أي شخص متطوع أن يجربه؟
لقد أجرينا بعض المناقشات لدعم قائمة الأنظمة الأساسية في build apk ، لذلك يمكنك القيام بشيء مثل هذا: flutter build apk --target-platform android-arm,android-arm64

لدي نفس المشكلة ، على الرغم من أنه ليس لدي أي سجلات حتى الآن.

كذلك هنا. كان لديه خطأ. ترقية الماجستير وتشغيل flutter build appbundle . تخلص من الخطأ ولكن التطبيق يتعطل عند فتحه.

حاولت تحميل حزمة التطبيقات باستخدام أحدث إصدار رئيسي من flutter إلى متجر التطبيقات مع أحدث التغييرات. ذهب الخطأ 64 بت الآن ، لكن تطبيقي يتعطل على الفور.

الغريب حقًا هو تشغيل الإصدار 64 بت باستخدام الأوامر أدناه يعمل بشكل جيد.
flutter build apk - android-arm64
رفرفة تثبيت API

إنه يتعطل فقط عند تثبيت التطبيق من خلال حزمة التطبيقات في متجر التطبيقات. في الوقت الحالي ، قمت بإعادة متجر التطبيقات إلى الإصدار 32 بت apk.

ليس لدي أي شيء مميز في مبنى gradle.build الخاص بي

الإصدار 21
الإصدار 28
versionCode flutterVersionCode.toInteger ()
versionName flutterVersionName
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
multiDexEnabled صحيحًا

أنا أقوم بتشغيل Flutter (Channel master، v1.6.4-pre.13، على نظام التشغيل Mac OS X 10.14.5 18F132، locale en-US)

هل هناك أي طريقة لاختبار هذه الحزم قبل تحميلها على متجر التطبيقات؟ هل هذه مشكلة معروفة تعمل Google عليها أم أحتاج إلى إجراء بعض التغييرات على ملف gradle الخاص بي؟

chitwoob برجاء اتباع الخطوات: https://github.com/flutter/flutter/issues/18494#issuecomment -495049530

blasten أواجه مشكلة في أداة الحزمة لا علاقة لها بهذه المشكلة.

انا حصلت
خطأ: فشل بدء تشغيل خادم ADB

عند الجري
build-apks --connected-device --bundle =. / app.aab --output =. / my_app.apks --adb

لدي adb مثبتة بشكل صحيح. عندما أحاول adb logcat فإنه يعمل بشكل جيد.

سيكون تعليقًا طويلاً ، لكن هذا أدى إلى حل المشكلة تمامًا

كان هذا هو الحل:

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

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

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

            // Specifies that we do not want to also generate a universal APK that includes all ABIs.
            universalApk false
        }
    }
  1. تشغيل flutter build apk --release --target-platform=android-arm
  2. تحميل app-armeabi-v7a-release.apk إلى متجر play
  3. زيادة versionCode
  4. تشغيل flutter build apk --release --target-platform=android-arm64
  5. تحميل app-arm64-v8a-release.apk إلى متجر play

سيخدم متجر Google play التطبيق وفقًا لهندسة الجهاز. أجهزة 32 بت سعيدة ، وأجهزة 64 بت سعيدة وأنا سعيد بمعرفة أن حجم APK الخاص بي لا يزال صغيرًا نسبيًا بينما لا يزال يخدم كلا البنيتين.

إذا قمنا بتضمين الدعم لكل من البنيتين في نفس APK ، فتوقع أن يكون حجم التطبيق الخاص بك 10 ميجا بايت +

باتباع هذه الخطوات كان إعطاء "Gradle build فشل في إنتاج حزمة Android." خطأ
_ بعد ساعة من التصحيح اكتشف الإصلاح. _

لإنشاء تطبيقات مختلفة لـ x86 و x64 ، اتبع الخطوات التالية:

الخطوة 1: ضمِّن مقتطف الشفرة في ملف app/build.gradle . سيبدو الملف بالشكل:

....
    lintOptions {
        disable 'InvalidPackage'
    }

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

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

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

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

    defaultConfig {
....

الخطوة 2: أنشئ إصدار apk باستخدام flutter build apk --release
سيؤدي هذا إلى إنشاء ملف apk مستند إلى x86 في المجلد build/app/outputs/apk/app.apk
قم بتحميل ملف apk هذا إلى متجر google play.
x86 تم إنجازه حتى الآن

في هذه المرحلة ، لا تقم بتشغيل flutter clean
كنت أفعل ذلك وأتلقى أخطاء عند إنشاء x64 apk

الخطوة 3: الآن افتح pubspec.yaml وقم بتغيير version من
version: 1.0.0+1 إلى version: 1.0.0+2

الرقم الموجود بجانب + هو رمز الإصدار

الخطوة 4: الآن قم بتشغيل الأمر
flutter build apk --release --target-platform=android-arm64

بعد اكتمال هذا الأمر ، انتقل إلى build/app/outputs/apk/release/ . هناك ستجد ملف apk باسم app-arm64-v8a-release.apk . هذا هو ملف apk 64 بت الخاص بك برمز إصدار مختلف.

الآن قم بتحميل ملف apk x64 هذا لتشغيل المتجر .... وها أنت ذا. لقد قمت بتحميل كل من تطبيقات x86 و x64 لتشغيل المتجر.

سيكون تعليقًا طويلاً ، لكن هذا أدى إلى حل المشكلة تمامًا

[...]
لإنشاء تطبيقات مختلفة لـ x86 و x64 ، اتبع الخطوات التالية:

الخطوة 1: ضمِّن مقتطف الشفرة في ملف app/build.gradle . سيبدو الملف بالشكل:

....
    lintOptions {
        disable 'InvalidPackage'
    }

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

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

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

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

    defaultConfig {
....

الخطوة 2: أنشئ إصدار apk باستخدام flutter build apk --release
[...]

أتفق مع إجابتك. يعمل بالنسبة لي ، على الرغم من أنني لم أضطر إلى اتباع الخطوة 1 (استخدمت build.gradle افتراضيًا)

بعد ذلك ، تحتاج فقط إلى زيادة رقم الإصدار والإصدار حتى يقبله Google Play.

ما زلت أواجه مشكلات مع flutter build appbundle في يدي.

سيكون تعليقًا طويلاً ، لكن هذا أدى إلى حل المشكلة تمامًا

[...]
لإنشاء تطبيقات مختلفة لـ x86 و x64 ، اتبع الخطوات التالية:
الخطوة 1: ضمِّن مقتطف الشفرة في ملف app/build.gradle . سيبدو الملف بالشكل:

....
    lintOptions {
        disable 'InvalidPackage'
    }

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

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

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

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

    defaultConfig {
....

الخطوة 2: أنشئ إصدار apk باستخدام flutter build apk --release
[...]

أتفق مع إجابتك. يعمل بالنسبة لي ، على الرغم من أنني لم أضطر إلى اتباع الخطوة 1 (استخدمت build.gradle افتراضيًا)

بعد ذلك ، تحتاج فقط إلى زيادة رقم الإصدار والإصدار حتى يقبله Google Play.

ما زلت أواجه مشكلات مع flutter build appbundle في يدي.

لا يعمل. أنا منزعج جدا. تعطل التطبيق عند محاولة النشر على محاكي x86 وكذلك على جهاز ذراع حقيقي. حاولت مع قناة رئيسية / بيتا / مستقرة. لا يوجد إصدار جاهز. لا يزال يظهر سدادة بالنسبة لنا. ينشئ الأمر Appbundle حزمة قابلة للتثبيت للتشغيل ولكن أثناء وقت التشغيل يظهر التطبيق شاشة البداية ثم يتجمد. يرجى من فريق Flutter تقديم حل واضح أو WA.

mormih شكرًا على

  • النظام الأساسي المضيف الذي تستخدمه للبناء.
  • الأمر الذي تستخدمه لإنشاء التطبيق.
  • قم بتشغيل أمر الإنشاء باستخدام --bug-report (على سبيل المثال ، flutter build appbundle --bug-report ) وإرفاق الملف bugreport.zip المرتبط
  • قم بإرفاق حزمة التطبيق التي تم إنشاؤها حتى نتمكن من محاولة تشغيلها على الأجهزة المحلية
  • أرفق نتائج adb bugreport بعد محاولة تشغيل التطبيق

شكرا!

tvolkert لدي أيضًا مشكلة حيث

فشل التحقق: vm. يجب أن تكون قادرًا على تهيئة الجهاز الظاهري.

النظام الأساسي المضيف الخاص بي هو mac و macOS 10.14.5. هل كنت قادرًا على إعادة إنتاجه ، أم تريد مني اتباع الخطوات التي كتبتها أعلاه؟ أيضًا ، ربما يجب أن يكون لهذا تذكرة مخصصة لأنها مشكلة منفصلة عن OP واحد .. تحياتي

mormih لست متأكدًا ولكن هل حاولت تضمين x86 أيضًا في قائمة abi؟

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

flutter build appbundle (على المستوى الرئيسي) لم يعمل معي أيضًا ، توقف شاشة البداية تمامًا كما لاحظ الآخرون ...

الحل الوحيد الذي وجدته للإفراج (في متجر Play) لكل من 32 و 64 بت حتى الآن هو التالي. (مغطاة جزئيًا في الخيط ولكنها قد تساعد شخصًا ما):

  1. قم بإنشاء ملف apk باستخدام عامل التصفية v7 + الأمر الافتراضي build apk:
    في تطبيقك / ملف build.gradle:
    defaultConfig { ... ndk{ abiFilters "armeabi-v7a" } }
    ثم ركض
    flutter build apk
    (الافتراضيات إلى - إطلاق)

  2. ضع رقم البناء الخاص بك في pubspec.yaml.
    على سبيل المثال ، من version: 1.1.0+6 إلى version: 1.1.0+7

  3. أنشئ ملف apk باستخدام مرشح v8 + أنشئ باستخدام arm64 كنظام أساسي مستهدف:
    الآن قم بتحديث build.gradle مثل:
    defaultConfig { ... ndk{ abiFilters "arm64-v8a" } }
    ثم ركض
    flutter build apk --release --target-platform android-arm64

يتضمن النفقات العامة لضرورة تحميل تطبيقين (وبالتالي إنشاء رقمين للبناء) ولكن على الأقل يبدو أنه يقوم بالمهمة ويمكنني إصداره لكل من الأجهزة 32 و 64 بت ...

ملاحظة: لقد تركت x86 لأن ذلك لا يتضمن سوى مجموعة صغيرة جدًا من الأجهزة المحمولة (وربما لا أحد من المستخدمين لدي) ، بالإضافة إلى أنني لست بحاجة إلى إصدار إصدار في المحاكي (التصحيح كافٍ للاختبار). لكن هذا بالطبع قد لا يكون هو الحال بالنسبة للآخرين.

طريقة ezmegy هي الوحيدة التي عملت معي. شكرا

في مكان ما في التعليقات ترك شخص ما هذا.

image

لقد كان هذا يعمل بالنسبة لي ورمزه الطرفي الوحيد.
إنه ينتج ملفين أكرههما على الرغم من أنه ينشئ نسختين.

ezmegy شكرا لك! أنت تحفظ يومي

شكرا ezmegy ، "

شكرا ezmegy !
أرغب في مشاركة سير العمل الحالي الخاص بي والذي قد يكون مفيدًا:


قم بإنشاء بعض نكهات البناء على app/build.gradle لكل هندسة

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

ثم يمكنني بناء كليهما باستخدام:
flutter build apk --flavor arm32
و
flutter build apk --flavor arm64 --target-platform android-arm64
دون تعديل تدرج في كل بناء


فيما يتعلق برمز الإصدار ، أفضل تعيين واحد افتراضيًا واشتقاق الرموز الأخرى منه
على سبيل المثال ، قم بتعيين arm32 مع 1.0.0 + 10000 وقم بإنشاء رمز إصدار لـ arm64 وهو 1.0.0 + 10001
يجب أن يكون إنشاء هذا سهلًا باستخدام bash (أو داخل fastfile إذا كنت تستخدم fastlane)

يمكنك تعيين رقم الإصدار باستخدام وسيطات --build-number أو عبر fastlane إذا كنت تستخدم واحدًا

هذا الإصدار من البرمجة النصية يساعدني في CI / CD

CMIIW

بالنسبة لي هذا عمل بشكل جيد
https://github.com/flutter/flutter/issues/10728#issuecomment -461375218

سيكون تعليقًا طويلاً ، لكن هذا أدى إلى حل المشكلة تمامًا

كان هذا هو الحل:

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

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

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

            // Specifies that we do not want to also generate a universal APK that includes all ABIs.
            universalApk false
        }
    }
  1. تشغيل flutter build apk --release --target-platform=android-arm
  2. تحميل app-armeabi-v7a-release.apk إلى متجر play
  3. زيادة versionCode
  4. تشغيل flutter build apk --release --target-platform=android-arm64
  5. تحميل app-arm64-v8a-release.apk إلى متجر play

سيخدم متجر Google play التطبيق وفقًا لهندسة الجهاز. أجهزة 32 بت سعيدة ، وأجهزة 64 بت سعيدة وأنا سعيد بمعرفة أن حجم APK الخاص بي لا يزال صغيرًا نسبيًا بينما لا يزال يخدم كلا البنيتين.
إذا قمنا بتضمين الدعم لكل من البنيتين في نفس APK ، فتوقع أن يكون حجم التطبيق الخاص بك 10 ميجا بايت +

باتباع هذه الخطوات كان إعطاء "Gradle build فشل في إنتاج حزمة Android." خطأ
_ بعد ساعة من التصحيح اكتشف الإصلاح. _

لإنشاء تطبيقات مختلفة لـ x86 و x64 ، اتبع الخطوات التالية:

الخطوة 1: ضمِّن مقتطف الشفرة في ملف app/build.gradle . سيبدو الملف بالشكل:

....
    lintOptions {
        disable 'InvalidPackage'
    }

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

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

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

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

    defaultConfig {
....

الخطوة 2: أنشئ إصدار apk باستخدام flutter build apk --release
سيؤدي هذا إلى إنشاء ملف apk مستند إلى x86 في المجلد build/app/outputs/apk/app.apk
قم بتحميل ملف apk هذا إلى متجر google play.
x86 تم إنجازه حتى الآن

في هذه المرحلة ، لا تقم بتشغيل flutter clean
كنت أفعل ذلك وأتلقى أخطاء عند إنشاء x64 apk

الخطوة 3: الآن افتح pubspec.yaml وقم بتغيير version من
version: 1.0.0+1 إلى version: 1.0.0+2

الرقم الموجود بجانب + هو رمز الإصدار

الخطوة 4: الآن قم بتشغيل الأمر
flutter build apk --release --target-platform=android-arm64

بعد اكتمال هذا الأمر ، انتقل إلى build/app/outputs/apk/release/ . هناك ستجد ملف apk باسم app-arm64-v8a-release.apk . هذا هو ملف apk 64 بت الخاص بك برمز إصدار مختلف.

الآن قم بتحميل ملف apk x64 هذا لتشغيل المتجر .... وها أنت ذا. لقد قمت بتحميل كل من تطبيقات x86 و x64 لتشغيل المتجر.

إنه يعمل بالنسبة لي أيضًا بدون الخطوة 1. شكرًا للجميع. لقد استخدمت مرشحات ndk {
abiFilters "armeabi-v7a" ، "x86"
}
في بناء ملف gradle. لا أعلم أنه مطلوب أم لا. بخلاف ذلك ، فقد اتبعت جميع الخطوات من الخطوة 2 وقمت بتحميل ملفي apk ، أحدهما 32 بت والآخر لـ 64 بت.

في وقت سابق كنت قد قمت بتحميل appbundle ، هذه المرة قمت بتحميل ملفات apk. تعمل بشكل جيد. يجب أن أتحقق من appbundle وأحاول أيضًا الإصلاح دون تحميل ملفي apk.

ملحوظة :
قبل القيام بهذه العملية ، تعطل تطبيقي في أجهزة arm-64 بت التالية
Redmi MI ،
هاتف Redmi 3S Prime
شرف 8x

عملت في الأجهزة التالية arm-64 بت
سامسونج جالكسي J4
سامسونج On8

مرحبًا فريق Flutter ،

الرجاء. ضع في اعتبارك أيضًا أسواق التطبيقات الأخرى مثل تلك الموجودة في الصين. في الصين ، لا يُسمح لنا باستخدام متجر Google Play ، بدلاً من ذلك ، لدينا العديد من أسواق التطبيقات مثل XiaoMi's و HuaWei's و Ali's ... إلخ.

في أسواق التطبيقات هذه ، لا يُسمح لنا بتقديم إصدارات apk في بنيات مختلفة ، ولا يمكننا سوى تحميل واحد فقط واحد فقط لكل إصدار ، وسيتجاوز هذا الإصدار ملف apk للإصدار السابق. مما يعني أن الحل الحالي هو استخدام "armeabi-v7a".

صححني إذا كنت مخطئًا ، باستخدام "armeabi-v7a" ، ستعمل جميع الأجهزة ذات 64 بت 32 بت libflutter.so ، وأعتقد أنه سيكون أبطأ.

لذا أود أن أقترح ما إذا كان بإمكان فريق flutter توفير طريقة تتيح لنا إنشاء ملف apk يتضمن كلاً من libflutter 32 بت و 64 بت ، على الرغم من أن حجم ملف apk سيكون أكبر. (في الصين ، عادة ما تكون لدينا سرعة إنترنت عالية جدًا ولا ندفع سوى القليل مقابل الحصول على خطط استخدام لا نهائية لشبكة 4G ، ولا يهتم الأشخاص عادةً بحجم ملف apk)

مرحبًا فريق Flutter ،

الرجاء. ضع في اعتبارك أيضًا أسواق التطبيقات الأخرى مثل تلك الموجودة في الصين. في الصين ، لا يُسمح لنا باستخدام متجر Google Play ، بدلاً من ذلك ، لدينا العديد من أسواق التطبيقات مثل XiaoMi's و HuaWei's و Ali's ... إلخ.

في أسواق التطبيقات هذه ، لا يُسمح لنا بتقديم إصدارات apk في بنيات مختلفة ، ولا يمكننا سوى تحميل واحد فقط واحد فقط لكل إصدار ، وسيتجاوز هذا الإصدار ملف apk للإصدار السابق. مما يعني أن الحل الحالي هو استخدام "armeabi-v7a".

صححني إذا كنت مخطئًا ، باستخدام "armeabi-v7a" ، ستعمل جميع الأجهزة ذات 64 بت 32 بت libflutter.so ، وأعتقد أنه سيكون أبطأ.

لذا أود أن أقترح ما إذا كان بإمكان فريق flutter توفير طريقة تتيح لنا إنشاء ملف apk يتضمن كلاً من libflutter 32 بت و 64 بت ، على الرغم من أن حجم ملف apk سيكون أكبر. (في الصين ، عادة ما تكون لدينا سرعة إنترنت عالية جدًا ولا ندفع سوى القليل مقابل الحصول على خطط استخدام لا نهائية لشبكة 4G ، ولا يهتم الأشخاص عادةً بحجم ملف apk)

في حالتك ، يمكنك توفير معيار 32 بت وسيكون كل شيء على ما يرام ، أليس كذلك؟
تحذير 64 بت مخصص فقط لـ Google Play. أعتقد أن هذه ليست قضية للصين.
(يرجى تصحيح لي إذا كنت مخطئا.)

@ KunalT6569 أعتقد أن الخطوة 3 كما ذكرت من قبلك:

الخطوة 3: افتح الآن pubspec.yaml وقم بتغيير الإصدار من
الإصدار: 1.0.0 + 1 للإصدار: 1.0.0 + 2

مطلوب للسماح بتحميل كلا ملفي apk إلى وحدة تحكم google play ، أليس كذلك؟

لدي سؤال آخر - بمجرد أن يصبح كلا ملفي apk جاهزين ، يمكنك ببساطة تحميلهما عبر قسم App releases\New Release\Browse Files ، أليس كذلك؟

@ angel1st نعم ، الخطوة 3 مطلوبة لأن Google play لن يسمح بتحميل ملفين لهما نفس رموز الإصدار.

لتحميل عدة تطبيقات على google play ، أشرت إلى هذا الفيديو.
https://www.youtube.com/watch؟v=rMl_oLlf_g0

لمعلوماتك:

تتمثل خطتنا الحالية في إطلاق إصدار تجريبي باستخدام أحد إصدارات المطورين الحديثة في العشرة أيام القادمة أو نحو ذلك. بعد ذلك ، خطتنا هي الانتظار حتى يكون لدينا عملية موثقة محدثة لكيفية الشحن على Android والتي لا تؤدي إلى تحذيرات حول إصدارات 64 بت من متجر Play ، للحصول على طريقة لحزم APK يدعم 64 بت ، ولإثبات ذلك. يمكننا إطلاق المعرض باستخدام هذه العملية ، وبمجرد أن نقوم بذلك ، لمتابعة العملية لإصدار إصدار تجريبي جديد ، سنقوم بعد ذلك بدفعه إلى الاستقرار بعد أسبوع أو نحو ذلك.

هذا يعني أنه من المحتمل أن يكون لدينا إصدار تجريبي في أوائل يونيو ، ونسخة تجريبية في أواخر يونيو أو أوائل يوليو والتي ستستقر بعد ذلك بوقت قصير.

Hixie هناك مشكلة أخرى نشأت هنا
حزمة التطبيقات بواسطة أحدث flutter (رئيسي حتى الآن) لا تنشئ إصدارات x86 و x86_64
الملفات التي أنتجها الفرع الرئيسي
WinRAR_2019-05-30_02-55-34

الملفات التي تم إنشاؤها بواسطة الإصدار القديم باستخدام android studio
WinRAR_2019-05-30_03-03-15

السلوك المتوقع هو تضمين إصدارات x86 و x86_64 أيضًا في ملف تم إنتاجه بواسطة الإصدار الجديد

canewsin بصرف النظر عن هذه المشكلة ، لا نقدم ثنائيات إصدار x86 (https://github.com/flutter/flutter/issues/9253) - هو "الإصدار القديم" في https://github.com/flutter/ flutter / issues / 18494 # issuecomment -497118805 تشير إلى بناء تصحيح؟

لدي نفس المشكلة ، فالبناء لـ 32 بت سيستبعد أجهزة 64 بت ، إلا أنه يعمل عليها. يعمل البناء لـ 64 من خلال تحديد --target-platform android-arm64 على أجهزة 64 بت ، لكنه يتعطل على أجهزة 32 بت. كما ستعمل Google أيضًا على تقييد تحميل التطبيقات إلى 64 بت في عام 2019.

فريق Flutter ، يرجى حل هذه المشكلة الأساسية!

التكوين الافتراضي {
....
versionName flutterVersionName
ndk.abiFilters 'armeabi-v7a'، 'arm64-v8a'، 'x86'، 'x86_64'
}
// جاهز!

قمت بتجميع تطبيقي باستخدام أحدث فرع رئيسي للفلتر وتحميله لتشغيل المتجر كحزمة تطبيقات ولكن التطبيق يتعطل على الجهاز ، تم أخذ هذا السجل من معمل الاختبار

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

دكتور رفرفة -v

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


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

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

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

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

• No issues found!

canewsin يبدو أنه تم إصلاح هذه المشكلة في https://github.com/flutter/engine/pull/9078. في شجرة Flutter ، قم بتحديث الفرع الرئيسي المحلي ، git fetch upstream && git merge upstream/master

بعد رؤية الأسئلة المتكررة ، والتي تمت الإجابة عليها بالفعل في التعليقات السابقة ، كتبت مقالًا قصيرًا يوثق الخيارات المتاحة لدينا الآن https://medium.com/@truongsinh/flutter -android-64-bit-so-what-the-fuss -15da6f8e3a46. هنا TLDR:
1_Awm6pB8jR3wGdHMC4DsatQ

truongsinh ، نحن أيضًا بصدد إنهاء الدعم لاستخدام flutter build appbundle لإنشاء حزمة تطبيقات تحتوي على ثنائيات 32 بت و 64 بت للنشر في متجر Play. راجع https://github.com/flutter/flutter/issues/31922 لمزيد من المعلومات - يرجى تجربتها وإعلامنا إذا واجهت أي مشاكل.

truongsinh ، نحن أيضًا بصدد إنهاء الدعم لاستخدام flutter build appbundle لإنشاء حزمة تطبيقات تحتوي على ثنائيات 32 بت و 64 بت للنشر في متجر Play. راجع # 31922 لمزيد من المعلومات - يرجى تجربتها وإعلامنا إذا واجهت أي مشاكل.

نعم ما زلت أنتظر flutter build appbundle لإنتاج تطبيق لا يتوقف عن العمل أو يتعطل: D

نعم ، ما زلت أنتظر حزمة flutter build appbundle لإنتاج تطبيق لا يتوقف عن العمل أو يتعطل: D.

أقر 🙂. إذا كان لديك حالة قابلة للتكرار من هذا الحدوث يمكننا إلقاء نظرة عليها ، فسيكون ذلك رائعًا. إذا كنت على استعداد لإنشاء ملف .aab غير موقع من الإصدار 1.7.1 وإرساله إلي عبر البريد الإلكتروني ([email protected]) ، فسأكون ممتنًا!

لمعلوماتك ، تم إرسال الإعلان التالي إلى [email protected] بخصوص دعم 64 بت.

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

أواجه هذه المشكلة أيضًا.

عندما أقوم بإنشاء حزمة تطبيقات في Android Studios ، يمكنني تحميلها بشكل جيد على جهاز المحاكاة الخاص بي ، ولكنها تعطل التطبيق عندما أقوم بتنزيله من متجر play

مرحبًا يا رفاق الأشخاص الذين يستخدمون الفرع الرئيسي للرفرفة وبناء حزم التطبيقات
إذا كنت تقوم بتصحيح أخطاء تطبيقك ، فإن تطبيقك يعمل بشكل جيد
بعض تعطل الوجه عند التنزيل من متجر play إذا حدث ذلك ، فتحقق من حزمة التطبيق الخاصة بك سواء كانت تعمل على جهازك لأن وضع التصحيح ينتج ثنائيات JIT ووضع الإصدار ينتج ثنائيات AOT حاليًا تختلف مواضعها أيضًا على ما أعتقد لاختبار تطبيقك بشكل صحيح
قم بإنتاج apk من حزمة التطبيقات لتكوين محدد فقط استنادًا إلى جهازك وإلغاء تثبيت تطبيق التصحيح تمامًا من جهازك وتثبيت تطبيق الإخراج الجديد هذا من حزمة التطبيقات إذا تعطلت ، فسوف يتعطل عند تنزيله من متجر play أو غير ذلك ، آمل أن يساعد ذلك الآخرين. .

المرجع للإخراج إلى APK من حزمة التطبيقات الخاصة بك من خط cmd
https://developer.android.com/studio/command-line/bundletool

لمعلوماتك ، يتم تتبع الأعطال في حزم التطبيقات بشكل أفضل في https://github.com/flutter/flutter/issues/31922. ومع ذلك ، يتم النشر المشترك هنا:

أهلا بكم،

TLDR:

لقد حددنا مشكلة الأعطال عند التنزيل من متجر Play ونعمل على إصلاح يتم تسليمه في نفس الإطار الزمني كما هو موضح أعلاه في https://github.com/flutter/flutter/issues/31922#issuecomment -498880614

شرح عالي المستوى

بالنسبة للمهتمين ، فإن الشرح الطويل إلى حد ما هو أنه مع الأجهزة التي تعمل بنظام Android Marshmallow أو أحدث ، سيكتشف متجر Play التطبيقات التي تم تجميعها كحزم تطبيقات تحتوي على العديد من ABIs - وسيقوم بتثبيت هذه التطبيقات على الجهاز في شكل "تقسيم APKs ". عند القيام بذلك ، لا يتم استخراج ملفات .so المضمنة فيه من أرشيف APK zip ، والذي يختلف عن سلوك ملفات APK غير المقسمة. نظرًا لأن الآلية الحالية لمحرك Flutter

الحل هو فقط dlopen المكتبات ، ومستخلصات Android بعيدًا حيث توجد المكتبات (أي داخل أرشيف أم لا). ومع ذلك ، فإن الملفات الضرورية. لذلك كجزء من هذا ، نصنعها مكتبات ELF (على سبيل المثال https://github.com/dart-lang/sdk/commit/6d608fb52bc1926a73d986d73ab228b77cfb7ca2 و https://github.com/flutter/flutter/pull/33696).

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

لقد تلقيت هذا الخطأ بعد إضافة مقتطف الشفرة إلى build.gradle
Gradle build failed to produce an Android package.

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

لقد تلقيت هذا الخطأ بعد إضافة مقتطف الشفرة إلى build.gradle
Gradle build failed to produce an Android package.

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

هل يمكن لشخص ما حل المشكلة؟ لدي تطبيق على flutter يعمل فقط على apk 32 بت ولكن الإصدار 64 لا يعمل أو لا يتم تثبيته. أنا أختبر على هاتف خلوي 64 بت

CgarciaTC يرجى الاطلاع على https://github.com/flutter/flutter/issues/18494#issuecomment -500101807 للحصول على آخر تحديث

أهلا بكم،

نعتقد أن جميع الإصلاحات قد وصلت إلى طرف الشجرة على القناة master . إذا كنت ترغب في تجربتها ، فإليك الطريقة:

  • flutter build appbundle

    بشكل افتراضي ، تحتوي حزمة التطبيقات على كود Dart الخاص بك ووقت تشغيل Flutter الذي تم تجميعه لـ arm64-v8a (64 بت)

  • flutter build apk --split-per-abi

    سينتج عن هذا الأمر ملفي APK:

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

  • flutter build apk

    سينتج عن ذلك ملف APK سمين يحتوي على التعليمات البرمجية الخاصة بك التي تم تجميعها لجميع ABIs المستهدفة. ستكون ملفات APK أكبر حجمًا من مثيلاتها المنقسمة ، مما يتسبب في قيام المستخدم بتنزيل ثنائيات أصلية لا تنطبق على بنية أجهزته.

flutter build apk - تقسيم لكل أبي
سينتج عن هذا الأمر ملفي APK:
build / app / outputs / apk / release / app-armeabi-v7a-release.apk
build / app / outputs / apk / release / app-arm64-v8a-release.apk

tvolkert - في هذا السيناريو بالذات ، ماذا عن كل رقم إصدار إصدار؟ طالما علمت ، يجب أن يختلفوا ، حتى نتمكن من تحميلهما على Google Play. هل يتم إدارة هذا الجزء بطريقة ما ، عندما يتم إنشاء التطبيقات؟ إذا لم يكن كذلك ، فكيف يفترض أن يتم التعامل معها؟

@ angel1st تتم إدارته تلقائيًا عند إنشاء ملفات APK ، وفقًا للإرشادات الواردة في https://developer.android.com/studio/build/configure-apk-splits#configure -APK-version

tvolkert هل هناك أي معلومات حول متى

ndusart ، نعم - راجع https://github.com/flutter/flutter/issues/18494#issuecomment -498880287

يمكن تأكيد أن هذا يعمل (بعد التبديل إلى الماجستير) على أجهزة android متعددة. يا له من منقذ ، شكرا لك.

tvolkert شكرا أكوام. أي جدول زمني للحصول على هذا في Flutter مستقرة؟

@ harsha973 ، أنت مشاركتين فوق منشوراتك . ليس فقط جاهل ولكن على وشك عدم الاحترام.

PerLycke آسف لذلك.

لقد تحققت من القناة الرئيسية وقمت بترقية الرفرفة والآن لا يمكنني إنشاء التطبيق باستخدام الأمر:
flutter build apk --release --flavor production -t lib/main.dart
النتيجه هي:

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

إجابات مشكلات StackOverflow المماثلة لا تساعد حقًا.

عملت MichaelRFairhurst flutter build apk --release جيدًا بالنسبة لي ، لذلك ربما تتطلب التحديثات الجديدة على Master أيضًا تحديثًا لإعدادات النكهة الخاصة بك.

أعلم أنه ليس إجابة ، آسف ، ولكن على الأقل نقطة في الاتجاه الصحيح.

متى سيصبح الإصلاح تجريبيًا؟

derolf يرجى الاطلاع على https://github.com/flutter/flutter/issues/18494#issuecomment -498880287 كأحدث تحديث مع الجداول الزمنية المستهدفة.

أهلا بكم،

يتم نشر هذه الإصلاحات الآن في قناة dev ، في الإصدار v1.7.4 أو إصدار لاحق.

أثناء محاولة اكتشاف هذه الأشياء ذات 64 بت ، أواجه نفس المشكلة مثل michalsuryntequiqo ولا يمكنني إنشاء أي شيء الآن عبر CLI. إنه يبني ويعمل بشكل جيد من خلال Android Studio ...
تشغيل flutter build apk --flavor=dev -t lib/main-dev.dart

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

طبيب

تعديل:
جربت للتو مع الالتزام مباشرة قبل 8627ff433b4658195e66b9c0034902116f53d580 وينتج ملف apk مع الخطأ المعتاد Gradle build failed to produce an Android package. بسبب https://github.com/flutter/flutter/issues/24106

blasten هل لديك أي فكرة عن كيفية تشغيل هذا مرة أخرى مع تغييراتك؟

تحرير 2:
تم فتح إصدار جديد لهذا: https://github.com/flutter/flutter/issues/34598

قرأت وثائق Flutter اليوم ووجدت:

من سطر الأوامر:

أدخل القرص المضغوط
(يحل محلمع دليل التطبيق الخاص بك.)
Run flutter build apk - تقسيم لكل أبي
(الإعداد الافتراضي لأمر flutter build - إطلاق.)
ينتج عن هذا الأمر ملفي APK:

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

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

@ eugenio-tesio ما هي أكواد الإصدار المستخدمة عند استخدام --split-per-abi ؟

رأيته في الوثائق وفكرت في نشره هنا. لم أختبره.
كنت أقوم بتشغيل الأمر ولم يعمل. انها تقول:

تعذر العثور على خيار يسمى "تقسيم لكل أبي".

قم بتشغيل "flutter -h" (أو "flutter-h ') لأوامر وخيارات الرفرفة المتاحة.

طبيب الرفرفة:

Flutter 1.6.3 • قناة تجريبية • https://github.com/flutter/flutter.git
الإطار • المراجعة bc7bc94083 (منذ 4 أسابيع) • 2019-05-23 10:29:07 -0700
المحرك • مراجعة 8dc3a4cde2
الأدوات • Dart 2.3.2 (النسخة 2.3.2-dev.0.0 e3edfd36b2)

تشغيل "ترقية حانة الرفرفة" في تطبيق الاستهلاك ... 19،8 ثانية

تشغيل طبيب الرفرفة ...
ملخص الطبيب (لمشاهدة كافة التفاصيل ، قم بتشغيل flutter doctor -v):
[√] Flutter (قناة تجريبية ، الإصدار 1.6.3 ، في Microsoft Windows [الإصدار 10.0.17134.829] ، اللغة المحلية es-AR)
[√] Android Toolchain - تطوير لأجهزة Android (إصدار Android SDK 28.0.3)
[√] Android Studio (الإصدار 3.4)
[√] IntelliJ IDEA Ultimate Edition (الإصدار 2019.1)
[√] كود VS (الإصدار 1.26.1)
[√] كود VS ، إصدار 64 بت (الإصدار 1.33.1)
[!] جهاز متصل
! لا توجد أجهزة متاحة

أعتقد أن هذه الوظيفة ستكون متاحة قريبًا.

رأيته في الوثائق وفكرت في نشره هنا. لم أختبره.
كنت أقوم بتشغيل الأمر ولم يعمل. انها تقول:

تعذر العثور على خيار يسمى "تقسيم لكل أبي".
قم بتشغيل "flutter -h" (أو "flutter -h") لأوامر وخيارات الرفرفة المتاحة.

طبيب الرفرفة:

Flutter 1.6.3 • قناة تجريبية • https://github.com/flutter/flutter.git
الإطار • المراجعة bc7bc94 (منذ 4 أسابيع) • 2019-05-23 10:29:07 -0700
المحرك • مراجعة 8dc3a4cde2
الأدوات • Dart 2.3.2 (النسخة 2.3.2-dev.0.0 e3edfd36b2)
تشغيل "ترقية حانة الرفرفة" في تطبيق الاستهلاك ... 19،8 ثانية
تشغيل طبيب الرفرفة ...
ملخص الطبيب (لمشاهدة كافة التفاصيل ، قم بتشغيل flutter doctor -v):
[√] Flutter (قناة تجريبية ، الإصدار 1.6.3 ، في Microsoft Windows [الإصدار 10.0.17134.829] ، اللغة المحلية es-AR)
[√] Android Toolchain - تطوير لأجهزة Android (إصدار Android SDK 28.0.3)
[√] Android Studio (الإصدار 3.4)
[√] IntelliJ IDEA Ultimate Edition (الإصدار 2019.1)
[√] كود VS (الإصدار 1.26.1)
[√] كود VS ، إصدار 64 بت (الإصدار 1.33.1)
[!] جهاز متصل
! لا توجد أجهزة متاحة

أعتقد أن هذه الوظيفة ستكون متاحة قريبًا.

يرجى أن نتذكر أن هذا هو على dev قناة / نسخة 1.7.4 فصاعدا فقط. أنت تقوم بتشغيل قناة beta / الإصدار 1.6.3

لقد جربته للتو (البناء والنشر باستخدام Codemagic) وقد نجح بالفعل. شكرا!

لا تزال Google تشكو من أنني لا أستخدم appbundle على الرغم من ذلك. بالنظر إلى هذا التحذير ، ربما لا يكون لنشر التطبيقات معنى كبير؟

سأستخدم appbundle - لكن هذا يمنع الاختبار الآلي لـ Google (إنشاء تقرير ما قبل الإطلاق) من العمل. هل يجب أن أفتح عددًا جديدًا لهذا؟

nohli قمنا بتحديث المستندات لتعكس أحدث المعلومات حول حزم التطبيقات / APKs: https://flutter.dev/docs/deployment/android#building -the-app-for-release.

لا تتردد في الإبلاغ عن المشكلة المتعلقة باختبار Google الآلي.

لقد قمت بإنشاء تطبيقي من الحزمة ولكن بعد التشغيل على أجهزة 64 بت ، فإن libflutter مفقود أيضًا من خلال إنشاء تطبيق لكل من جهاز 32 بت وجهاز 64 بت. كيفية إضافة libflutter.so لكل من العمارة في ملف حزمة واحدة؟

nohli قمنا بتحديث المستندات لتعكس أحدث المعلومات حول حزم التطبيقات / APKs: https://flutter.dev/docs/deployment/android#building -the-app-for-release.

لا تتردد في الإبلاغ عن المشكلة المتعلقة باختبار Google الآلي.

blasten لم ينتج عن الإجراء الوارد في الرابط APK 64 بت في الحزمة. عندما قمت بتحميل الحزمة ، كان لدى متجر Google Play نفس الخطأ كما هو موضحًا أن ملف APK الخاص بك غير متوافق مع 64 بت.

@ wal33d006 انظر إخلاء المسؤولية أعلى الصفحة - ينطبق فقط على v1.7.4 أو ما بعده (حاليًا قنوات التطوير أو الرئيسية).

@ wal33d006 انظر إخلاء المسؤولية أعلى الصفحة - ينطبق فقط على v1.7.4 أو ما بعده (حاليًا قنوات التطوير أو الرئيسية).

tvolkert أنا غير قادر حتى على بناء تطبيقي من خلال قنوات

هذا هو مخرجاتي عندما أقوم ببنائها على قنوات مطورة أو رئيسية:

رسالة المترجم:
ملف: ///Users/waleed/.pub-cache/hosted/pub.dartlang.org/cached_network_image-0.5.1/lib/cached_network_image. dart: 199 : 38: خطأ: لا يمكن تعيين نوع الوسيطة 'void Function (ImageInfo، bool)' إلى نوع المعلمة 'ImageStreamListener'.

  • 'ImageInfo' مأخوذ من ' package: flutter / src / painting / image_stream.dart ' ('file: ///Users/waleed/Developer/flutter-sdk/flutter/packages/flutter/lib/src/painting/image_stream.dart ').
  • 'ImageStreamListener' مأخوذ من ' package: flutter / src / painting / image_stream.dart ' ('file: ///Users/waleed/Developer/flutter-sdk/flutter/packages/flutter/lib/src/painting/image_stream.dart ').
    حاول تغيير نوع المعلمة ، أو تحويل الوسيطة إلى "ImageStreamListener".
    oldImageStream؟ .removeListener (_handleImageChanged) ،
    ^
    ملف: ///Users/waleed/.pub-cache/hosted/pub.dartlang.org/cached_network_image-0.5.1/lib/cached_network_image. dart: 200 : 32: خطأ: لا يمكن تعيين نوع الوسيطة 'void Function (ImageInfo، bool)' إلى نوع المعلمة 'ImageStreamListener'.
  • 'ImageInfo' مأخوذ من ' package: flutter / src / painting / image_stream.dart ' ('file: ///Users/waleed/Developer/flutter-sdk/flutter/packages/flutter/lib/src/painting/image_stream.dart ').
  • 'ImageStreamListener' مأخوذ من ' package: flutter / src / painting / image_stream.dart ' ('file: ///Users/waleed/Developer/flutter-sdk/flutter/packages/flutter/lib/src/painting/image_stream.dart ').
    حاول تغيير نوع المعلمة ، أو تحويل الوسيطة إلى "ImageStreamListener".
    _imageStream.addListener (_handleImageChanged) ،
    ^
    ملف: ///Users/waleed/.pub-cache/hosted/pub.dartlang.org/cached_network_image-0.5.1/lib/cached_network_image. dart: 210 : 34: خطأ: لا يمكن تعيين نوع الوسيطة 'void Function (ImageInfo، bool)' إلى نوع المعلمة 'ImageStreamListener'.
  • 'ImageInfo' مأخوذ من ' package: flutter / src / painting / image_stream.dart ' ('file: ///Users/waleed/Developer/flutter-sdk/flutter/packages/flutter/lib/src/painting/image_stream.dart ').
  • 'ImageStreamListener' مأخوذ من ' package: flutter / src / painting / image_stream.dart ' ('file: ///Users/waleed/Developer/flutter-sdk/flutter/packages/flutter/lib/src/painting/image_stream.dart ').
    حاول تغيير نوع المعلمة ، أو تحويل الوسيطة إلى "ImageStreamListener".
    _imageStream؟ .removeListener (_handleImageChanged)؛
    ^
    ملف: ///Users/waleed/.pub-cache/hosted/pub.dartlang.org/cached_network_image-0.5.1/lib/cached_network_image. dart: 465 : 31: خطأ: لا يمكن تعيين نوع الوسيطة 'Null Function (StringBuffer)' لنوع المعلمة 'Iterableدور()'.
  • "StringBuffer" مأخوذ من " dart: core ".
  • كلمة "Iterable" مأخوذة من " dart: core ".
  • "عقدة التشخيص" مأخوذة من " الحزمة: flutter / src / Foundation / Diagnostics.dart" ("file: ///Users/waleed/Developer/flutter-sdk/flutter/packages/flutter/lib/src/foundation/diagnostics.dart ').
    حاول تغيير نوع المعلمة ، أو تحويل الوسيطة إلى "Iterableدور()'.
    informationCollector: (StringBuffer information) {
    ^
    تم إنهاء المترجم بشكل غير متوقع.

فشل: فشل البناء مع استثناء.

  • أين:
    النص "/ المستخدمون/waleed/Developer/flutter-sdk/flutter/packages/flutter_tools/gradle/flutter.gradle" سطر: 638

  • ماذا حصل:
    فشل تنفيذ المهمة ': app: compileflutterBuildReleaseArm '.

    عملية 'الأمر' / Users / waleed / Developer / flutter-sdk / flutter / bin / flutter 'منتهية بقيمة خروج غير صفرية 1

  • يحاول:
    تشغيل بخيار --stacktrace للحصول على تتبع المكدس. تشغيل بخيار --info أو --debug للحصول على المزيد من مخرجات السجل. تشغيل باستخدام - Scan للحصول على رؤى كاملة.

  • احصل على مزيد من المساعدة على https://help.gradle.org

فشل البناء في 14 ثانية
تشغيل مهمة Gradle "bundleRelease" ...
تشغيل مهمة Gradle "bundleRelease" ... تم 15.0s
حزمة مهام Gradle فشل الإصدار مع رمز الخروج 1

@ wal33d006 package:cached_network_image هو الآن الإصدار 0.8.0 وأنت تستخدم 0.5.1 - يبدو أنه عند تشغيل الإصدار الأحدث من Flutter ، تحتاج إلى تحديث قيود الإصدار في الخاص بك pubspec.yaml و flutter packages upgrade

tvolkert أنت تقول أنه في الإصدار 1.7.4 ، يتم إضافة ملف app flutter build appbundle ؟

@ nimesh1997 نعم ، على الرغم من أن الإصدار الذي يجعله مستقرًا سيكون على الأرجح إصدارًا أحدث.

tvolkert لقد غيرت قناتي إلى ### قناة رئيسية وقمت أيضًا بترقية حزمة ###: نسخة cached_network_image إلى 0.8.0 بالتغيير داخل pubspec.yaml. ولكن عند تشغيل حزم flutter قم بالترقية. يظهر الخطأ أدناه مثل هذا:
** لأن cached_network_image> = 0.7.0 يعتمد على flutter_cache_manager ^ 0.3.2 والذي يعتمد على path_provider ^ 0.5.0 + 1 ، cached_network_image> = 0.7.0 يتطلب path_provider ^ 0.5.0 + 1.

@ nimesh1997 هل يمكنك تقديم مشكلة منفصلة

tvolkert متى سيكون flutter الإصدار 1.7.4 متاحًا في قناة ثابتة وعندما يتم حل الخطأ المذكور أدناه في flutter الإصدار 1.7.4 بسبب هذا الخطأ ، فإنه لا يعمل على أجهزة 64 بت (libflutter.so مفقود)؟

هذا هو الناتج الذي أحصل عليه عند تشغيل flutter v1.7.4 أو أحدث: -

رسالة المترجم:
الملف: ///home/zunroof-dev-4/package_flutter/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_image-1.0.0/lib/network. سهم: 75 : 31:
خطأ: لا يمكن تعيين نوع الوسيطة "Null Function (StringBuffer)" لنوع المعلمة "Iterableدور()'.

  • "StringBuffer" مأخوذ من " dart: core ".
  • كلمة "Iterable" مأخوذة من " dart: core ".
  • "DiagnosticsNode" مأخوذة من " الحزمة: flutter / src / Foundation / Diagnostics.dart" ("file: ///home/zunroof-dev-4/package_flutter/flutter/packages/flutter/lib/src/foundation/diagnostics.dart ').
    حاول تغيير نوع المعلمة ، أو تحويل الوسيطة إلى "Iterableدور()'.
    informationCollector: (StringBuffer information) {
    ^
    الملف: ///home/zunroof-dev-4/package_flutter/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_image-1.0.0/lib/network. dart: 168 : 65: خطأ: لا يمكن تعيين نوع الوسيطة "String" لنوع المعلمة "DiagnosticsNode".
  • "DiagnosticsNode" مأخوذة من " الحزمة: flutter / src / Foundation / Diagnostics.dart" ("file: ///home/zunroof-dev-4/package_flutter/flutter/packages/flutter/lib/src/foundation/diagnostics.dart ').
    حاول تغيير نوع المعلمة ، أو تحويل الوسيطة إلى "DiagnosticsNode".
    السياق: 'فشل $ runtimeType في تحميل $ {تعليمات.وري}'،
    ^
    تم إنهاء المترجم بشكل غير متوقع.

خطأ في التجميع ، لا يولد سجلات و flutter doctor -v لا يشير إلى أخطاء. ماذا علي أن أفعل؟

إذا كنت تنشر التطبيق على متجر Play ، فمن المستحسن استخدام التطبيق
حزم أو تقسيم APK لتقليل حجم APK.
لإنشاء حزمة تطبيقات ، قم بتشغيل:
flutter build appbundle - android-arm الهدف ، android-arm64
تعرف على المزيد على: https://developer.android.com/guide/app-bundle
لتقسيم ملفات APK لكل ABI ، قم بتشغيل:
flutter build apk - android-arm -getarget-platform و android-arm64
- تقسيم لكل أبي
تعلم المزيد عن:
https://developer.android.com/studio/build/configure-apk-splits#configur
e-abi-split
جارٍ بدء التدرج ...
حل التبعيات ... 4،3s
RegisterResGeneratingTask مهمل ، استخدم registerGeneratedResFolders (FileCollection)
RegisterResGeneratingTask مهمل ، استخدم registerGeneratedResFolders (FileCollection)
RegisterResGeneratingTask مهمل ، استخدم registerGeneratedResFolders (FileCollection)
تشغيل مهمة Gradle "تجميع الإصدار" ...
تشغيل مهمة Gradle "تجميع الإصدار" ... تم 90 ثانية

فشل بناء Gradle في إنتاج حزمة Android.

@ leonardop21 حاول مع

رفرفة تشغيل الخامس

تضمين التغريدة

يا إلهي. ليس لدي أي فكرة عما يجب فعله الآن

فشل بناء Gradle في إنتاج حزمة Android.

0 throwToolExit (الحزمة: flutter_tools / src / base / common.dart: 28: 3)

1 _buildGradleProjectV2.0

(الحزمة: flutter_tools / src / android / gradle.dart: 514: 7)

2 _asyncThenWrapperHelper.

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

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

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

5 _FutureListener.handleValue (سهم: غير متزامن / Future_impl.dart: 126: 18)

6 Future._propagateToListeners.handleValueCallback

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

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

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

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

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

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

12 runCommandAndStreamOutput (الحزمة: flutter_tools / src / base / process.dart)

13 _asyncThenWrapperHelper.

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

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

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

16 _FutureListener.handleValue (سهم: غير متزامن / 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 Future._asyncComplete.

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

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

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

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

24 _CustomZone.bindCallbackGuarded.

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

25 _microtaskLoop (dart: غير متزامن / Schedule_microtask.dart: 41: 21)

26 _startMicrotaskLoop (dart: غير متزامن / Schedule_microtask.dart: 50: 5)

27 _runPendingImmediateCallback

(دارت: عزل رقعة / عزل_ رقعة. جزء: 116: 13)

28 _RawReceivePortImpl._handleMessage

(دارت: عزل رقعة / عزل_ رقعة. جزء: 173: 5)

لقد قمنا بتحديث مستنداتنا للإشارة إلى كيفية إنشاء ملفات APK باستخدام ثنائيات 32 بت و 64 بت. https://flutter.dev/docs/deployment/android#building -the-app-for-release.

الرجاء استخدام القناة dev : v1.7.9 أو أعلى. يعمل الفريق على الترويج لأحدث التغييرات في الإصدار التجريبي بحلول يوم الجمعة (2018/06/28).

رسالة المترجم:
ملف: ///Users/systemgnk/Desktop/flutter/.pub-cache/hosted/pub.dartlang.org/flare_flutter-1.5.2/lib/flare. dart: 1033 : 18: خطأ: لا يمكن تعيين نوع الوسيطة 'Int32List' لنوع المعلمة 'Uint16List'.

  • 'Int32List' مأخوذ من ' dart: typed_data '.
  • "Uint16List" مأخوذ من "dart: typed_data".
    حاول تغيير نوع المعلمة ، أو تحويل الوسيطة إلى "Uint16List".
    المؤشرات: _indices، TextCoordinates: _uvBuffer)؛
    ^
    تم إنهاء المترجم بشكل غير متوقع.

فشل: فشل البناء مع استثناء.

  • أين:
    النص "/ المستخدمون/systemgnk/Desktop/flutter/packages/flutter_tools/gradle/flutter.gradle" سطر: 631

  • ماذا حصل:
    فشل تنفيذ المهمة ': app: compileflutterBuildReleaseArm '.

    انتهت العملية "الأمر" / Users / systemgnk / Desktop / flutter / bin / flutter "بقيمة خروج غير صفرية 1

  • يحاول:
    تشغيل بخيار --stacktrace للحصول على تتبع المكدس. تشغيل بخيار --info أو --debug للحصول على المزيد من مخرجات السجل. تشغيل باستخدام - Scan للحصول على رؤى كاملة.

  • احصل على مزيد من المساعدة على https://help.gradle.org

فشل البناء في 22 ثانية
تشغيل مهمة Gradle "تجميع الإصدار" ...
تشغيل مهمة Gradle "تجميع الإصدار" ... تم 23.3s
تجميع مهمة Gradle فشل الإصدار مع رمز الخروج 1

[✓] Flutter (Channel dev، v1.7.10، في نظام التشغيل Mac OS X 10.13.6 17G65، locale en-US)
• Flutter الإصدار 1.7.10 في / Users / systemgnk / Desktop / flutter
• مراجعة الإطار 9a3a7490c8 (منذ يومين) ، 2019-06-25 15:59:15 +0200
• مراجعة المحرك ae8e6d9f46
• Dart الإصدار 2.4.0

[✓] Android Toolchain - تطوير لأجهزة Android (إصدار Android SDK 28.0.3)
• Android SDK على / Users / systemgnk / Library / Android / sdk
• لم يتم تكوين موقع Android NDK (اختياري ؛ مفيد لدعم التوصيف الأصلي)
• منصة android-28 ، أدوات بناء 28.0.3
• برنامج Java ثنائي على: / Applications / Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
• إصدار جافا OpenJDK Runtime Environment (النسخة 1.8.0_152-release-1248-b01)
• قبول جميع تراخيص Android.

[✓] Xcode - تطوير لـ iOS و macOS (Xcode 10.1)
• Xcode في /Applications/Xcode.app/Contents/Developer
• Xcode 10.1 ، الإصدار الإصدار 10B61
• CocoaPods الإصدار 1.6.0

[✓] أدوات iOS - تطوير لأجهزة iOS
• نشر iOS 1.9.4

[✓] Chrome - تطوير للويب
• Chrome في / Applications / Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (الإصدار 3.3)
• Android Studio في / Applications / Android Studio.app/Contents
• إصدار البرنامج المساعد Flutter 33.3.1
• إصدار Dart الإضافي 182.5215
• إصدار جافا OpenJDK Runtime Environment (النسخة 1.8.0_152-release-1248-b01)

[✓] جهاز متصل (4 متوفر)
• Android SDK مصمم لـ x86 • emulator-5554 • android-x86 • Android 7.0 (API 24) (محاكي)
• جهاز iPhone الخاص بالنظام • 73145c33ee6d180a2db3d4a96b908ceb4c49065b • iOS • iOS 12.3.1
• macOS • macOS • darwin-x64 • Mac OS X 10.13.6 17G65
• Chrome • chrome • web-javascript • Google Chrome 75.0.3770.100

• لم يتم العثور على اى مشكلات!

ما زلت أواجه مشكلة في إنشاء apk.
كنت متاحًا فقط لإنشاء 32 بت apk في قناة مستقرة.

أعتقد أنني بحاجة إلى الانتظار حتى يصلح فريق flutter هذا الخطأ بدلاً من استخدام sdk للقناة الرئيسية أو dev.

شكرا لك.

JaeyoungChu الرجوع إلى 2d-inc / Flare-Flutter # 79

ctrysbita شكرا على الرابط. لقد غيرت القناة لإتقان وتغيير نوع المؤشرات من Int32List إلى Uint16List.
apk الذي تم تحميله على متجر play لا يحتوي على تحذير لـ 64 بت ويتم تشغيله بعد التثبيت من صفحة اختبار متجر play.

لدي مشكلات أخرى مع رفرف قناة dev مثل عدم ظهور مربع حوار إذن منبثق للموقع وخريطة جوجل لا تظهر في نظام iOS ولا يمكن أن تظهر ملف الصورة الكبيرة عن طريق http (صورة الشبكة المخزنة مؤقتًا). هذه المشكلات غير مؤكدة بسبب قناة التطوير ولكن عندما عدت إلى حالة الاستقرار وأعيد البناء مرة أخرى ، اختفت جميع المشكلات. ليس لدي الكثير من الوقت للبحث في هذه القضايا ، لذا فهي ليست متأكدة بنسبة 100٪. آسف لذلك ولكن ربما يحصل شخص ما على تلميح من هذه القضايا.

كان هذا هو الحل:

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

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

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

            // Specifies that we do not want to also generate a universal APK that includes all ABIs.
            universalApk false
        }
    }
  1. تشغيل flutter build apk --release --target-platform=android-arm
  2. تحميل app-armeabi-v7a-release.apk إلى متجر play
  3. زيادة versionCode
  4. تشغيل flutter build apk --release --target-platform=android-arm64
  5. تحميل app-arm64-v8a-release.apk إلى متجر play

سيخدم متجر Google play التطبيق وفقًا لهندسة الجهاز. أجهزة 32 بت سعيدة ، وأجهزة 64 بت سعيدة وأنا سعيد بمعرفة أن حجم APK الخاص بي لا يزال صغيرًا نسبيًا بينما لا يزال يخدم كلا البنيتين.

إذا قمنا بتضمين الدعم لكل من البنيتين في نفس APK ، فتوقع أن يكون حجم التطبيق الخاص بك 10 ميجا بايت +

أين؟ اين نضيف قسم الانقسامات الى ملف gradle ؟؟ لقد أضفته بين flutter {} والتبعيات {} ولن يتم إنشاء أول APK كما هو موضح:

يرجى مراجعة إعداد مشروع Gradle الخاص بك في android / folder.

من الواضح أن هذا ليس صحيحًا ، لأن هذا هو التغيير الوحيد الذي أجريته على المشروع منذ آخر تصميم لي.

@ ArtfulDodgerB92 شكرا على الحل. ما القناة التي استخدمتها لإنشاء ملف apk والإصدار؟

أين؟ اين نضيف قسم الانقسامات الى ملف gradle ؟؟ لقد أضفته بين flutter {} والتبعيات {} ولن يتم إنشاء أول APK كما هو موضح:

يرجى مراجعة إعداد مشروع Gradle الخاص بك في android / folder.

من الواضح أن هذا ليس صحيحًا ، لأن هذا هو التغيير الوحيد الذي أجريته على المشروع منذ آخر تصميم لي.

@ ArtfulDodgerB92 يجب أن يكون داخل قسم android{} ، كما هو مكتوب هنا: https://developer.android.com/studio/build/configure-apk-splits.html

لمعلوماتك ، تم إرسال الإعلان التالي إلى [email protected] بخصوص دعم 64 بت.

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

أي أخبار عن إصدار بيتا قادم؟

nohli ، قمنا بتأخير إصدار الإصدار التجريبي لبضعة أيام لالتقاط إصلاح (عودة الالتزام) إلى https://github.com/flutter/flutter/issues/35291. نحن نعمل للحصول على إصدار تجريبي في أسرع وقت ممكن.

هذا الآن مباشر على القناة التجريبية ، في الإصدار v1.7.8+hotfix.2

هذا الآن مباشر على القناة التجريبية ، في الإصدار v1.7.8+hotfix.2

Сool كيفية إنشاء الإصدار apk؟

هذا الآن مباشر على القناة التجريبية ، في الإصدار v1.7.8+hotfix.2

Сool كيفية إنشاء الإصدار apk؟

إليك التعليمات https://flutter.dev/docs/deployment/android

هذا الآن مباشر على القناة التجريبية ، في الإصدار v1.7.8+hotfix.2

Сool كيفية إنشاء الإصدار apk؟

إليك التعليمات https://flutter.dev/docs/deployment/android

حاولت ولكن لا أعمل في 32

حاولت ولكن لا أعمل في 32

ماذا تقصد ب 32 ؟ مثل "يمكنني إنشاء ملف apk سمين ، وهذا apk يعمل على جهاز 64 بت ، ولكن يتعطل على جهاز 32 بت"؟

هل يمكنك نشر نتيجة flutter doctor ، خطوة بخطوة (على سبيل المثال ، هذه هي الخطوة 2 من البرنامج https://flutter.dev/docs/deployment/android#step-2---enable- obfuscation-andor-minification) ، هل تُنشئ APK أو AAB ، وما الجهاز الذي تختبره؟

هل ما زلنا بحاجة إلى وضع
لم تعد هناك حاجة ndk { abiFilters 'armeabi-v7a' , 'x86', 'armeabi' } في gradle بعد الإصلاح في الإصدار التجريبي ؟؟

ksamj لا حاجة.

حاولت ولكن لا أعمل في 32

ماذا تقصد ب 32 ؟ مثل "يمكنني إنشاء ملف apk سمين ، وهذا apk يعمل على جهاز 64 بت ، ولكن يتعطل على جهاز 32 بت"؟

هل يمكنك نشر نتيجة flutter doctor ، خطوة بخطوة (على سبيل المثال ، هذه هي الخطوة 2 من البرنامج https://flutter.dev/docs/deployment/android#step-2---enable- obfuscation-andor-minification) ، هل تُنشئ APK أو AAB ، وما الجهاز الذي تختبره؟

ملخص الطبيب (لمشاهدة كافة التفاصيل ، قم بتشغيل flutter doctor -v):
[✓] Flutter (قناة تجريبية ، الإصدار 1.7.8 + الإصلاح العاجل.2 ، في نظام التشغيل Mac OS X 10.14.5 18F132 ، اللغة المحلية ru-RU)

[✓] Android Toolchain - تطوير لأجهزة Android (إصدار Android SDK 28.0.3)
[✓] Xcode - تطوير لـ iOS و macOS (Xcode 10.2.1)
[✓] أدوات iOS - تطوير لأجهزة iOS
[✓] Android Studio (الإصدار 3.4)
[✓] جهاز متصل (1 متوفر)

• لم يتم العثور على اى مشكلات!

ملخص الطبيب (لمشاهدة كافة التفاصيل ، قم بتشغيل flutter doctor -v):
[✓] Flutter (قناة تجريبية ، الإصدار 1.7.8 + الإصلاح العاجل.2 ، في نظام التشغيل Mac OS X 10.14.5 18F132 ، اللغة المحلية ru-RU)

[✓] Android Toolchain - تطوير لأجهزة Android (إصدار Android SDK 28.0.3)
[✓] Xcode - تطوير لـ iOS و macOS (Xcode 10.2.1)
[✓] أدوات iOS - تطوير لأجهزة iOS
[✓] Android Studio (الإصدار 3.4)
[✓] جهاز متصل (1 متوفر)

• لم يتم العثور على اى مشكلات!
ملخص الطبيب (لمشاهدة كافة التفاصيل ، قم بتشغيل flutter doctor -v):
[✓] Flutter (قناة تجريبية ، الإصدار 1.7.8 + الإصلاح العاجل.2 ، في نظام التشغيل Mac OS X 10.14.5 18F132 ، اللغة المحلية ru-RU)

[✓] Android Toolchain - تطوير لأجهزة Android (إصدار Android SDK 28.0.3)
[✓] Xcode - تطوير لـ iOS و macOS (Xcode 10.2.1)
[✓] أدوات iOS - تطوير لأجهزة iOS
[✓] Android Studio (الإصدار 3.4)
[✓] جهاز متصل (1 متوفر)

• لم يتم العثور على اى مشكلات!
بناء apk
فعلت كل شيء كما في التعليمات ولكن لم يتم تثبيته على 32 بت

فعلت كل شيء كما في التعليمات ولكن لم يتم تثبيته على 32 بت

أي لقطة شاشة / سجل يوضح أن تثبيت APK 32 بت على جهاز 32 بت لم يكن ناجحًا ، وما طراز الجهاز هذا؟

أهلا بكم،

v1.7.8+hotfix.2 للقناة الثابتة ، لذا فإن هذا الإصلاح متاح الآن في جميع القنوات. شكرا للجميع على صبركم ومساعدتكم على طول الطريق!

فعلت كل شيء كما في التعليمات ولكن لم يتم تثبيته على 32 بت

أي لقطة شاشة / سجل يوضح أن تثبيت APK 32 بت على جهاز 32 بت لم يكن ناجحًا ، وما طراز الجهاز هذا؟

شكرا للمساعدة ، حاولت بناء appbundle وعمله.

tvolkert نفس المشكلة يرجى التحقق منها. https://github.com/flutter/flutter/issues/31962#issuecomment -509458960

@ nimesh1997 أن المشكلة لا علاقة لها بهذا. إذا لم تجد الإجابات المقدمة في المشكلة المرتبطة مفيدة ، فربما يمكنك النظر في نشر سؤال Stackoverflow مع مشكلتك.

tvolkert - flutter docs ، أليس كذلك؟
لذلك ، لن تكون هناك حاجة لإجراء أي تغييرات أخرى في ملف gradle كما هو موضح في الحلول الجزئية السابقة
شكرا لك ولباقي الفريق على العمل الممتاز والتسليم في الوقت المحدد!

لقد قمت للتو بتجميع أحد تطبيقي مع أحدث إصلاح سريع. نتيجة لذلك ، لا يمكن تشغيل app-production-armeabi-v7a-release.apk المترجم على Galaxy S3 mini (Android OS 4.1.2) - بعد شاشة البداية ، يتم إغلاق التطبيق دون أي إشعار.
ومع ذلك ، فأنا قادر على تشغيل نفس apk بنجاح على هاتف 64 مثل Galaxy S8.
إليك كيفية تشغيل الرفرفة من سطر الأوامر:

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

وهنا هو flutter doctor -v

[√] Flutter (قناة مستقرة ، v1.7.8 + الإصلاح العاجل.2 ، على Microsoft Windows [الإصدار 10.0.17763.557] ، الإعدادات المحلية في الولايات المتحدة)
• Flutter الإصدار 1.7.8 +fix.2 في E: \ DevToolsflutter
• مراجعة الإطار 2e540931f7 (منذ 7 أيام) ، 2019-07-02 09:31:07 -0700
• مراجعة المحرك b1cb0d9e9b
• Dart الإصدار 2.4.0

[√] Android Toolchain - تطوير لأجهزة Android (إصدار Android SDK 28.0.3)
• Android SDK على E: \ DevTools \ Android \ Sdk
• لم يتم تكوين موقع Android NDK (اختياري ؛ مفيد لدعم التوصيف الأصلي)
• منصة android-28 ، أدوات بناء 28.0.3
• ANDROID_SDK_ROOT = E: \ DevTools \ Android \ Sdk
• Java ثنائي على: E: \ DevTools \ android-studio \ jre \ bin \ java
• إصدار جافا OpenJDK Runtime Environment (النسخة 1.8.0_152-release-1343-b01)
• قبول جميع تراخيص Android.

[√] Android Studio (الإصدار 3.4)
• Android Studio في E: \ DevTools \ android-studio
• إصدار البرنامج المساعد Flutter 37.0.1
• إصدار البرنامج المساعد Dart 183.6270
• إصدار جافا OpenJDK Runtime Environment (النسخة 1.8.0_152-release-1343-b01)

[√] جهاز متصل (1 متوفر)
• Android SDK مصمم لـ x86 • emulator-5554 • android-x86 • Android 8.1.0 (API 27) (محاكي)

• لم يتم العثور على اى مشكلات!

بالإضافة إلى ذلك - ملف apk fat أيضًا غير قادر على التشغيل - بعد التثبيت (على نفس جهاز arm-32) وتشغيله يغلق فقط.
يرجى إعلامي بكيفية المتابعة وحل المشكلة ، شكرًا!

@ angel1st هل من الممكن أن تشارك ملف AAB و / أو APK هنا حتى نتمكن من مساعدتك في استكشاف الأخطاء وإصلاحها؟

truongsinh - بالتأكيد ،

app-production-releases.zip

لقد قمت بتحميل كلا ملفي APK ، على الرغم من أن المشكلة المزعومة تتعلق بإصدار arm-32 كما هو مذكور أعلاه.

الرجال ، في هذه الأثناء ، هل سيكون شخص ما لطيفًا ويقول (إذا كانوا يعرفون) ، ما الذي سيحدث بعد الأول من أغسطس في متجر Google Play ، في حال لم يكن لديك إصدار arm-64 من تطبيقك - هل سيتوقف ملف apk عن ذلك يتم تقديمه إلى أجهزة arm64 أم أنك لن تكون قادرًا على تحميل إصدار arm32 فقط أو كليهما؟

@ angel1st لقد تمكنت من تشغيل التطبيق (app-production-armeabi-v7a-release.apk) على Android 4.4.2 Galaxy S4. تطبيق جميل!

أظن أن هذا خاص جدًا بنظام التشغيل Galaxy S3 mini / Android OS 4.1.2. في غضون ذلك ، طلبت هذا التكوين لمعرفة ما إذا كان بإمكاني إعادة معالجة المشكلة.

@ angel1st هذا هو المصدر الأكثر https://android-developers.googleblog.com/2019/01/get-your-apps-ready-for-64-bit.html

لا ينطبق المطلب [أشياء 64 بت] على:

  • تستهدف حزم APK أو حِزم التطبيقات صراحةً Wear OS أو Android TV ، وهي عوامل شكلية لا تدعم حاليًا رمز 64 بت.
  • ملفات APK أو حزم التطبيقات التي لم يتم توزيعها على الأجهزة التي تعمل بنظام Android 9 Pie أو إصدار أحدث.

اعتبارًا من 1 أغسطس 2019:

  • جميع التطبيقات الجديدة وتحديثات التطبيقات التي تتضمن كودًا أصليًا مطلوبة لتوفير إصدارات 64 بت بالإضافة إلى إصدارات 32 بت عند النشر على Google Play.

بمعنى آخر ، يستمر توزيع التطبيقات ، على الرغم من أنه لا يمكنك تحميل إصدار جديد من التطبيق الحالي ، أو نشر تطبيق جديد دون الامتثال.

@ angel1st لقد تمكنت من إعادة معالجة هذه المشكلة على جهاز Galaxy S3 mini الذي يعمل بنظام التشغيل Android OS 4.1.2.

اللوجكات هو:

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

قدمت https://github.com/flutter/flutter/issues/35838 في غضون ذلك.

سم مكعب @ جيسون سيمونز

truongsinh - شكرًا على العرض العام.

@ blasten - شكرًا على ردود الفعل السريعة. بقدر ما أفهم ، لا يوجد شيء يمكنني القيام به أجهزة الصراف الآلي ولكن سيتم حل الشاشة رقم 35838 بأصابع متقاطعة في وقت ما هذا الشهر؟ أعتقد أن نفس المشكلة ستظهر لأي ملف APK آخر لنظام Android 4.1.2 تم تجميعه مع أحدث إصلاح سريع؟
لمعلوماتك - تطبيق apk الذي تم تجميعه مع إصدار مستقر سابق من flutter لا يحتوي على هذه المشكلة (S3 mini مع Android 4.1.2 هو أحد أجهزتي الاختبارية).

أي شخص آخر حصل على بريد من جوجل اليوم ، يقول

"الإجراء المطلوب: تحديث تطبيقاتك لتكون متوافقة مع 64 بت بحلول 1 آب (أغسطس) 2019"

على الرغم من نشر إصدارات 32 بت و 64 بت بالفعل؟

انها تقول

بحلول 1 أغسطس 2019 ، يجب أن توفر جميع التطبيقات التي تستخدم رمزًا أصليًا إصدار 64 بت لنشر تحديث. اعتبارًا من إرسال هذا البريد الإلكتروني ، فإن تطبيقًا واحدًا على الأقل من تطبيقاتك * لا يفي بالمتطلبات حتى الآن

* ملاحظة: تعكس قائمة التطبيقات هذه أفضل تقدير لشركة Google اعتبارًا من إرسال هذا البريد الإلكتروني. (...)

أعتقد أن "أفضل تقدير" من Google ليس صحيحًا؟

شكرا لفريق Flutter. أقوم بترقية Flutter والبناء على قناة مستقرة وذهب التحذير.
آمل ألا يكون هناك خطأ مع المختبرين ولكن حتى الآن لم أجد أي أخطاء مع جهاز حقيقي!

بفضل Team Flutter ، تعمل ترقية Flutter باستخدام الإصلاح العاجل على إصلاح هذه المشكلة عند إنشاء .aab

شكرا لفريق الرفرفة على هذا الإنجاز. الآن لمواصلة برمجتها!

@ angel1st لدي أيضًا مشكلات في بعض أجهزة Samsung.

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

@ abdullayev007 - شكرا! أود أن أقترح عليك إلقاء نظرة على # 35838 ، فقد يكون مرتبطًا إلى حد ما.

فعلت كل شيء كما في التعليمات ولكن لم يتم تثبيته على 32 بت

أي لقطة شاشة / سجل يوضح أن تثبيت APK 32 بت على جهاز 32 بت لم يكن ناجحًا ، وما طراز الجهاز هذا؟
IMG-20190710-WA0000

الجهاز Samsung M10

tvolkert من فضلك أعطني أي حل لإصلاح المشكلة التالية:
https://github.com/flutter/flutter/issues/36063

شكرا

جربت أحدث إصدار من flutter من قناة dev - v1.8.4. لقد أنشأت مشروعًا جديدًا أيضًا - مشروع الفانيليا الرفرفة وحاولت إنشاء نسخة موقّعة منه. حجم التطبيق هو 10.4 ميغابايت فقط. لكن جربت كل الخطوات المذكورة أعلاه في هذا المسار ، فلا شيء يساعد. هل يمكن لشخص ما أن يعطي مجموعة واضحة من الخطوات لاتخاذ بناء يمكننا دفعه إلى playstore باستخدام aab أو apk مع المحاكي والجهاز المحلي من الرفرفة. لقد مر أكثر من أسبوع ، لدينا مشروع مبني على رفرفة لا يتحرك للحث على نظام أندرويد ، لكننا قادرون على النشر في متجر التطبيقات على نظام iOS. بعض المساعدة ستكون عظيمة

"[✓] Flutter (Channel dev، v1.8.4، في نظام التشغيل Mac OS X 10.14.5، locale en-US)
• Flutter الإصدار 1.8.4 في / Users / muthu / muthu / devapps / flutter
• مراجعة الإطار 954714c967 (منذ 7 أيام) ، 2019-08-02 10:10:39 -0700
• مراجعة المحرك 26368225b5
• Dart الإصدار 2.5.0 (الإصدار 2.5.0-dev.1.0 bd049f5b53)

[!] Android Toolchain - تطوير لأجهزة Android (إصدار Android SDK 29.0.1)
• Android SDK في ../Library/Android/sdk
• لم يتم تكوين موقع Android NDK (اختياري ؛ مفيد لدعم التوصيف الأصلي)
• النظام الأساسي android-29 ، أدوات البناء 29.0.1
• برنامج Java ثنائي على: / Applications / Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
• إصدار جافا OpenJDK Runtime Environment (النسخة 1.8.0_152-release-1343-b01)
✗ حالة ترخيص Android غير معروفة.
حاول إعادة تثبيت Android SDK Manager أو تحديثه.
راجع https://developer.android.com/studio/#downloads أو قم بزيارة https://flutter.dev/setup/#android -setup
للحصول على تعليمات مفصلة.

[✓] Xcode - تطوير لـ iOS و macOS (Xcode 10.3)
• Xcode في /Applications/Xcode.app/Contents/Developer
• Xcode 10.3 ، الإصدار الإصدار 10G8
• CocoaPods الإصدار 1.7.3

[✓] Android Studio (الإصدار 3.4)
• Android Studio في / Applications / Android Studio.app/Contents
• إصدار البرنامج المساعد Flutter 38.2.1
• إصدار البرنامج المساعد Dart 183.6270
• إصدار جافا OpenJDK Runtime Environment (النسخة 1.8.0_152-release-1343-b01)

[✓] كود VS (الإصدار 1.36.1)
• VS Code في / Applications / Visual Studio Code.app/Contents
• ملحق Flutter الإصدار 3.3.0

[✓] جهاز متصل (3 متوفر)
• Android SDK مصمم لـ x86 • emulator-5554 • android-x86 • Android 9 (API 28)
(مضاهاة) `

muthufmass ، يرجى تقديم مشكلة جديدة مع تفاصيل ما لا يعمل وكيفية إعادة إنتاج الفشل. شكرا!

هل يمكن لشخص ما أن يعطي مجموعة واضحة من الخطوات لاتخاذ بناء يمكننا دفعه إلى playstore

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

هل يمكن لشخص ما أن يعطي مجموعة واضحة من الخطوات لاتخاذ بناء يمكننا دفعه إلى playstore

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

تم اتباع هذه الخطوات بالفعل ، فهي لا تعمل على بناء إصدار prod. يعمل بناء التصحيح! من الواضح أنني وجدت اختلافًا ، في بناء التصحيح ، لذا فإن ملفات الرفرفة موجودة ، ولكن ليس مع إصدار الإصدار. هذه هي ، مما يخلق مشكلة لتثبيت apk على المحاكي أو على الأجهزة التي تحمل apk موقّعة.

muthufmass ، يرجى تقديم مشكلة جديدة مع تفاصيل ما لا يعمل وكيفية إعادة إنتاج الفشل. شكرا!

آمل أن أكون قد شاركت الخطوات الموضحة أعلاه. إنشاء تطبيق جديد باستخدام flutter create - vanilla code بأحدث flutter sdk. يتعذر إنشاء نسخة إصدار ، بينما تعمل إصدارات التصحيح بسلاسة. فرق كبير بين إصدار prod و dev من apk في الحجم. جربت جميع الخطوات المذكورة أعلاه ، غير قادر على إنشاء نسخة إصدار تعمل. يحدث البناء بسرعة فائقة ويأتي الملف أقل من 11 ميجابايت مع الإصدار ، بينما مع debug apk ، يأتي حوالي 40 ميجابايت +. يعمل Debug apk ، بينما لا يتم تثبيت ملف apk موقع prod حتى.

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

muthufmass عند تقديم الإصدار الجديد ، يرجى تضمين إصدار Android SDK وطراز الجهاز وإخراج الطبيب والخطوات بدءًا من flutter create .

muthufmass وكذلك إخراج

تم إغلاق هذه المشكلة - يرجى تقديم مشكلة جديدة حتى نتمكن من تتبعها بشكل صحيح.

رفعت تذكرة منفصلة الآن https://github.com/flutter/flutter/issues/37935

إذا كان لديك نكهات في مشروعك ، وترغب في دعم كل من x64 و x32 ، فما عليك سوى إضافة مجلد jniLibs إلى مجلد النكهات الخاصة بك وهو يعمل بشكل رائع ، مثل هذا
image

كيف يمكنني القيام بذلك في adobe animate cc
بحاجة الى مزيد من المعلومات

بدأت Google play Console مؤخرًا في تعطيل زر التشغيل بسبب التحذيرات المختلفة. وأحد تلك التحذيرات هو استخدام apk بدلاً من ملف .aab. هناك حلول لإنشاء ملف .aab إذا تم إنشاء المشروع في Android Studio أو Unity. ولكن ماذا لو تم إنشاء apk بواسطة Animate CC أو Haxe / Flash Develop؟ هل هناك أي طريقة للتحويل؟

newapproach ليس من الواضح بالنسبة لي ما إذا كان تعليقك له علاقة بـ Flutter؟ هل أنت على استعداد لتقديم مشكلة جديدة بمزيد من التفاصيل؟ شكرا!

لديك نفس المشكلة - ولكن flutter.so غير مدرج في "مجلد armeabi-v7a.
لديها مكتبات طرف ثالث فقط لـ x86 و armeabi-v7a - ولكن ليس بها arm64.
أرغب في بناء رفرفة فقط لـ "armeabi-v7a مع
ndk {
abiFilters "armeabi-v7a" // أيضًا لا تعمل "armeabi" ، "x86" ،
}
وتعيين كمنصة مستهدفة كما يقترح @ mravn-google إلى android-arm.

APK بدون تحديد القوس ولا تشمل المكتبات
screen shot 2018-07-26 at 21 06 53

APK مع مكتبات وبدون مواصفات الذراع
screen shot 2018-07-26 at 21 10 30

APK مع تحديد القوس وتضمين المكتبات
screen shot 2018-07-26 at 21 12 58

أي اقتراح كيفية تصحيح المزيد من الخطوات؟

لقد وجدت هذا الخطأ أيضًا ، هل تم إصلاحه ؟؟ يمكن أن تساعدني؟

أوصي بالسؤال على Stack Overflow ، أو فتح خطأ جديد. أشك في أن هذا الخطأ المغلق سيكون المكان المناسب للناس لمساعدتك في حل المشكلة المذكورة أعلاه. شكرا!

كان هذا هو الحل:

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

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

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

            // Specifies that we do not want to also generate a universal APK that includes all ABIs.
            universalApk false
        }
    }
  1. تشغيل flutter build apk --release --target-platform=android-arm
  2. تحميل app-armeabi-v7a-release.apk إلى متجر play
  3. زيادة versionCode
  4. تشغيل flutter build apk --release --target-platform=android-arm64
  5. تحميل app-arm64-v8a-release.apk إلى متجر play

سيخدم متجر Google play التطبيق وفقًا لهندسة الجهاز. أجهزة 32 بت سعيدة ، وأجهزة 64 بت سعيدة وأنا سعيد بمعرفة أن حجم APK الخاص بي لا يزال صغيرًا نسبيًا بينما لا يزال يخدم كلا البنيتين.

إذا قمنا بتضمين الدعم لكل من البنيتين في نفس APK ، فتوقع أن يكون حجم التطبيق الخاص بك 10 ميجا بايت +

لا يعمل .. عندما أشاهده على playstore على pixel 2 ، يظهر أنه غير مدعوم لهذا الجهاز

إنه يعمل بالفعل ، فقد قامت العديد من التطبيقات المعروفة بنشر العديد من ملفات APK بهذه الطريقة والسماح لمتجر Play Store بتقديم الملف المناسب للجهاز المناسب لفترة طويلة.

حِزم التطبيقات هي الطريقة الحديثة للقيام بذلك ، على الرغم من ذلك.

إنه يعمل بالفعل ، فقد قامت العديد من التطبيقات المعروفة بنشر العديد من ملفات APK بهذه الطريقة والسماح لمتجر Play Store بتقديم الملف المناسب للجهاز المناسب لفترة طويلة.

حِزم التطبيقات هي الطريقة الحديثة للقيام بذلك ، على الرغم من ذلك.

لا أعرف سبب عدم ظهوره على متجر ألعاب Pixel 2 بالنسبة لي بعد ذلك ...
لقد استخدمت حزمة التطبيق وكان تطبيقي يتعطل ومن ثم أبحث عن بدائل

تم قفل سلسلة الرسائل هذه تلقائيًا نظرًا لعدم وجود أي نشاط حديث بعد إغلاقه. إذا كنت لا تزال تواجه مشكلة مماثلة ، فالرجاء فتح خطأ جديد ، بما في ذلك ناتج flutter doctor -v وتقليل إعادة إنتاج المشكلة.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات