Я столкнулся с проблемой при обновлении Flutter SDK. Раньше я использовал 1.9.x (ниже нет проблем). Теперь я обновляюсь до v1.12.13 + hotfix.9 или 1.17.0 , чтобы воспроизвести эту проблему (я пробовал только эти две версии), проблема заключается в следующем:
Теперь я использую v1.17.0 SDK для создания подключаемого модуля, а затем использую метод вызова отражения в подключаемом модуле. Код выглядит следующим образом:
Flutterplugin17Plugin. java
@Override
public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) {
if (call.method.equals("personName")) { // Reflection call method
person.execute(call.method);
result.success("success");
}
}
Класс Person выглядит следующим образом:
Person. java
public class Person {
private static final String TAG = "Person";
// This method will be called by reflection
public void personName() {
Log.e(TAG, "personName: call personName method....");
}
public void execute(String methodName) {
try {
Method method = Person.class.getDeclaredMethod(methodName);
method.invoke(Person.this);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Часть кода Flutter выглядит следующим образом:
flutterplugin17.dart
static Future<void> callMethod() async{
await _channel.invokeMethod("personName");
}
// The method is called when the button is clicked
await Flutterplugin17.callMethod();
Тогда, если он запускается напрямую (нажмите кнопку отладки, чтобы запустить в Android Studio), все в порядке, и метод отражения может быть правильно вызван.
Использование Android Studio для упаковки Выпустить APK (релиз) тоже не проблема.
Build -> Generate Signed Bundle or APK
Но когда я использую команду Flutter для упаковать APK (релиз), метод отражения в плагине сейчас не может быть вызван. adb logcat выглядит следующим образом:
Команды упаковки: flutter build apk --release
Есть также ситуация, когда возникает вышеуказанная проблема. Когда в плагине используется другая библиотека, и эта библиотека запутана, на этот раз при вызове метода в этой обфусцированной библиотеке произойдет указанная выше ошибка.
flutter doctor:
Я не знаю, почему эта проблема возникает при использовании команды flutter для упаковки релизного APK, спасибо.
репозиторий github : https://github.com/liusilong/flutter_plugin_17
Я использовал следующие три способа упаковки apk, а затем открыл эти apk в студии android для сравнения:
- Версия флаттера: 1.17 , упакованный с Android studio (Build -> Generate Signed Bundle или APK), файл dex анализируется следующим образом:
Версия флаттера -
1.17 , упакована с командами Flutter (сборка flutter apk --release), dex-файл анализируется следующим образом:
Версия flutter:
1.9.1 + hotfix.6 , упакована с командами Flutter (flutter build apk --release), dex-файл анализируется следующим образом: