Приложение Flutter, созданное с помощью команды build apk, не может запустить код платформы c - PullRequest
6 голосов
/ 30 мая 2020

У меня есть приложение flutter, которое запускает определенный код c платформы с использованием канала метода. Этот код также использует внешние библиотеки через зависимости Gradle. Все работает нормально при сборке с использованием android studio как в режиме отладки, так и в режиме выпуска. Но при сборке с использованием команды flutter build apk приложение вылетает при попытке выполнить код платформы. Это журналы, которые я получаю из adb logcat одним из методов:

05-30 02:04:53.302  4398  4398 E AndroidRuntime: Process: com.**.**, PID: 4398
05-30 02:04:53.302  4398  4398 E AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.**.**/com.razorpay.CheckoutActivity}: java.lang.ClassNotFoundException: com.razorpay.G__G_
05-30 02:04:53.302  4398  4398 E AndroidRuntime:    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3271)
05-30 02:04:53.302  4398  4398 E AndroidRuntime:    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3410)
05-30 02:04:53.302  4398  4398 E AndroidRuntime:    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
05-30 02:04:53.302  4398  4398 E AndroidRuntime:    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
05-30 02:04:53.302  4398  4398 E AndroidRuntime:    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
05-30 02:04:53.302  4398  4398 E AndroidRuntime:    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2017)
05-30 02:04:53.302  4398  4398 E AndroidRuntime:    at android.os.Handler.dispatchMessage(Handler.java:107)
05-30 02:04:53.302  4398  4398 E AndroidRuntime:    at android.os.Looper.loop(Looper.java:214)
05-30 02:04:53.302  4398  4398 E AndroidRuntime:    at android.app.ActivityThread.main(ActivityThread.java:7397)
05-30 02:04:53.302  4398  4398 E AndroidRuntime:    at java.lang.reflect.Method.invoke(Native Method)
05-30 02:04:53.302  4398  4398 E AndroidRuntime:    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
05-30 02:04:53.302  4398  4398 E AndroidRuntime:    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:935)
05-30 02:04:53.302  4398  4398 E AndroidRuntime: Caused by: java.lang.ClassNotFoundException: com.razorpay.G__G_
05-30 02:04:53.302  4398  4398 E AndroidRuntime:    at com.razorpay.O__Y_.G__G_(:1100)
05-30 02:04:53.302  4398  4398 E AndroidRuntime:    at java.lang.reflect.Method.invoke(Native Method)
05-30 02:04:53.302  4398  4398 E AndroidRuntime:    at com.razorpay.b1.<clinit>(Unknown Source:1683)
05-30 02:04:53.302  4398  4398 E AndroidRuntime:    at com.razorpay.b1.a(Unknown Source:0)
05-30 02:04:53.302  4398  4398 E AndroidRuntime:    at com.razorpay.c.f(Unknown Source:11)
05-30 02:04:53.302  4398  4398 E AndroidRuntime:    at com.razorpay.g.c(Unknown Source:0)
05-30 02:04:53.302  4398  4398 E AndroidRuntime:    at com.razorpay.k.onCreate(Unknown Source:70)
05-30 02:04:53.302  4398  4398 E AndroidRuntime:    at com.razorpay.w0.onCreate(Unknown Source:110)
05-30 02:04:53.302  4398  4398 E AndroidRuntime:    at com.razorpay.CheckoutActivity.onCreate(Unknown Source:0)
05-30 02:04:53.302  4398  4398 E AndroidRuntime:    at android.app.Activity.performCreate(Activity.java:7993)
05-30 02:04:53.302  4398  4398 E AndroidRuntime:    at android.app.Activity.performCreate(Activity.java:7982)
05-30 02:04:53.302  4398  4398 E AndroidRuntime:    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1307)
05-30 02:04:53.302  4398  4398 E AndroidRuntime:    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3246)
05-30 02:04:53.302  4398  4398 E AndroidRuntime:    ... 11 more

Здесь com.razorpay - одна из таких внешних библиотек, которые я использую. Я получаю такую ​​же ошибку и для других библиотек. Так что в основном он вылетает при попытке использовать какие-либо внешние библиотеки. Есть идеи, в чем может быть проблема?

EDIT:

Вот мой файл манифеста:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.**.**">

    <uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" />

    <application
        android:name="io.flutter.app.FlutterApplication"
        android:icon="@mipmap/ic_launcher"
        android:label="**"
        android:requestLegacyExternalStorage="true">
        <activity
            android:name=".IncomingCallActivity"
            android:screenOrientation="portrait"
            android:theme="@style/NoActionBar" />
        <activity
            android:name=".TokboxActivity"
            android:label="Incoming Call"
            android:configChanges="orientation|screenSize|smallestScreenSize|screenLayout"
            android:supportsPictureInPicture="true"
            android:theme="@style/NoActionBar" />
        <activity
            android:name=".MainActivity"
            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
            android:hardwareAccelerated="true"
            android:launchMode="singleTop"
            android:theme="@style/LaunchTheme"
            android:windowSoftInputMode="adjustResize">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <!--
 Don't delete the meta-data below.
             This is used by the Flutter tool to generate GeneratedPluginRegistrant.java
        -->
        <meta-data
            android:name="flutterEmbedding"
            android:value="2" />

        <service
            android:name=".MessagingService"
            android:exported="false">
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT" />
            </intent-filter>
        </service>
    </application>

</manifest>

Ответы [ 2 ]

1 голос
/ 07 июня 2020

Читается: ClassNotFoundException: com.razorpay.G__G_, потому что вы запутали имя Activity. Добавьте это в свой файл конфигурации Android ProGuard / R8, чтобы сохранить все Activity имена классов:

-keep public class * extends android.app.Activity

Подробный вывод может показать еще несколько предупреждений, которые необходимо исправить:

-verbose

Для Flutter вам также могут понадобиться:

-keep class io.flutter.app.** { *; }
-keep class io.flutter.plugin.**  { *; }
-keep class io.flutter.util.**  { *; }
-keep class io.flutter.view.**  { *; }
-keep class io.flutter.**  { *; }
-keep class io.flutter.plugins.**  { *; }

Если вы ищете надежный источник, см. ProGuard manual или справочная карточка .

1 голос
/ 06 июня 2020

Кажется, когда вы используете flutter build apk, gradle не включает библиотеки, которые вы добавили в собранный apk.

Вам нужно сделать пару проверок:

  1. Проверьте, используете ли вы оптимизацию proguard и minifyEnabled true. Если да, попробуйте установить minifyEnabled false, иначе выполните вторую проверку
  2. Проверьте, используете ли вы ключевое слово implementation при добавлении зависимостей в ваш проект. Если да, попробуйте заменить его на api

Надеюсь, это поможет

...