我在升级颤振SDK时遇到了一个问题。我以前使用1.9.x (下面没有问题)。现在我升级到v1.12.13 + hotfix.9或1.17.0来重现这个问题(我只试过这两个版本),问题如下:
现在我使用v1.17.0 SDK创建插件,然后在插件中使用反射调用方法。守则如下:
@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");
}
}个人类别如下:
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的部分代码如下所示
static Future<void> callMethod() async{
await _channel.invokeMethod("personName");
}
// The method is called when the button is clicked
await Flutterplugin17.callMethod();如果直接运行(单击按钮以在Android中运行),则可以正确调用反射方法.
使用Android打包发布版APK (版本)也没有问题。
构建->生成有符号绑定或APK
但是当我使用命令打包APK (release)时,此时无法调用插件中的反射方法。亚行日志如下:
打包命令:颤振构建apk发布

也存在上述问题发生的情况。当在插件中使用另一个库,而这个库被混淆时,如果调用这个模糊库中的方法,则会发生上述错误。。
颤栗医生:

我不知道为什么在使用flutter命令打包发行版APK时会出现这个问题,谢谢。
github存储库:17
我使用了以下三种方法来打包apk,然后在android中打开这些apk进行比较:



发布于 2020-05-10 07:00:25
我知道问题出在哪里。我使用的是AndroidStudio3.6,当您使用AndroidStudio3.4或Android插件3.4.0或更高版本时,文档表示,R8是默认的编译器
解决这一问题有两种方法:
将proguard-rules.pro文件添加到
project/app/proguard-rules.pro
第一个解决方案(不使用R8):
project/gradle.properties文件中,将此属性android.enableR8设置为false,如下所示:org.gradle.jvmargs=-Xmx1536M
android.enableR8=false
android.useAndroidX=true
android.enableJetifier=trueproject/app/proguard-rules.pro文件中,自定义代码以保持:-keep class com.lsl.flutterplugin17.* {*;}project/app/build.gradle文件中,按如下方式添加代码:android {
...
buildTypes {
release {
...
// add new line
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
...
}使用颤振命令flutter build apk --release打包,可以按以下方式解析dex文件:

第二个解决方案(使用R8):
1.在项目/app/proguard- file es.pro文件中,添加如下代码:
-dontobfuscate
-dontshrinkproject/app/build.gradle文件中,按如下方式添加代码:android {
...
buildTypes {
release {
...
// add new line
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
...
}使用颤振命令flutter build apk --release打包,可以按以下方式解析dex文件:

发布于 2020-05-09 22:53:07
也许你需要接受android许可才能构建一个发布版apk?
https://stackoverflow.com/questions/61699344
复制相似问题