使用 build apk 命令构建的 Flutter 应用程序无法运行特定于平台的代码

Yah*_*man 6 android proguard flutter

我有一个 flutter 应用程序,它使用方法通道运行某些特定于平台的代码。此代码还通过 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
Run Code Online (Sandbox Code Playgroud)

这里 com.razorpay 是我正在使用的一个这样的外部库。对于其他库,我也遇到了同样的错误。所以基本上它在尝试使用任何外部库时会崩溃。知道可能是什么问题吗?

编辑:

这是我的清单文件:

<?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>
Run Code Online (Sandbox Code Playgroud)

小智 2

看来当你使用时flutter build apk,gradle不包含你在构建的apk中添加的库。

您需要进行几项检查:

  1. 检查您是否正在使用 proguard 优化和minifyEnabled true. 如果是,尝试设置minifyEnabled false,否则按照第二个检查
  2. implementation检查您在为项目添加依赖项时是否使用关键字。如果是,尝试更换为api

我希望这有帮助