zoukankan      html  css  js  c++  java
  • Android Studio最新版环信SDK集成实例

    Android Studio最新版环信SDK完美集成实例(重要)

     

    Android Studio最新版环信SDK完美集成实例

    tags:环信集成
     

    1 前言

    最近看到有人在找android集成环信SDK的问题,我将最新版的环信SDK和最新的android进行了集成,最多的总是因为尽管最新的easeui还是采用的V4包。而现在新版的Androi Studio新版已经不在使用V4,V7这些包,统一采用了一个叫作 'androidx.appcompat:appcompat:1.1.0’的包。需要在集成过程中修改easeui的各种依赖关系。
    现详细记录如下:
     

    2 开发环境

    2.1 Android Studio

    Android Studio版本:3.5.2 查看地方:build.gradle(prouect:你的工程名称)如果你的Android Studio是新新版本的,新建的工程在build.gradle(prouect:你的工程名称)中的以下代码都是正常的。和你的Android Studio一样。
    本人在中文社区下载的,版本是:
    android-studio-ide-191.5977832-windows.exe这个版本
     dependencies {
            classpath 'com.android.tools.build:gradle:3.5.2'
            
            // NOTE: Do not place your application dependencies here; they belong
            // in the individual module build.gradle files
        }
     

    2.2 环信SDK版本:

    版本 V3.7.1 直接从官网下载的最新版本。
     

    3 集成过程

    3.1 新一个工程

    工程名称ImDemo,按一般新建一个空Activity的工程进行新建。

    3.2 修Activity继承

    主要修改继承,由这个代码public class MainActivity extends AppCompatActivity改为public class MainActivity extends Activity,修改后的代码为:
     package cn.plczl.imdoem;
    
     import android.app.Activity;
     import android.os.Bundle;
     public class MainActivity extends Activity {
         @Override
         protected void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
             setContentView(R.layout.activity_main);
         }
    }
     

    3.3 导入easeUI SDK

    采用Android Studio的File–>Import Module…方式导入easeUI。如下图:
     
    注意不要导入simpledemo !
     
    在Impor Module from Source界面根据你选择导入的文件,可能会出现以下两个结果;如果出现第二个图,将simpledemo后的Import钩去掉。
     
     

    3.4 修改build.gradle(Module:easeui)文件

    修改build.gradle(Module:easeui)文件中的版本与build.gradle(Module:app)一致,比如最新下载的build.gradle(Module:easeui)中版本号是28,28.0.3等。修改为我我的最新版的Android的版本号是29,29.0.3等。反正就是这两个文件的各compileSdkVersion、buildToolsVersion版本修改为一样的。
    android {
        compileSdkVersion 28
        buildToolsVersion '28.0.3'
    
        defaultConfig {
            minSdkVersion 16
            targetSdkVersion 28
    
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    改为与app的build.gradle(Module:app)
    android {
        compileSdkVersion 29
        buildToolsVersion "29.0.3"
        defaultConfig {
            applicationId "cn.plczl.im"
            minSdkVersion 19
            targetSdkVersion 29
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        }
    修改好后进行同步。
     

    3.5 修改工程清单文件修改

    • 一是在工程清单文件中加入必要的权限,该权限在环信管网上有详细说明,
    • 二是在工程清单文件中加入环信的应用的AppKey和SDK所需的service SDK核心功能所需配置,这个也在环信官网的Android SDK 介绍及导入中有详细介绍,地址为:http://docs-im.easemob.com/im/android/sdk/import
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="cn.plczl.imdoem">
        <uses-permission android:name="android.permission.VIBRATE" />
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.RECORD_AUDIO" />
        <uses-permission android:name="android.permission.CAMERA" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
        <uses-permission android:name="android.permission.GET_TASKS" />
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
        <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
        <uses-permission android:name="android.permission.WAKE_LOCK" />
        <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
        <uses-permission android:name="android.permission.READ_PHONE_STATE" />
        <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    
        <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
            <activity android:name=".MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    
            <!-- 设置环信应用的AppKey -->
            <meta-data android:name="EASEMOB_APPKEY"  android:value="XXXXXXXXXX" />
            <!-- 声明SDK所需的service SDK核心功能-->
            <service android:name="com.hyphenate.chat.EMChatService" android:exported="true"/>
            <service android:name="com.hyphenate.chat.EMJobService"
                android:permission="android.permission.BIND_JOB_SERVICE"
                android:exported="true" />
            <!-- 声明SDK所需的receiver -->
            <receiver android:name="com.hyphenate.chat.EMMonitorReceiver">
                <intent-filter>
                    <action android:name="android.intent.action.PACKAGE_REMOVED"/>
                    <data android:scheme="package"/>
                </intent-filter>
                <!-- 可选filter -->
                <intent-filter>
                    <action android:name="android.intent.action.BOOT_COMPLETED"/>
                    <action android:name="android.intent.action.USER_PRESENT" />
                </intent-filter>
            </receiver>
        </application>
    
    </manifest>
     

    3.6 新建一个IMApplication类,用于初始化

    package cn.plczl.imdoem;
    
    import android.app.Application;
    import com.hyphenate.chat.EMOptions;
    import com.hyphenate.easeui.EaseUI;
    
    public class IMApplication extends Application {
        @Override
        public void onCreate() {
            super.onCreate();
    
            //初始化EaseUI
            EMOptions options=new EMOptions();
            options.setAcceptInvitationAlways(false);
            options.setAutoAcceptGroupInvitation(false);
            EaseUI.getInstance().init(this,options);
    
        }
    }
     

    3.7 将IMApplication配置到清单文件中

    将3.6步中新建的IMApplication类,写入清单文件AndroidManifest中:android:name=".IMApplication"
    <application
            android:name=".IMApplication"
            android:allowBackup="true"
     

    4 重点(处理错误信息)

    目前可以点编译,看错误信息进行处理,第一次编译出现如下错误。

     处理步骤如下,大概有11个文件需要修改。

     

    4.1esceui升级V4包。

    上点右键–>Refactor–>Migate to AndroidX

    去掉钩不用备份,后点Migate

     点击Do Refactor,这样处理就将原来使用的V4包升级到最新的AndroidX。在build.gradle(Module:app)可以看到。原来的V4包变为了最新的api 'androidx.appcompat:appcompat:1.0.0’包。

    4.2 代码修改。

    这次主要处理升级V4后需要改一些代码。每修改一处点击一下编译按纽,会自动跳到下一个需要修改处,你的顺序和我可能不一致,但应将所有的错误进行修改,主要是升级V4包后所有的import文件作相应的修改,所有继承也要改到AndroidX下来。
     
    4.2.1 EaseBaseActivity

     定位到这个文件EaseBaseActivity:

    在public class EaseBaseActivity extends FragmentActivity这点command+enter(mac系统,windows系统是Ctrl+enter)选择报错的import v4下的class,把它删掉,再import androidx.core.app.FragmentActivity;(注意是先删除报错的v4包,在导入androidx包下的
    继续点编译
    4.2.2 EaseBaseFragment

    EaseBaseFragment文件,

    public abstract class EaseBaseFragment extends Fragment点command+enter(mac系统,windows系统是Ctrl+enter)选择报错的import v4下的class,删除这行代码,再import androidx.core.app.Fragment;
    继续点编译
     
    4.2.3 EaseChatFragment

    EaseChatFragment

    第112行代码protected SwipeRefreshLayout swipeRefreshLayout;红色上点command+enter(mac系统,windows系统是Ctrl+enter)选择import class,
    删除以下两行代码
    mport androidx.core.widget.SwipeRefreshLayout;
    import androidx.core.widget.SwipeRefreshLayout.OnRefreshListener;
    第228行代码:swipeRefreshLayout = messageList.getSwipeRefreshLayout();
    如上图有红波浪线,光标在上点点command+enter(mac系统,windows系统是Ctrl+enter)选择选择第3行加车
     
    第484行swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener()红色上点command+enter(mac系统,windows系统是Ctrl+enter)选择import class,
     
    4.2.4 EaseChatMessageList
    EaseChatMessageList
    删掉第5行代码:import androidx.core.widget.SwipeRefreshLayout;
     
    4.2.5 EaseDingMessageHelper
    删掉5,6行代码:
    import android.support.annotation.NonNull;
    import android.support.annotation.Nullable;
    import android.support.annotation.Nullable;
     
    4.2.6 EaseImageView
    第78行代码的public class EaseImageView extends android.support.v7.widget.AppCompatImageView
    改为public class EaseImageView extends AppCompatImageView
    系统会自动导入import androidx.appcompat.widget.AppCompatImageView;这个包含文件。
     
    4.2.7 EaseEmojiconPagerView
    public class EaseEmojiconPagerView extends ViewPager点command+enter(mac系统,windows系统是Ctrl+enter)选择import class,
    删除7,8行代码:
    import androidx.core.view.PagerAdapter;
    import androidx.core.view.ViewPager;
    第29行代码private PagerAdapter  pagerAdapter;点command+enter(mac系统,windows系统是Ctrl+enter)选择import class,
    第76行代码:pagerAdapter = new EmojiconPagerAdapter(viewpages);光标放在pagerAdapter上红波浪线的代码上点command+enter(mac系统,windows系统是Ctrl+enter)选择第二行回车,
     
    4.2.8 EmojiconPagerAdapter
    public class EmojiconPagerAdapter extends PagerAdapter 点command+enter(mac系统,windows系统是Ctrl+enter)选择import class,
    第30行代码((ViewPager) arg0).addView(views.get(arg1));点command+enter(mac系统,windows系统是Ctrl+enter)选择import class,
     
    4.2.9 EaseExpressionPagerAdapter
    public class EaseExpressionPagerAdapter extends PagerAdapter 点command+enter(mac系统,windows系统是Ctrl+enter)选择import class,
    删除上面报红的包含文件。
     
    4.2.10 EaseImageCache
    cache = new LruCache<string, bitmap="">((int) (Runtime.ge点command+enter(mac系统,windows系统是Ctrl+enter)选择import class,
    删除上面报红的包含文件。
     
    4.2.11 EaseDingMessageHelper
    第82行 public void setUserUpdateListener(EMMessage msg, @Nullable IAckUserUpdateListener listener)红字上点command+enter(mac系统,windows系统是Ctrl+enter)选择import class,
     
    4.2.12 EaseImageView
    第56行红字上点点command+enter(mac系统,windows系统是Ctrl+enter)选择import class,
     

    5 编译通过

    经过以上的代码修改,所有文件均无告警和错误后编译应该通过。然后点击支行按纽看效果,发现点击运行后报如果错误。

    5.1 --min-api 24错误

    文件修改完毕后再次编译,报Default interface methods are only supported starting with Android N (–min-api 24): void com.hyphenate.EMConferenceListener.onAttributesUpdated(com.hyphenate.chat.EMConferenceAttribute[])错误。
     

    5.2 处理办法

    处理方法是在build.gradle(Module:app)文件的android分支中下插出以下三行代码并同步。
    compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8
        }
     

    5.3 完整的build.gradle(Module:app)文件

    插入后完整的build.gradle(Module:app)文件如下
    apply plugin: 'com.android.application'
    
    android {
        compileSdkVersion 29
        buildToolsVersion "29.0.3"
        defaultConfig {
            applicationId "cn.plczl.imdoem"
            minSdkVersion 19
            targetSdkVersion 29
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            }
        }
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8
        }
    }
    
    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        implementation 'androidx.appcompat:appcompat:1.1.0'
        implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
        testImplementation 'junit:junit:4.12'
        androidTestImplementation 'androidx.test.ext:junit:1.1.1'
        androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
        implementation project(path: ':easeui')
    }

     编译运行

    点击运行。完美无错误,无告警的运行起来了。

     本人仓库地址供参考:https://gitee.com/xieh-gitee/TuTuIM

     
  • 相关阅读:
    获取SqlServer2005表结构
    SQL SERVER 2005连接其它数据库并导入数据表
    vs2008安装失败问题
    Elmah使用方法
    使用postman发送请求,body为空
    docker的简单使用
    mongodb5最新版本的安装和向外暴露端口
    初探gin框架
    img图片的src指定为网络中随便找的图片链接,但是控制台报错get请求403
    父元素为flex布局时,设置最后一个子元素靠右,其他靠左
  • 原文地址:https://www.cnblogs.com/xiejn/p/13750493.html
Copyright © 2011-2022 走看看