Android开发使用Bmob遇到的问题和解决方案

最近有个任务,要使用Android连接Bmob,期间遇到很多问题,通过看各个博主的问题解决方案,总结了此文,就当作是自己的学习笔记吧。

1.官方推荐导入SDK是自动导入

appbuild.gradle文件中添加依赖文件

dependencies {
    implementation 'io.github.bmob:android-sdk:3.8.20'
    implementation 'io.reactivex.rxjava2:rxjava:2.2.8'
    implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
    implementation 'com.squareup.okhttp3:okhttp:4.8.1'
    implementation 'com.squareup.okio:okio:2.2.2'
    implementation 'com.google.code.gson:gson:2.8.5'
}

注:

[1]、v3.6.8-rc2开始,远程仓库中数据SDK包含了libbmob.so及自动更新组件所需要的资源文件。开发者再也不需要配置libbmob.so,不需要添加依赖jar,也不需要复制自动更新组件的资源文件啦,只需要添加以下依赖即可。

[2]、每个版本的im依赖特定版本的bmob-sdk:

  • bmob-im:1.1.8--->bmob-sdk:3.3.5
  • bmob-im:1.1.9--->bmob-sdk:3.4.3
  • bmob-im:2.0.1--->bmob-sdk:3.4.6-0304
  • bmob-im:2.0.2--->bmob-sdk:3.4.6-0304
  • bmob-im:2.0.3--->bmob-sdk:3.4.6
  • bmob-im:2.0.4--->bmob-sdk:3.4.6
  • bmob-im:2.0.5--->bmob-sdk:3.4.7-aar
  • bmob-im:2.0.6--->bmob-sdk:3.5.0

其中

  • bmob-sdk:3.4.6-0304是Bmob Android SDK的过渡版本,主要用于NewIM_v2.0.1及v2.0.2
  • bmob-sdk:3.4.6的相关依赖包可见注释[3]

[3]、bmob-sdk:3.4.6依赖以下包:

implementation 'cn.bmob.android:bmob-sdk:3.4.6'
implementation 'com.squareup.okhttp:okhttp:2.4.0'//CDN文件服务使用okhttp相关包进行文件的上传和下载(必填)
implementation 'com.squareup.okio:okio:1.4.0'

[4]、bmob-sms适用于只需要使用Bmob短信功能的开发者,而bmob-sdk内部包含了bmob-sms的短信功能,请不要重复添加。

[5]、BmobSDK的官方仓库:bmob-android-sdk,开发者可到此仓库查看最新发布的各版本SDK,我们会尽量与官网发布的SDK保持同步更新。

2.手动导入

        手动导入方法:在Bmob SDK下载中心下载数据服务 的Android 版本的SDK。

                 因为官网下载需要进GitHub,有些同学可能进不去,这里分享一下我的百度网盘,想要

                 官方SDK的可自取:

                 链接:https://pan.baidu.com/s/1Mc1p-PGU8pfdT3XlFvj8FA?pwd=r4so 
                 提取码:r4so 
--来自百度网盘超级会员V1的分享

        下载后,将本地导入SDK文件夹下的libs文件夹里的东西复制到项目工程里的libs目录下。

7a18538227d646a4b0905a51c134ee21.png

26620d594c3d428ca97e343f05e3ef2f.png

图上标记的androidx-core-1.0.0在导入后报错,报错信息全是关于androidx-core-1.0.0的,应该是跟已有的版本冲突了,所以不用导入这个。okio-2.1.0导入后未报错,但是在有bmob数据操作的activity会闪退,所以不能本地添加这个okio-2.1.0 jar包。详细信息将在后面给出。


3.导入成功以后,添加依赖

  1. appbuid.gradle文件中添加SO库目录配置:

    android {
        sourceSets {
            main.jniLibs.srcDirs = ['libs']
       }
    }
    
    
    
    //这里要注意,原因后文说
    dependencies {
        implementation 'com.squareup.okhttp3:okhttp:5.0.0-alpha.5'
        implementation 'com.squareup.okio:okio:3.0.0'
    }
  2. 点击Sync,同步配置。

4.配置AndroidManifest.xml

      在你的应用程序的AndroidManifest.xml文件中添加相应的权限:


<!--允许联网 -->
<uses-permission android:name="android.permission.INTERNET" />
<!--获取GSM(2g)、WCDMA(联通3g)等网络状态的信息  -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!--获取wifi网络状态的信息 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!--保持CPU 运转,屏幕和键盘灯有可能是关闭的,用于文件上传和下载 -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<!--获取sd卡写的权限,用于文件上传和下载-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!--允许读取手机状态 用于创建BmobInstallation-->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

<?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="cn.bmob.example"
        android:versionCode="1"
        android:versionName="1.0">

    <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17"/>

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme">
        <activity
            android:name="cn.bmob.example.MainActivity"
            android:screenOrientation="portrait"
            android:label="@string/app_name">

                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
    </application>
</manifest>

5.配置ContentProvider

<application>
···
<provider
    android:name="cn.bmob.v3.util.BmobContentProvider"
    android:authorities="你的应用包名.BmobContentProvider">
</provider>
···
</application>

6.初始化BmobSDK

在你应用程序启动的Application的onCreate()方法中初始化Bmob功能。代码如下所示:


       //提供以下两种方式进行初始化操作:

        //第一:默认初始化
        Bmob.initialize(this, "Your Application ID");
        // 注:自v3.5.2开始,数据sdk内部缝合了统计sdk,开发者无需额外集成,传渠道参数即可,不传默认没开启数据统计功能
        //Bmob.initialize(this, "Your Application ID","bmob");

        //第二:自v3.4.7版本开始,设置BmobConfig,允许设置请求超时时间、文件分片上传时每片的大小、文件的过期时间(单位为秒),
        //BmobConfig config =new BmobConfig.Builder(this)
        设置appkey
        //.setApplicationId("Your Application ID")
        请求超时时间(单位为秒):默认15s
        //.setConnectTimeout(30)
        文件分片上传时每片的大小(单位字节),默认512*1024
        //.setUploadBlockSize(1024*1024)
        文件的过期时间(单位为秒):默认1800s
        //.setFileExpiration(2500)
        //.build();
        //Bmob.initialize(config);

配置至此结束,接下来是我遇到的一些报错

①Lorg/reactivestreams/Publisher
解决办法:缺少reactive-streams.jar包

//在app的build.gradle中添加如下依赖
implementation “org.reactivestreams:reactive-streams:1.0.2”


②Failed resolution of: Lokhttp3/MediaType;
解决办法:okio这个包要通过implementation导入,不能本地导入

//在app的build.gradle中添加如下依赖
implementation 'com.squareup.okhttp3:okhttp:5.0.0-alpha.5'
implementation 'com.squareup.okio:okio:3.0.0'


————————————————
版权声明:本文引用了CSDN博主「little-cheng」的原创文章,原文链接:https://blog.csdn.net/m0_46356518/article/details/106483100,在此声明感谢!

猜你喜欢

转载自blog.csdn.net/Walch123/article/details/127758056