Giter Club home page Giter Club logo

im_flutter_sdk's Introduction

环信即时通讯 im_flutter_sdk 快速入门

通过本文可以实现一个集成聊天 SDK 的简单 app。

实现原理

下图展示在客户端发送和接收一对一文本消息的工作流程。

如上图所示,发送和接收单聊消息的步骤如下:

  1. 客户端向你的应用服务器请求 Token,你的应用服务器返回 Token。
  2. 客户端 A 和客户端 B 使用获得的 Token 登录环信即时通讯系统。
  3. 客户端 A 发送消息到环信即时通讯服务器。
  4. 环信即时通讯服务器将消息发送到客户端 B,客户端 B 接收消息。

前提条件

如果你的目标平台是iOS,你需要满足一下要求:

  • Xcode 12.4 或以上版本,包括命令行工具;
  • iOS 10 或以上版本;
  • Android SDK API 等级 21 或以上版本;
  • Android Studio 4.0 或以上版本,包括 JDK 1.8 或以上版本;
  • CocoaPods 包管理工具;
  • Flutter 2.10 或以上版本;
  • Dart 2.16 或以上版本;

配置开发或者运行环境如果遇到问题,请参考这里

项目设置

使用命令创建项目

打开终端,进入需要创建项目的目录,输入命令进行 flutter create 项目创建:

flutter create quick_start

设置 Android

  1. 打开文件 quick_start/android/app/build.gradle 在文件最后添加:
android {
    defaultConfig {
        minSdkVersion 21
    }
}
  1. quick_start/android/app/proguard-rules.pro 中设置免混淆规则:
-keep class com.hyphenate.** {*;}
-dontwarn  com.hyphenate.**

设置 iOS

打开文件 quick_start/ios/Runner.xcodeproj,然后:

  1. 找到 TARGETS > Runner GeneralDeployment Info 中修改最低版本为 iOS 10.0

集成 SDK

在终端命令行,输入命令添加依赖:

cd quick_start
flutter pub add im_flutter_sdk
flutter pub get

添加示例代码

打开 quick_start/lib/main.dart 文件,引入头文件:

import 'package:flutter/material.dart';
import 'package:im_flutter_sdk/im_flutter_sdk.dart';

修改 _MyHomePageState 代码:

class _MyHomePageState extends State<MyHomePage> {
  ScrollController scrollController = ScrollController();
  String _username = "";
  String _password = "";
  String _messageContent = "";
  String _chatId = "";
  final List<String> _logText = [];

  @override
  void initState() {
    super.initState();
    _initSDK();
    _addChatListener();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Container(
        padding: const EdgeInsets.only(left: 10, right: 10),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.stretch,
          mainAxisSize: MainAxisSize.max,
          children: [
            TextField(
              decoration: const InputDecoration(hintText: "Enter username"),
              onChanged: (username) => _username = username,
            ),
            TextField(
              decoration: const InputDecoration(hintText: "Enter password"),
              onChanged: (password) => _password = password,
            ),
            const SizedBox(height: 10),
            Row(
              mainAxisAlignment: MainAxisAlignment.spaceEvenly,
              children: [
                Expanded(
                  flex: 1,
                  child: TextButton(
                    onPressed: _signIn,
                    child: const Text("SIGN IN"),
                    style: ButtonStyle(
                      foregroundColor: MaterialStateProperty.all(Colors.white),
                      backgroundColor:
                          MaterialStateProperty.all(Colors.lightBlue),
                    ),
                  ),
                ),
                const SizedBox(width: 10),
                Expanded(
                  child: TextButton(
                    onPressed: _signOut,
                    child: const Text("SIGN OUT"),
                    style: ButtonStyle(
                      foregroundColor: MaterialStateProperty.all(Colors.white),
                      backgroundColor:
                          MaterialStateProperty.all(Colors.lightBlue),
                    ),
                  ),
                ),
                const SizedBox(width: 10),
                Expanded(
                  child: TextButton(
                    onPressed: _signUp,
                    child: const Text("SIGN UP"),
                    style: ButtonStyle(
                      foregroundColor: MaterialStateProperty.all(Colors.white),
                      backgroundColor:
                          MaterialStateProperty.all(Colors.lightBlue),
                    ),
                  ),
                ),
              ],
            ),
            const SizedBox(height: 10),
            TextField(
              decoration: const InputDecoration(
                  hintText: "Enter recipient's user name"),
              onChanged: (chatId) => _chatId = chatId,
            ),
            TextField(
              decoration: const InputDecoration(hintText: "Enter message"),
              onChanged: (msg) => _messageContent = msg,
            ),
            const SizedBox(height: 10),
            TextButton(
              onPressed: _sendMessage,
              child: const Text("SEND TEXT"),
              style: ButtonStyle(
                foregroundColor: MaterialStateProperty.all(Colors.white),
                backgroundColor: MaterialStateProperty.all(Colors.lightBlue),
              ),
            ),
            Flexible(
              child: ListView.builder(
                controller: scrollController,
                itemBuilder: (_, index) {
                  return Text(_logText[index]);
                },
                itemCount: _logText.length,
              ),
            ),
          ],
        ),
      ),
    );
  }

  void _initSDK() async {
  }

  void _addChatListener() {
  }

  void _signIn() async {
  }

  void _signOut() async {
  }

  void _signUp() async {
  }

  void _sendMessage() async {
  }

  void _addLogToConsole(String log) {
    _logText.add(_timeString + ": " + log);
    setState(() {
      scrollController.jumpTo(scrollController.position.maxScrollExtent);
    });
  }

  String get _timeString {
    return DateTime.now().toString().split(".").first;
  }
}

初始化 SDK

_initSDK 方法中添加 SDK 初始化:

  void _initSDK() async {
    EMOptions options = EMOptions(
      appKey: "<#Your AppKey#>",
      autoLogin: false,
    );
    await EMClient.getInstance.init(options);
    // 通知sdk ui已经准备好,执行后才会收到`EMChatRoomEventHandler`, `EMContactEventHandler`, `EMGroupEventHandler` 回调。
    await EMClient.getInstance.startCallback();
  }

添加 注册环信Id 代码

Demo 中使用 sdk 注册环信id,在真实环境中,可以由你的后台调用环信rest api,

_signUp 方法中添加登录代码。

void _signUp() async {
  if (_username.isEmpty || _password.isEmpty) {
    _addLogToConsole("username or password is null");
    return;
  }

  try {
    _addLogToConsole("begin create account...");
    await EMClient.getInstance.createAccount(_username, _password);
    _addLogToConsole("create account succeed, username: $_username");
  } on EMError catch (e) {
    _addLogToConsole(
        "create account failed, code: ${e.code}, desc: ${e.description}");
  }
}

添加登录

_signIn 方法中添加登录代码。

void _signIn() async {
  if (_userId.isEmpty || _password.isEmpty) {
    _addLogToConsole("username or password is null");
    return;
  }

  try {
    await EMClient.getInstance.login(_userId, _password);
    _addLogToConsole("sign in succeed, username: $_userId");
  } on EMError catch (e) {
    _addLogToConsole("sign in failed, e: ${e.code} , ${e.description}");
  }
}

添加退出

_signOut 方法中添加退出代码。

  void _signOut() async {
    try {
      await EMClient.getInstance.logout(true);
      _addLogToConsole("sign out succeed");
    } on EMError catch (e) {
      _addLogToConsole(
          "sign out failed, code: ${e.code}, desc: ${e.description}");
    }
  }

添加发消息

_sendMessage 方法中添加发消息代码。

  void _sendMessage() async {
    if (_chatId.isEmpty || _messageContent.isEmpty) {
      _addLogToConsole("single chat id or message content is null");
      return;
    }

    var msg = EMMessage.createTxtSendMessage(
      targetId: _chatId,
      content: _messageContent,
    );

    EMClient.getInstance.chatManager.sendMessage(msg);
  }

添加收消息监听

_addChatListener 方法中添加代码。

void _addChatListener() {

  // 添加消息状态变更监听
  EMClient.getInstance.chatManager.addMessageEvent(
      // ChatMessageEvent 对应的 key。
        "UNIQUE_HANDLER_ID",
        ChatMessageEvent(
          onSuccess: (msgId, msg) {
            _addLogToConsole("send message succeed");
          },
          onProgress: (msgId, progress) {
            _addLogToConsole("send message succeed");
          },
          onError: (msgId, msg, error) {
            _addLogToConsole(
              "send message failed, code: ${error.code}, desc: ${error.description}",
            );
          },
        ));

  // 添加收消息监听
  EMClient.getInstance.chatManager.addEventHandler(
    // EMChatEventHandle 对应的 key。
    "UNIQUE_HANDLER_ID",
    EMChatEventHandler(
      onMessagesReceived: (messages) {
        for (var msg in messages) {
          switch (msg.body.type) {
            case MessageType.TXT:
              {
                EMTextMessageBody body = msg.body as EMTextMessageBody;
                _addLogToConsole(
                  "receive text message: ${body.content}, from: ${msg.from}",
                );
              }
              break;
            case MessageType.IMAGE:
              {
                _addLogToConsole(
                  "receive image message, from: ${msg.from}",
                );
              }
              break;
            case MessageType.VIDEO:
              {
                _addLogToConsole(
                  "receive video message, from: ${msg.from}",
                );
              }
              break;
            case MessageType.LOCATION:
              {
                _addLogToConsole(
                  "receive location message, from: ${msg.from}",
                );
              }
              break;
            case MessageType.VOICE:
              {
                _addLogToConsole(
                  "receive voice message, from: ${msg.from}",
                );
              }
              break;
            case MessageType.FILE:
              {
                _addLogToConsole(
                  "receive image message, from: ${msg.from}",
                );
              }
              break;
            case MessageType.CUSTOM:
              {
                _addLogToConsole(
                  "receive custom message, from: ${msg.from}",
                );
              }
              break;
            case MessageType.CMD:
              {
                // 当前回调中不会有 CMD 类型消息,CMD 类型消息通过 [EMChatEventHandler.onCmdMessagesReceived] 回调接收
              }
              break;
          }
        }
      },
    ),
  );
}

移除消息监听

dispose 方法中添加代码移除监听:

@override
void dispose() {
  EMClient.getInstance.chatManager.removeMessageEvent("UNIQUE_HANDLER_ID");
  EMClient.getInstance.chatManager.removeEventHandler("UNIQUE_HANDLER_ID");
  super.dispose();
}

运行项目

以 iOS 为例,首先打开模拟器,之后在终端输入。

flutter run

im_flutter_sdk's People

Contributors

apex-wang avatar bingo avatar csi0n avatar deng2573 avatar dujiepeng avatar flowkscai avatar fudonghai avatar ixre avatar jinliang04551 avatar wangxinjeff avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

im_flutter_sdk's Issues

项目集成sdk后release运行问题

项目集成sdk后,
debug版运行正常,但是release版直接就崩溃了

这里提示:

Fatal error in: ../../sdk/android/src/jni/jni_generator_helper.cc, line 32
last system error: 88
Check failed: !clazz.is_null()
org/webrtc/WebRtcClassLoader
libc : Fatal signal 6 (SIGABRT), code -6 in tid 21646 (pool-1-thread-1)

请问这个SDK有正确打入混淆吗?

Android模拟器无问题,真机报错.

模拟器上没发现问题,真机上报下面的错
报错信息

java.lang.NoClassDefFoundError: com.easemob.im_flutter_sdk.-$$Lambda$EMClientWrapper$1$SeaSvEeait43ywDFQFBC6P0n5MY
        at com.easemob.im_flutter_sdk.EMClientWrapper$1.onDisconnected(EMClientWrapper.java:99)
        at com.hyphenate.chat.EMClient$5.run(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
        at java.lang.Thread.run(Thread.java:833)

是我哪边配置有问题?

红米3S闪退问题

[ERROR:flutter/shell/platform/android/platform_view_android_jni.cc(39)] java.lang.NoClassDefFoundError: com.easemob.im_flutter_sdk.-$$Lambda$EMChatManagerWrapper$eNhSM1WljEr7G-ytqJ3k_Pe-H6o at com.easemob.im_flutter_sdk.EMChatManagerWrapper.getAllConversations(EMChatManagerWrapper.java:378) at com.easemob.im_flutter_sdk.EMChatManagerWrapper.onMethodCall(EMChatManagerWrapper.java:168) at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:231) at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:93) at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:642) at android.os.MessageQueue.nativePollOnce(Native Method) at android.os.MessageQueue.next(MessageQueue.java:323) at android.os.Looper.loop(Looper.java:141) at android.app.ActivityThread.main(ActivityThread.java:5613) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:774) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:652) 03-30 18:37:41.480 16632-16632/com.eslinks.digitalcampus A/flutter: [FATAL:flutter/shell/platform/android/platform_view_android_jni.cc(76)] Check failed: CheckException(env). 03-30 18:37:41.480 16632-16632/com.eslinks.digitalcampus A/libc: Fatal signal 6 (SIGABRT), code -6 in tid 16632 (T-connStch)

请尽快更新pub版本

用pub上的v1版本,首先会报minSdkVersion问题,改为19就可以了,接着还会报错,看图
image

换git拉取依赖的方式没问题。

文档稀碎就算了,起码得能用吧,估计开发人员是搞原生的吧,但是用flutter的人有多少会原生的,他们不懂配置问题,你们能不能写清楚点。看看隔壁融云,同样也是flutter版,要文档有文档,要回复有回复,要不是公司已经有业务在用,真想转了,唉~

IOS发送图片消息有问题,Android的没问题。

回调什么的都没有
去IOS那边断点看参数什么的都正常,
[EMClient.sharedClient.chatManager sendMessage:msg
progress:progress
completion:completion];
感觉是这个包有问题。
demo也有这问题

官方demo报错

用android studio运行im_flutter_sdk 报错:
The built failed likely due to AndroidX incompatibilities in a plugin. The tool is about to try using Jetfier to solve the incompatibility.
✏️ Creating android\settings_aar.gradle...
[!] Flutter tried to create the file android\settings_aar.gradle, but failed.
To manually update settings.gradle, follow these steps:

1. Copy `settings.gradle` as `settings_aar.gradle`
2. Remove the following code from `settings_aar.gradle`:

        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) }
        }

        plugins.each { name, path ->
            def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile()
            include ":$name"
            project(":$name").projectDir = pluginDirectory
        }

iOS 打包报错

Unexpected duplicate tasks:
1) Target 'im_flutter_sdk' (project 'Pods') has copy command from '/Users/double/.pub-cache/hosted/pub.flutter-io.cn/im_flutter_sdk-1.0.0/ios/Classes/Call/CallImgs/WaitAnimate/animate_00025.png' to '/Users/double/Library/Developer/Xcode/DerivedData/Runner-gumskeynoshhsebjnwmgnualtswt/Build/Products/Debug-iphoneos/im_flutter_sdk/im_flutter_sdk.framework/animate_00025.png'
2) Target 'im_flutter_sdk' (project 'Pods') has copy command from '/Users/double/.pub-cache/hosted/pub.flutter-io.cn/im_flutter_sdk-1.0.0/ios/Classes/Call/CallImgs/WaitAnimate/animate_00025.png' to '/Users/double/Library/Developer/Xcode/DerivedData/Runner-gumskeynoshhsebjnwmgnualtswt/Build/Products/Debug-iphoneos/im_flutter_sdk/im_flutter_sdk.framework/animate_00025.png'

Compress PNG Files Error Group

: While reading /Users/double/.pub-cache/git/im_flutter_sdk-24e6f4eaf3cc89a363051302fb4afeba1f94410a/ios/Classes/Call/CallImgs/WaitAnimate/animate_00080.png pngcrush caught libpng error:
/Users/double/.pub-cache/hosted/pub.flutter-io.cn/im_flutter_sdk-1.0.0/ios/Classes/Call/Helper/UIViewController+HUD.m:34:10: No visible @interface for 'MBProgressHUD' declares the selector 'show:'

消息列表方法实现问题

文档中明确说了不要移除或者增加元素:

  /**
   * Applies [f] to each key/value pair of the map.
   *
   * Calling `f` must not add or remove keys from the map.
   */

这个方法调用了 map.remove(k);

void _loadEMConversationList() async{
    int i = 0;
    sortMap.clear();
    conList.clear();
    Map map = await EMClient.getInstance().chatManager().getAllConversations();
    if(map.length == 0){
      _refreshUI();
    }
    map.forEach((k, v) async{
      var conversation = v as EMConversation;
      EMMessage message = await conversation.getLastMessage();
      if(message == null){
        map.remove(k);
        return ;
      }
      sortMap.putIfAbsent(message.msgTime,() => v);
      i++;
      if(i == map.length){
        _refreshUI();
      }
    });
  }

修改实现为:

void _loadConversationList() async {
    sortMap.clear();
    conList.clear();
    Map<String, EMConversation> map =
        await EMClient.getInstance().chatManager().getAllConversations();
    if (map.length == 0) {
      _refreshUI();
    } else {
      await Future.forEach(map.values, (EMConversation conversation) async {
        EMMessage message = await conversation.getLastMessage();
        if (message != null) {
          sortMap.putIfAbsent(message.msgTime, () => conversation);
        }
      });
      setState(() {});
    }

emoj

希望尽快有emoj功能,期待。

Android 登录成功之后闪退

/chuangding.sho(14525): Rejecting re-init on previously-failed class java.lang.Class<internal.org.apache.http.entity.mime.MultipartEntity>: java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/http/HttpEntity;
I/chuangding.sho(14525): at void com.hyphenate.chat.adapter.EMAChatClient.native_login(java.lang.String, java.lang.String, boolean, boolean, com.hyphenate.chat.adapter.EMAError) ((null):-2)
I/chuangding.sho(14525): at void com.hyphenate.chat.adapter.EMAChatClient.login(java.lang.String, java.lang.String, boolean, boolean, com.hyphenate.chat.adapter.EMAError) ((null):-1)
I/chuangding.sho(14525): at void com.hyphenate.chat.EMClient$7.run() ((null):-1)
I/chuangding.sho(14525): at void java.util.concurrent.ThreadPoolExecutor.runWorker(java.util.concurrent.ThreadPoolExecutor$Worker) (ThreadPoolExecutor.java:1167)
I/chuangding.sho(14525): at void java.util.concurrent.ThreadPoolExecutor$Worker.run() (ThreadPoolExecutor.java:641)
I/chuangding.sho(14525): at void java.lang.Thread.run() (Thread.java:764)
I/chuangding.sho(14525): Caused by: java.lang.ClassNotFoundException: Didn't find class "org.apache.http.HttpEntity" on path: DexPathList[[zip file "/data/app/com.chuangding.shop-eKGlimzoFgNKepCMQQ5VbA==/base.apk"],nativeLibraryDirectories=[/data/app/com.chuangding.shop-eKGlimzoFgNKepCMQQ5VbA==/lib/arm64, /data/app/com.chuangding.shop-eKGlimzoFgNKepCMQQ5VbA==/base.apk!/lib/arm64-v8a, /system/lib64, /system/product/lib64]]
I/chuangding.sho(14525): at java.lang.Class dalvik.system.BaseDexClassLoader.findClass(java.lang.String) (BaseDexClassLoader.java:134)
I/chuangding.sho(14525): at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String, boolean) (ClassLoader.java:379)
I/chuangding.sho(14525): at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String) (ClassLoader.java:312)
I/chuangding.sho(14525): at void com.hyphenate.chat.adapter.EMAChatClient.native_login(java.lang.String, java.lang.String, boolean, boolean, com.hyphenate.chat.adapter.EMAError) ((null):-2)
I/chuangding.sho(14525): at void com.hyphenate.chat.adapter.EMAChatClient.login(java.lang.String, java.lang.String, boolean, boolean, com.hyphenate.chat.adapter.EMAError) ((null):-1)

数据库报错

E/SQLiteDatabase(19857): Failed to open database '/storage/emulated/0/emlibs/libs/monitor.db'.
E/SQLiteDatabase(19857): android.database.sqlite.SQLiteException: not an error (code 0 SQLITE_OK): Could not open the database in read/write mode.
E/SQLiteDatabase(19857): at android.database.sqlite.SQLiteConnection.nativeOpen(Native Method)
E/SQLiteDatabase(19857): at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:219)
E/SQLiteDatabase(19857): at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:203)
E/SQLiteDatabase(19857): at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:503)
E/SQLiteDatabase(19857): at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:204)
E/SQLiteDatabase(19857): at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:196)
E/SQLiteDatabase(19857): at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:880)
E/SQLiteDatabase(19857): at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:865)
E/SQLiteDatabase(19857): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:739)
E/SQLiteDatabase(19857): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:729)
E/SQLiteDatabase(19857): at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:355)
E/SQLiteDatabase(19857): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:298)
E/SQLiteDatabase(19857): at com.hyphenate.chat.core.EMMonitorDB.b(Unknown Source:6)
E/SQLiteDatabase(19857): at com.hyphenate.chat.EMClient.logout(Unknown Source:128)
E/SQLiteDatabase(19857): at com.hyphenate.chat.EMClient.logout(Unknown Source:13)
E/SQLiteDatabase(19857): at com.hyphenate.chat.EMClient$3.run(Unknown Source:4)

example 例子无法运行

运行环境:
Android Studio (version 3.5)

Flutter (Channel stable, v1.12.13+hotfix.5, on Microsoft Windows [Version 10.0.18363.535], locale zh-CN)

D:\flutter_app\im_flutter_sdk\android\src\main\java\com\easemob\im_flutter_sdk\EMChatRoomManagerWrapper.java:3: ����: �����android.support.annotation������
import android.support.annotation.NonNull;
^
D:\flutter_app\im_flutter_sdk\android\src\main\java\com\easemob\im_flutter_sdk\EMChatRoomManagerWrapper.java:177: ����: �Ҳ�������
public void onMethodCall(@nonnull MethodCall methodCall, @nonnull MethodChannel.Result result) {
^
����: �� NonNull
�: �� EMChatRoomManagerWrapper
D:\flutter_app\im_flutter_sdk\android\src\main\java\com\easemob\im_flutter_sdk\EMChatRoomManagerWrapper.java:177: ����: �Ҳ�������
public void onMethodCall(@nonnull MethodCall methodCall, @nonnull MethodChannel.Result result) {
^
����: �� NonNull
�: �� EMChatRoomManagerWrapper
3 ������

FAILURE: Build failed with an exception.

  • What went wrong:
    Execution failed for task ':im_flutter_sdk:compileDebugJavaWithJavac'.

Compilation failed; see the compiler error output for details.

  • Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

  • Get more help at https://help.gradle.org

BUILD FAILED in 26s
The built failed likely due to AndroidX incompatibilities in a plugin. The tool is about to try using Jetfier to solve the incompatibility.

demo运行报错

Compiler message:
../../../../../../.pub-cache/hosted/pub.dartlang.org/cached_network_image-1.1.3/lib/src/cached_network_image_provider.dart:42:24: Error: The method 'CachedNetworkImageProvider.load' has fewer positional arguments than those of overridden method 'ImageProvider.load'.
ImageStreamCompleter load(CachedNetworkImageProvider key) {
^
../../../../../../flutter/packages/flutter/lib/src/painting/image_provider.dart:403:24: Context: This is the overridden method ('load').
ImageStreamCompleter load(T key, DecoderCallback decode);
^
Target kernel_snapshot failed: Exception: Errors during snapshot creation: null
Failed to build bundle.
Error launching application on iPhone 11 Pro Max.
Exited (sigterm)

Android 10 闪退

W/System.err( 6257): java.lang.NullPointerException: Attempt to write to field 'java.lang.String com.hyphenate.chat.EMContact.username' on a null object reference
W/System.err( 6257): at com.hyphenate.chat.EMSessionManager.clearLastLoginUser(Unknown Source:6)
W/System.err( 6257): at com.hyphenate.chat.EMClient.logout(Unknown Source:24)
W/System.err( 6257): at com.hyphenate.chat.EMClient.logout(Unknown Source:13)
W/System.err( 6257): at com.hyphenate.chat.EMClient$3.run(Unknown Source:4)
E/AndroidRuntime( 6257): FATAL EXCEPTION: Thread-2
E/AndroidRuntime( 6257): Process: com.chuangding.shop, PID: 6257
E/AndroidRuntime( 6257): java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.os.PowerManager$WakeLock.isHeld()' on a null object reference
E/AndroidRuntime( 6257): at com.hyphenate.chat.EMClient.logout(Unknown Source:43)
E/AndroidRuntime( 6257): at com.hyphenate.chat.EMClient.logout(Unknown Source:13)
E/AndroidRuntime( 6257): at com.hyphenate.chat.EMClient$3.run(Unknown Source:4)

安卓编译报错

/Users/lzz/Documents/projects/openSource/im_flutter_sdk/android/src/main/java/com/easemob/im_flutter_sdk/EMChatRoomManagerWrapper.java:3: 错误: 程序包android.support.annotation不存在
import android.support.annotation.NonNull;
^
/Users/lzz/Documents/projects/openSource/im_flutter_sdk/android/src/main/java/com/easemob/im_flutter_sdk/EMChatRoomManagerWrapper.java:177: 错误: 找不到符号
public void onMethodCall(@nonnull MethodCall methodCall, @nonnull MethodChannel.Result result) {
^
符号: 类 NonNull
位置: 类 EMChatRoomManagerWrapper
/Users/lzz/Documents/projects/openSource/im_flutter_sdk/android/src/main/java/com/easemob/im_flutter_sdk/EMChatRoomManagerWrapper.java:177: 错误: 找不到符号
public void onMethodCall(@nonnull MethodCall methodCall, @nonnull MethodChannel.Result result) {
^
符号: 类 NonNull
位置: 类 EMChatRoomManagerWrapper
3 个错误

项目下载下来 flutter run 报错了

执行 flutter run 报以下错误 什么问题啊?

Running "flutter pub get" in example... 0.9s

Launching lib/main.dart on iPhone 11 in debug mode...

Compiler message:
/usr/local/Cellar/flutter/.pub-cache/hosted/pub.flutter-io.cn/cached_network_image-1.1.1/lib/src/cached_network_image_provider.dart:42:24:
Error: The method 'CachedNetworkImageProvider.load' has fewer positional arguments than those of overridden method 'ImageProvider.load'.
ImageStreamCompleter load(CachedNetworkImageProvider key) {
^
/usr/local/Cellar/flutter/packages/flutter/lib/src/painting/image_provider.dart:403:24: Context: This is the overridden method ('load').
ImageStreamCompleter load(T key, DecoderCallback decode);
^
Target kernel_snapshot failed: Exception: Errors during snapshot creation: null
Failed to build bundle.
Error launching application on iPhone 11.

引入库后IOS和Android还需要单独设置什么?

登陆能成功。获取会话为空。用demo的Key和我们的Key都不行。用的IOS模拟器运行的。
Map map = await EMClient.getInstance().chatManager().getAllConversations();
print("map:$map");

输出:map:{}

大兄弟,你这异步线程直接更新UI啊

类EMClientWrapper:
有多处是直接子异步线程直接更新UI,下面以创建账号为例:
private void createAccount(Object args, Result result) {
new Thread(new Runnable() {
@OverRide
public void run() {
try {
JSONObject argMap = (JSONObject) args;
String userName = argMap.getString("userName");
String password = argMap.getString("password");
try {
EMClient.getInstance().createAccount(userName, password);
onSuccess(result);
} catch (HyphenateException e) {
onError(result, e);
}
}catch (JSONException e){
EMLog.e("JSONException", e.getMessage());
}
}
}).start();

}

Android R 闪退

E/linker ( 9924): library "/system/lib64/libsqlite.so" ("/system/lib64/libsqlite.so") needed or dlopened by "/apex/com.android.art/lib64/libnativeloader.so" is not accessible for the namespace: [name="classloader-namespace", ld_library_paths="", default_library_paths="/data/app/~~HN0j77CKjSilOMedejKk_g==/com.chuangding.shop-NcRL0JS5ZI72wXAPbB84WA==/lib/x86_64:/data/app/~~HN0j77CKjSilOMedejKk_g==/com.chuangding.shop-NcRL0JS5ZI72wXAPbB84WA==/base.apk!/lib/x86_64", permitted_paths="/data:/mnt/expand:/data/user/0/com.chuangding.shop"]
W/System.err( 9924): java.lang.UnsatisfiedLinkError: dlopen failed: "/data/user/0/com.chuangding.shop/app_lib/libsqlite.so" is for EM_AARCH64 (183) instead of EM_X86_64 (62)
W/System.err( 9924): at java.lang.Runtime.load0(Runtime.java:939)
W/System.err( 9924): at java.lang.System.load(System.java:1625)
W/System.err( 9924): at internal.com.getkeepsafe.relinker.SystemLibraryLoader.loadPath(Unknown Source:0)
W/System.err( 9924): at internal.com.getkeepsafe.relinker.ReLinkerInstance.loadLibraryInternal(Unknown Source:182)
W/System.err( 9924): at internal.com.getkeepsafe.relinker.ReLinkerInstance.loadLibrary(Unknown Source:21)
W/System.err( 9924): at internal.com.getkeepsafe.relinker.ReLinker.loadLibrary(Unknown Source:5)
W/System.err( 9924): at internal.com.getkeepsafe.relinker.ReLinker.loadLibrary(Unknown Source:1)
W/System.err( 9924): at com.hyphenate.chat.EMClient._loadLibrary(Unknown Source:2)
W/System.err( 9924): at com.hyphenate.chat.EMClient._loadLibrary(Unknown Source:1)
W/System.err( 9924): at com.hyphenate.chat.EMClient.loadLibrary(Unknown Source:7)
W/System.err( 9924): at com.hyphenate.chat.EMClient.init(Unknown Source:32)
W/System.err( 9924): at com.easemob.im_flutter_sdk.EMClientWrapper.init(EMClientWrapper.java:82)
W/System.err( 9924): at com.easemob.im_flutter_sdk.EMClientWrapper.onMethodCall(EMClientWrapper.java:45)
W/System.err( 9924): at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:226)
W/System.err( 9924): at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85)
W/System.err( 9924): at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:631)
W/System.err( 9924): at android.os.MessageQueue.nativePollOnce(Native Method)
W/System.err( 9924): at android.os.MessageQueue.next(MessageQueue.java:335)
W/System.err( 9924): at android.os.Looper.loop(Looper.java:183)
W/System.err( 9924): at android.app.ActivityThread.main(ActivityThread.java:7478)
W/System.err( 9924): at java.lang.reflect.Method.invoke(Native Method)
W/System.err( 9924): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:549)
W/System.err( 9924): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:941)
W/System.err( 9924): java.lang.UnsatisfiedLinkError: dlopen failed: "/data/user/0/com.chuangding.shop/app_lib/libhyphenate_av.so" is for EM_AARCH64 (183) instead of EM_X86_64 (62)
W/System.err( 9924): at java.lang.Runtime.load0(Runtime.java:939)
W/System.err( 9924): at java.lang.System.load(System.java:1625)
W/System.err( 9924): at internal.com.getkeepsafe.relinker.SystemLibraryLoader.loadPath(Unknown Source:0)
W/System.err( 9924): at internal.com.getkeepsafe.relinker.ReLinkerInstance.loadLibraryInternal(Unknown Source:182)
W/System.err( 9924): at internal.com.getkeepsafe.relinker.ReLinkerInstance.loadLibrary(Unknown Source:21)
W/System.err( 9924): at internal.com.getkeepsafe.relinker.ReLinker.loadLibrary(Unknown Source:5)
W/System.err( 9924): at internal.com.getkeepsafe.relinker.ReLinker.loadLibrary(Unknown Source:1)
W/System.err( 9924): at com.hyphenate.chat.EMClient._loadLibrary(Unknown Source:2)
W/System.err( 9924): at com.hyphenate.chat.EMClient._loadLibrary(Unknown Source:1)
W/System.err( 9924): at com.hyphenate.chat.EMClient.loadLibrary(Unknown Source:12)
W/System.err( 9924): at com.hyphenate.chat.EMClient.init(Unknown Source:32)
W/System.err( 9924): at com.easemob.im_flutter_sdk.EMClientWrapper.init(EMClientWrapper.java:82)
W/System.err( 9924): at com.easemob.im_flutter_sdk.EMClientWrapper.onMethodCall(EMClientWrapper.java:45)
W/System.err( 9924): at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:226)
W/System.err( 9924): at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85)
W/System.err( 9924): at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:631)
W/System.err( 9924): at android.os.MessageQueue.nativePollOnce(Native Method)
W/System.err( 9924): at android.os.MessageQueue.next(MessageQueue.java:335)
W/System.err( 9924): at android.os.Looper.loop(Looper.java:183)
W/System.err( 9924): at android.app.ActivityThread.main(ActivityThread.java:7478)
W/System.err( 9924): at java.lang.reflect.Method.invoke(Native Method)
W/System.err( 9924): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:549)
W/System.err( 9924): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:941)
E/flutter ( 9924): [ERROR:flutter/shell/platform/android/platform_view_android_jni.cc(39)] java.lang.UnsatisfiedLinkError: dlopen failed: "/data/user/0/com.chuangding.shop/app_lib/libhyphenate.so" is for EM_AARCH64 (183) instead of EM_X86_64 (62)
E/flutter ( 9924): at java.lang.Runtime.load0(Runtime.java:939)
E/flutter ( 9924): at java.lang.System.load(System.java:1625)
E/flutter ( 9924): at internal.com.getkeepsafe.relinker.SystemLibraryLoader.loadPath(Unknown Source:0)
E/flutter ( 9924): at internal.com.getkeepsafe.relinker.ReLinkerInstance.loadLibraryInternal(Unknown Source:182)
E/flutter ( 9924): at internal.com.getkeepsafe.relinker.ReLinkerInstance.loadLibrary(Unknown Source:21)
E/flutter ( 9924): at internal.com.getkeepsafe.relinker.ReLinker.loadLibrary(Unknown Source:5)
E/flutter ( 9924): at internal.com.getkeepsafe.relinker.ReLinker.loadLibrary(Unknown Source:1)
E/flutter ( 9924): at com.hyphenate.chat.EMClient.loadLibrary(Unknown Source:19)
E/flutter ( 9924): at com.hyphenate.chat.EMClient.init(Unknown Source:32)
E/flutter ( 9924): at com.easemob.im_flutter_sdk.EMClientWrapper.init(EMClientWrapper.java:82)
E/flutter ( 9924): at com.easemob.im_flutter_sdk.EMClientWrapper.onMethodCall(EMClientWrapper.java:45)
E/flutter ( 9924): at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:226)
E/flutter ( 9924): at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85)
E/flutter ( 9924): at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:631)
E/flutter ( 9924): at android.os.MessageQueue.nativePollOnce(Native Method)
E/flutter ( 9924): at android.os.MessageQueue.next(MessageQueue.java:335)
E/flutter ( 9924): at android.os.Looper.loop(Looper.java:183)
E/flutter ( 9924): at android.app.ActivityThread.main(ActivityThread.java:7478)
E/flutter ( 9924): at java.lang.reflect.Method.invoke(Native Method)
E/flutter ( 9924): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:549)
E/flutter ( 9924): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:941)
E/flutter ( 9924):
F/flutter ( 9924): [FATAL:flutter/shell/platform/android/platform_view_android_jni.cc(76)] Check failed: CheckException(env).
F/libc ( 9924): Fatal signal 6 (SIGABRT), code -1 (SI_QUEUE) in tid 9924 (chuangding.shop), pid 9924 (chuangding.shop)


Build fingerprint: 'google/sdk_gphone_x86_64_arm64/generic_x86_64_arm64:10/RPP4.200409.015/6455311:userdebug/dev-keys'
Revision: '0'
ABI: 'x86_64'
Timestamp: 2020-05-07 14:54:46+0800
pid: 9924, tid: 9924, name: chuangding.shop >>> com.chuangding.shop <<<
uid: 10150
signal 6 (SIGABRT), code -1 (SI_QUEUE), fault addr --------
Abort message: '[FATAL:flutter/shell/platform/android/platform_view_android_jni.cc(76)] Check failed: CheckException(env).
'
rax 0000000000000000 rbx 00000000000026c4 rcx 0000716567d32448 rdx 0000000000000006
r8 000071656b1527f0 r9 000071656b1527f0 r10 00007ffe7a1a7e00 r11 0000000000000246
r12 00007163950cd090 r13 0000716305149400 r14 00007ffe7a1a7df8 r15 00000000000026c4
rdi 00000000000026c4 rsi 00000000000026c4
rbp 0000000000000007 rsp 00007ffe7a1a7de8 rip 0000716567d32448
backtrace:
#00 pc 000000000005a448 /apex/com.android.runtime/lib64/bionic/libc.so (syscall+24) (BuildId: 0cb1ee2e4692086bd16b0cdb7620eb97)
#1 pc 000000000005d40d /apex/com.android.runtime/lib64/bionic/libc.so (abort+253) (BuildId: 0cb1ee2e4692086bd16b0cdb7620eb97)
#2 pc 0000000001321500 /data/app/~~HN0j77CKjSilOMedejKk_g==/com.chuangding.shop-NcRL0JS5ZI72wXAPbB84WA==/lib/x86_64/libflutter.so (BuildId: 4498407751d9a010c8f62a3312593ff498e6f294)
#3 pc 0000000001312b99 /data/app/~~HN0j77CKjSilOMedejKk_g==/com.chuangding.shop-NcRL0JS5ZI72wXAPbB84WA==/lib/x86_64/libflutter.so (BuildId: 4498407751d9a010c8f62a3312593ff498e6f294)
#4 pc 00000000013111b2 /data/app/~~HN0j77CKjSilOMedejKk_g==/com.chuangding.shop-NcRL0JS5ZI72wXAPbB84WA==/lib/x86_64/libflutter.so (BuildId: 4498407751d9a010c8f62a3312593ff498e6f294)
#5 pc 000000000135d7bc /data/app/~~HN0j77CKjSilOMedejKk_g==/com.chuangding.shop-NcRL0JS5ZI72wXAPbB84WA==/lib/x86_64/libflutter.so (BuildId: 4498407751d9a010c8f62a3312593ff498e6f294)
#6 pc 0000000001321d25 /data/app/~~HN0j77CKjSilOMedejKk_g==/com.chuangding.shop-NcRL0JS5ZI72wXAPbB84WA==/lib/x86_64/libflutter.so (BuildId: 4498407751d9a010c8f62a3312593ff498e6f294)
#7 pc 00000000013263ec /data/app/~~HN0j77CKjSilOMedejKk_g==/com.chuangding.shop-NcRL0JS5ZI72wXAPbB84WA==/lib/x86_64/libflutter.so (BuildId: 4498407751d9a010c8f62a3312593ff498e6f294)
#8 pc 000000000001aa35 /system/lib64/libutils.so (android::Looper::pollInner(int)+1077) (BuildId: 502415e63ca3248a666763b1ca2d59c3)
#9 pc 000000000001a59e /system/lib64/libutils.so (android::Looper::pollOnce(int, int*, int*, void**)+126) (BuildId: 502415e63ca3248a666763b1ca2d59c3)
#10 pc 0000000000127053 /system/lib64/libandroid_runtime.so (android::android_os_MessageQueue_nativePollOnce(_JNIEnv*, _jobject*, long, int)+35) (BuildId: bbfd6cd225dce70beef86960dce8af22)
#11 pc 0000000000234386 /system/framework/x86_64/boot-framework.oat (art_jni_trampoline+182) (BuildId: 7fc56639bfc361a01712408a01b6fb02a496391e)
#12 pc 0000000000178db4 /apex/com.android.art/lib64/libart.so (art_quick_invoke_stub+756) (BuildId: ac7d906af99fd99289c2ce2a1072cf3e)
#13 pc 000000000020cb56 /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+246) (BuildId: ac7d906af99fd99289c2ce2a1072cf3e)
#14 pc 00000000003ac005 /apex/com.android.art/lib64/libart.so (art::interpreter::ArtInterpreterToCompiledCodeBridge(art::Thread*, art::ArtMethod*, art::ShadowFrame*, unsigned short, art::JValue*)+357) (BuildId: ac7d906af99fd99289c2ce2a1072cf3e)
#15 pc 00000000003a06c1 /apex/com.android.art/lib64/libart.so (bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+1233) (BuildId: ac7d906af99fd99289c2ce2a1072cf3e)
#16 pc 0000000000791fc6 /apex/com.android.art/lib64/libart.so (MterpInvokeDirect+710) (BuildId: ac7d906af99fd99289c2ce2a1072cf3e)
#17 pc 0000000000163199 /apex/com.android.art/lib64/libart.so (mterp_op_invoke_direct+25) (BuildId: ac7d906af99fd99289c2ce2a1072cf3e)
#18 pc 0000000000392562 /system/framework/framework.jar (offset 0x927000) (android.os.MessageQueue.next+34)
#19 pc 000000000078f594 /apex/com.android.art/lib64/libart.so (MterpInvokeVirtual+2020) (BuildId: ac7d906af99fd99289c2ce2a1072cf3e)
#20 pc 0000000000163099 /apex/com.android.art/lib64/libart.so (mterp_op_invoke_virtual+25) (BuildId: ac7d906af99fd99289c2ce2a1072cf3e)
#21 pc 0000000000391918 /system/framework/framework.jar (offset 0x927000) (android.os.Looper.loop+156)
#22 pc 0000000000792ee7 /apex/com.android.art/lib64/libart.so (MterpInvokeStatic+1639) (BuildId: ac7d906af99fd99289c2ce2a1072cf3e)
#23 pc 0000000000163219 /apex/com.android.art/lib64/libart.so (mterp_op_invoke_static+25) (BuildId: ac7d906af99fd99289c2ce2a1072cf3e)
#24 pc 00000000001a1f3e /system/framework/framework.jar (android.app.ActivityThread.main+202)
#25 pc 0000000000396c1f /apex/com.android.art/lib64/libart.so (art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool, bool) (.llvm.13178773210012645589)+351) (BuildId: ac7d906af99fd99289c2ce2a1072cf3e)
#26 pc 000000000077a9c0 /apex/com.android.art/lib64/libart.so (artQuickToInterpreterBridge+1072) (BuildId: ac7d906af99fd99289c2ce2a1072cf3e)
#27 pc 000000000018434c /apex/com.android.art/lib64/libart.so (art_quick_to_interpreter_bridge+140) (BuildId: ac7d906af99fd99289c2ce2a1072cf3e)
#28 pc 0000000000179116 /apex/com.android.art/lib64/libart.so (art_quick_invoke_static_stub+806) (BuildId: ac7d906af99fd99289c2ce2a1072cf3e)
#29 pc 000000000020cb75 /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+277) (BuildId: ac7d906af99fd99289c2ce2a1072cf3e)
#30 pc 000000000062febe /apex/com.android.art/lib64/libart.so (art::InvokeMethod(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, _jobject*, _jobject*, unsigned long)+5678) (BuildId: ac7d906af99fd99289c2ce2a1072cf3e)
#31 pc 000000000058df18 /apex/com.android.art/lib64/libart.so (art::Method_invoke(_JNIEnv*, _jobject*, _jobject*, _jobjectArray*)+56) (BuildId: ac7d906af99fd99289c2ce2a1072cf3e)
#32 pc 000000000009afae /apex/com.android.art/javalib/x86_64/boot.oat (art_jni_trampoline+222) (BuildId: 0e283f9cac599f57d802a9843d949820fe1a2807)
#33 pc 0000000000178db4 /apex/com.android.art/lib64/libart.so (art_quick_invoke_stub+756) (BuildId: ac7d906af99fd99289c2ce2a1072cf3e)
#34 pc 000000000020cb56 /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+246) (BuildId: ac7d906af99fd99289c2ce2a1072cf3e)
#35 pc 00000000003ac005 /apex/com.android.art/lib64/libart.so (art::interpreter::ArtInterpreterToCompiledCodeBridge(art::Thread*, art::ArtMethod*, art::ShadowFrame*, unsigned short, art::JValue*)+357) (BuildId: ac7d906af99fd99289c2ce2a1072cf3e)
#36 pc 00000000003a06c1 /apex/com.android.art/lib64/libart.so (bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+1233) (BuildId: ac7d906af99fd99289c2ce2a1072cf3e)
#37 pc 000000000078f1c8 /apex/com.android.art/lib64/libart.so (MterpInvokeVirtual+1048) (BuildId: ac7d906af99fd99289c2ce2a1072cf3e)
#38 pc 0000000000163099 /apex/com.android.art/lib64/libart.so (mterp_op_invoke_virtual+25) (BuildId: ac7d906af99fd99289c2ce2a1072cf3e)
#39 pc 000000000044cf4a /system/framework/framework.jar (offset 0x1256000) (com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run+22)
#40 pc 0000000000396c1f /apex/com.android.art/lib64/libart.so (art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool, bool) (.llvm.13178773210012645589)+351) (BuildId: ac7d906af99fd99289c2ce2a1072cf3e)
#41 pc 000000000077a9c0 /apex/com.android.art/lib64/libart.so (artQuickToInterpreterBridge+1072) (BuildId: ac7d906af99fd99289c2ce2a1072cf3e)
#42 pc 000000000018434c /apex/com.android.art/lib64/libart.so (art_quick_to_interpreter_bridge+140) (BuildId: ac7d906af99fd99289c2ce2a1072cf3e)
#43 pc 000000000095b7f7 /system/framework/x86_64/boot-framework.oat (com.android.internal.os.ZygoteInit.main+2039) (BuildId: 7fc56639bfc361a01712408a01b6fb02a496391e)
#44 pc 0000000000179116 /apex/com.android.art/lib64/libart.so (art_quick_invoke_static_stub+806) (BuildId: ac7d906af99fd99289c2ce2a1072cf3e)
#45 pc 000000000020cb75 /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+277) (BuildId: ac7d906af99fd99289c2ce2a1072cf3e)
#46 pc 000000000062d5b7 /apex/com.android.art/lib64/libart.so (art::JValue art::InvokeWithVarArgsart::ArtMethod*(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, art::ArtMethod*, __va_list_tag*)+487) (BuildId: ac7d906af99fd99289c2ce2a1072cf3e)
#47 pc 00000000004e2c69 /apex/com.android.art/lib64/libart.so (art::JNI::CallStaticVoidMethodV(_JNIEnv*, _jclass*, _jmethodID*, __va_list_tag*)+665) (BuildId: ac7d906af99fd99289c2ce2a1072cf3e)
#48 pc 000000000041a390 /apex/com.android.art/lib64/libart.so (art::(anonymous namespace)::CheckJNI::CallMethodV(char const*, _JNIEnv*, _jobject*, _jclass*, _jmethodID*, __va_list_tag*, art::Primitive::Type, art::InvokeType)+2864) (BuildId: ac7d906af99fd99289c2ce2a1072cf3e)
#49 pc 00000000004090ae /apex/com.android.art/lib64/libart.so (art::(anonymous namespace)::CheckJNI::CallStaticVoidMethodV(_JNIEnv*, _jclass*, _jmethodID*, __va_list_tag*)+30) (BuildId: ac7d906af99fd99289c2ce2a1072cf3e)
#50 pc 00000000000afe68 /system/lib64/libandroid_runtime.so (_JNIEnv::CallStaticVoidMethod(_jclass*, _jmethodID*, ...)+168) (BuildId: bbfd6cd225dce70beef86960dce8af22)
#51 pc 00000000000b8401 /system/lib64/libandroid_runtime.so (android::AndroidRuntime::start(char const*, android::Vectorandroid::String8 const&, bool)+881) (BuildId: bbfd6cd225dce70beef86960dce8af22)
#52 pc 0000000000004190 /system/bin/app_process64 (main+1648) (BuildId: d6b2621fa9c788320535274f35331797)
#53 pc 0000000000050965 /apex/com.android.runtime/lib64/bionic/libc.so (__libc_init+117) (BuildId: 0cb1ee2e4692086bd16b0cdb7620eb97)
Lost connection to device.
Exited (sigterm)

iOS编辑报错

iOS编辑报错
一开始出现
image
我修改为1.0.0
重新pod install
出现
image

官方Demo报错

FAILURE: Build failed with an exception.

  • Where:
    Script 'C:\Users\lyy\FlutterGitSource\flutter\packages\flutter_tools\gradle\flutter.gradle' line: 362

  • What went wrong:
    A problem occurred configuring project ':shared_preferences_linux'.

Could not find method implementation() for arguments [project ':path_provider_linux'] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.

  • Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

  • Get more help at https://help.gradle.org

BUILD FAILED in 4s
Finished with error: Gradle task assembleDebug failed with exit code 1

Flutter端支持自定义消息吗?

已经上线的web相关端,都是通过自定义消息在收发。
看了看flutter端不支持自定义消息,自定义消息发过来,onMessageReceived的body都是null。

iOS真机(iphone7)编译报错, 无法启动Demo

用iphone7真机测试iOS Demo:

  1. flutter run
Running Xcode build...
Xcode build done.                                            1.7s
Failed to build iOS app
Error output from Xcode build:
↳
    2019-11-23 17:03:35.230 xcodebuild[8295:445290]  DTDeviceKit: deviceType
    from 6ac75d7ab8ba862d592f8f2155994e97b1a0d3fe was NULL
    ** BUILD FAILED **


Xcode's output:

    /Users/bingo/GitHub/easemob/im_flutter_sdk/ios/Classes/EMChatManagerWrapper.
    m:262:40: error: no known instance method for selector
    'loadMessagesWithKeyword:timestamp:count:fromUser:searchDirection:completion
    :'
        [EMClient.sharedClient.chatManager loadMessagesWithKeyword:keywords
                                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    1 error generated.

Could not build the precompiled application for the device.

Error launching application on iPhone7.

没有办法启动应用,请帮忙看下。

混合开发,如何集成到Module里?

目前module文件引入依赖后:

im_flutter_sdk:
        git:
            url: https://github.com/easemob/im_flutter_sdk.git
            ref: dev

flutter attach没问题,但是flutter build ios-framework会报错

图片

Android离线推送无法集成

作为非Android developer配置离线推送真的太难了

本身项目有推送需求 用的是MobPush
现在在Manifest中配置
<meta-data android:name="com.huawei.hms.client.appid" android:value="appid=102307921"/>
但是在执行过程中读取到的是 "102307921" 根据环信SDK的读取方法 既没有"="也不是Int 最终读到的值是0

W/Bundle: Key com.huawei.hms.client.appid expected Integer but value was a java.lang.String. The default value 0 was returned.

求助一下T.T

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.