最近学习flutter 加入第三方登录和分享功能,使用sharesdk在debug模式下可以正常微信登录,但是打release包后,无法登陆报错:SharesdkPlugin: platName null ====> {platform=22},这个问题困扰了好久,也询问了mob的技术支持,对方也排查了很久,最后只能让我自己按照demo排查,因为demo没有这个问题,后来一个一个排查各个配置文件后发现项目的setting.gradle文件中的内容和demo的不一样,自带的setting.gradle是项目生成时系统自己生成的,不适合flutter,最后把所有容易漏掉的地方记下,方便以后查找:
1、app下的build.gradle中的buildType需要添加ndk配置,代码如下:
buildTypes {
release {
ndk{
//这里其实我觉可以直接是用"armeabi-v7a",但国内几个大哥之前使用的都是"armeabi"
abiFilters "armeabi", "armeabi-v7a", "arm64-v8a","x86"
}
// TODO: Add your own signing config for the release build.
// Signing with the debug keys for now, so `flutter run --release` works.
signingConfig signingConfigs.release
shrinkResources false
debuggable false
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug{
ndk {
//这里要加上,否则debug包会出问题,后面三个为可选,x86建议加上不然部分模拟器回报错
abiFilters "armeabi", "armeabi-v7a", "arm64-v8a","x86"
}
debuggable true
minifyEnabled false
signingConfig signingConfigs.release
shrinkResources false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
建议release下的ndk写全,否则有些设备应用无法启动。
2、settings.gradle文件改为demo中的配置:
def flutterProjectRoot = rootProject.projectDir.parentFile.toPath()
def plugins = new Properties()
def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins')
if (pluginsFile.exists()) {
pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) }
}
注意:以下代码如果没有设置Flavor,请不要添加,不然编译报错:Gradle build failed to produce an .apk file. It‘s likely that this file was generated under XXX
plugins.each { name, path ->
def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile()
include ":$name"
project(":$name").projectDir = pluginDirectory
}
如果你只修改了第一步,有可能也会报错。