flutter sharesdk 微信登录报错 SharesdkPlugin: platName null ====> {platform=22}

最近学习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
}

如果你只修改了第一步,有可能也会报错。


版权声明:本文为u014465652原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。