android集成保利威直播趟过的坑

项目背景:项目主要是由flutter开发的,并且已经集成了展示互动,打算再集成保利威。目前保利威最新版本是V0.13.1

坑1:当前demo支持targetSdkVersion 27版本及以下,而主项目中用到的版本是29,所以初步考虑是降低版本,也就是将项目中的androidx降为support v7包,经过一系列的尝试,发现展示互动module中用到的androidx是集成到jar包中的,无法降低。

坑2:尝试升级demo,demo的导入需要将demo转成module,这一步骤包括:

1、polyvapp/build.gradle文件,更改如下代码:

apply plugin: 'com.android.application' -> apply plugin: 'com.android.library'

defaultConfig {
	consumerProguardFiles 'proguard-rules.pro' -> 添加这行代码
	applicationId "com.easefun.polyv.cloudclassdemo" -> 注释/删除这行代码
}

//注释掉打包app用到的配置,例如:  需要将项项目中所有打包用到的配置都注释掉,包括signingConfigs之类的
android.applicationVariants.all { variant ->
    variant.outputs.all {
        outputFileName = "${variant.name}_${variant.versionName}_${currentTime()}.apk"
    }
}

2、polyvapp/src/main/AndroidManifest.xml文件,更改如下代码:

<!--删除application的属性配置,并注释程序入口-->
    <application>
        <activity
            android:name=".login.PolyvCloudClassLoginActivity"
            android:windowSoftInputMode="stateHidden|adjustResize">
<!--            <intent-filter>-->
<!--                <action android:name="android.intent.action.MAIN" />-->
<!--                <category android:name="android.intent.category.LAUNCHER" />-->
<!--            </intent-filter>-->
        </activity>
        ...
    </application>

3、该模块中的PolyvCloudClassApp.java文件中,将oncreate中的代码提取出来,封装成一个静态方法。供后续主项目初始化调用。

4、依赖模块修改:要将所有的v7包相关的库都改为androidx对应的库,详细参照:https://www.jianshu.com/p/5ff650460161

 这一步还是遇到了问题:

  • 展示互动module中和保利威module中都使用了B站的弹幕,一直提示冲突,将展示互动中的弹幕引用注释掉,放开保利威的引用:
//展示互动 注释掉
//    implementation files('libs/gensee_danmu.jar')

//保利威 api放开
  api 'com.easefun.polyv:polyvSDKCloudClass:0.14.0'
  • 将保利威的两个module合二为一,commonUI部分主要就是UI、工具类,合并起来也方便,将commonUI部分的代码,拷贝到保利威的app module中,将依赖库合并到一起,这样引起的冲突会少一些,最终依赖中的引用部分代码如下:
    dependencies {
        implementation fileTree(include: ['*.jar'], dir: 'libs')
        implementation 'androidx.appcompat:appcompat:1.1.0'
        implementation 'androidx.viewpager:viewpager:1.0.0'
        implementation 'androidx.constraintlayout:constraintlayout:2.0.0-alpha2'
    //    implementation ("com.android.support:multidex:1.0.3") {
    //        exclude group: 'com.android.support'
    //    }
        api 'com.easefun.polyv:polyvSDKCloudClass:0.14.0'
        implementation 'androidx.recyclerview:recyclerview:1.0.0'
        implementation 'androidx.multidex:multidex:2.0.0'
        testImplementation 'junit:junit:4.12'
        androidTestImplementation 'androidx.test:runner:1.1.0'
        androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0'
    
    
        implementation 'com.google.android.material:material:1.0.0'
        annotationProcessor 'androidx.annotation:annotation:1.0.0'
    
        implementation 'androidx.test.espresso:espresso-core:3.1.0'
    
        //glide
        implementation ('jp.wasabeef:glide-transformations:3.3.0'){
    //        exclude group:'com.github.bumptech.glide',module:'glide'
        }
        implementation ("com.github.bumptech.glide:okhttp3-integration:4.7.1"){
    //        exclude group:'com.github.bumptech.glide',module:'glide'
        }
        annotationProcessor 'com.github.bumptech.glide:compiler:4.8.0'
    }

    在这过程中要不断地clean项目,flutter总项目目录下删除buid并刷新重启。历经千辛万苦终于集成成功。

坑3: 集成完成后,需要初始化并且使用module,具体有以下几个问题:

  1. 保利威文档中要求在application中加入初始化代码,而flutter如何在原生中加入初始化代码,这个问题困扰了很久发现没法重写flutterApplication(作为菜鸟,目前还没有找到合适的方法),就把代码写到继承FlutterActivity()的子类的oncreate中,该类主要用来注册flutter和原生交互的方法,运行程序,进入直播页面,黑屏,打印的log显示内存溢出,这种情况一般是考虑是否初始化失败,于是,通过打断点发现,并没有走oncreate的方法,初始化失败,只能把代码放到了调用直播方法的实现类中,当然目前体验特别差,每次进入直播都要初始化一次,需要进一步优化。
  2. 再次运行程序,发现找不到module中的PolyvCloudClassHomeActivity类,该步需要将AndroidManifest.xml中引用的activity路径写完整,并且每个activity都要加上theme,最好是加载activity里 ,而不是application标签下,否则容易出现冲突的问题,具体代码如下:
            <activity
                android:name="com.easefun.polyv.cloudclassdemo.watch.PolyvCloudClassHomeActivity"
                android:configChanges="keyboardHidden|orientation|screenSize"
                android:theme="@style/Theme.AppCompat.Light.NoActionBar"
                android:windowSoftInputMode="stateHidden|adjustResize">
    
            </activity>

     

  3. 再次运行程序,提示无法启动PolyvCloudClassHomeActivity,仔细阅读log发现是布局中用的recycleView是v7包里的,通过快捷键command+shift+f(window是:ctrl+shift+f)搜索哪一个文件中用到v7包里的recycleView,都转成androidx包中的。再次运行程序,通过。

该项目经过几个回合,由于百利威官方还没有适配androidx,一直没有自信能集成成功,中途遇到bug多次想要放弃升级,在同事的耐心帮助下,最终集成完毕,所以说,没有解决不了的bug,只有不努力的程序员。未来的码农生涯中,需要多多修行,多改bug,做一个合格的码农。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值