­

LiteAVSDK商业版6.6+,安卓动态加载so集成

  • 2019 年 11 月 20 日
  • 筆記

一、简介

以动态加载so的方式,集成LiteAVSDK商业版(安卓6.6+版本),是本篇文章的重点。

1、安卓端非商业版aar集成、jar集成参考官方集成文档    2、6.6之前的商业版,如何动态加载so,参考上一篇文章《LiteAVSDK集成,动态加载so库》。  其中提到动态加载so的方式中“优图实验室有如下特殊加载要求”,优图实验室在6.6版本上性能重构时,也修改了这个僵化的集成  方式。同时优化了可远程加载的P图资源,使本地集成时,只需要放入小部分资源文件,可进一步缩小apk体积。

二、动态加载so

1、下载sdk

以LiteAVSDK_Enterprise_Android_6.8.7959版本为示例,下载解压sdk如下图

1、商业版6.4之前的版本只支持armeabi架构。2019-05-15  2、商业版6.5增加支持armeabi-v7a架构。2019-06-12  3、商业版6.6增加支持arm64-v8a架构。2019-08-06  4、从商业版6.6开始,assets进行了分包,其中assets-static需要放到工程本地,assets-dynamic资源可以远程加载。

2、工具类的写法。

下载、解压、校验完整性的过程,由客户自己灵活完成,demo就不给出演示了。我们直接从复制动效so和P图资源到内部存储开始。

示例demo需要把armeabi-v7a下的so文件、assets-dynamic里面的资源文件,都复制到手机sd卡下的一个文件夹里面。

//FileUtils类  public static boolean copyFolder (String oldPath , String newPath){        File newFile = new File(newPath);        if(!newFile.exists()){          if(!newFile.mkdirs()){              Log.e("TAG","无法创建路径");              return  false;          }      }        File oldFile = new File(oldPath);        String[] files = oldFile.list();        Log.i("TAG", "files.length: "+files.length);        File temp;        for(String file : files){          if(oldPath.endsWith(File.separator)){              temp = new File(oldFile + file);          }else{              temp = new File(oldPath + File.separator + file);          }          if(temp.isDirectory()){              copyFolder(oldPath + "/"+file , newPath + "/" + file);          }else if(!temp.exists()){              Log.e("TAG", "copyFolder: oldFile not exist");              return  false;          }else if(!temp.isFile()){              Log.e("TAG", "copyFolder: oldFile not file");              return  false;          }else if(!temp.canRead()){              Log.e("TAG", "copyFolder: oldFile cannot read");              return false;          }else{              try {                  FileInputStream fileInputStream = new FileInputStream(temp);                  FileOutputStream fileOutputStream = new FileOutputStream(newPath + "/" +temp.getName());                  byte[] buffer = new byte[1024];                  int byteRead;                  while ((byteRead = fileInputStream.read(buffer))!=-1){                      fileOutputStream.write(buffer,0,byteRead);                  }                  fileInputStream.close();                  fileOutputStream.flush();                  fileOutputStream.close();                } catch (Exception e) {                  e.printStackTrace();              }                File fileile = new File(newPath + "/" +temp.getName());              fileile.setWritable(true);              fileile.setReadable(true);              fileile.setExecutable(true);          }        }      return  true ;  }

3、本地集成jar、assets-static

如下图,导入jar,把assets-static里面的资源文件,复制到工程默认的assets静态资源文件里面。

4、demo操作示例

如下图ListView,操作步骤:

①、点击copyFolder,复制粘贴so、assets-dynamic,从sd卡下复制到工程包名下的文件夹。复制成功返回true。

②、点击setLibraryPath,调用sdk接口动态加载so。

③、点击setLicence,设置动效Licence。这一步会下载校验licence,请保持网络通畅、给读写权限。

④、点击getSDKVersionStr,获取sdk版本号、获取licence信息,能正常获取,代表前4步都正常,接下来可以体验动效了。

//MainActivity    //下载so的外部存储目录,比如sd卡下的armeabi-v7a文件夹  oldFilePath = Environment.getExternalStorageDirectory().getPath()+"/armeabi-v7a";    //应用的根目录file文件下新建armeabi-v7a文件夹  newFilePath = getFilesDir().getAbsolutePath()+"/armeabi-v7a";    //复制到内存存储  FileUtils.copyFolder(oldFilePath, newFilePath)    //sdk接口动态加载so  TXLiveBase.setLibraryPath(newFilePath);    //初始化sdk,设置直播、短视频licence  TXLiveBase.setConsoleEnabled(true);  TXLiveBase.getInstance().setLicence(getApplicationContext(), licenceUrl, licenseKey);  TXUGCBase.getInstance().setLicence(getApplicationContext(), licenceUrl, licenseKey);      //获取sdk版本号  String sdkVersionStr = TXLiveBase.getSDKVersionStr();  //获取licence信息  String licenceInfo = TXUGCBase.getInstance().getLicenceInfo(getApplication());

5、验证

点击ListView的摄像头推流,进入推流页面,开启推流,体验高级美颜。

PituDemo直接引入集成视频云终端团队封装的module,module里面的直播、短视频等功能点、api写法,可以参考官网文档。

建议把高级美颜都体验一遍,尤其是人脸识别的大眼、瘦脸、头部挂件等特效,正常都ok的。如果动效crash,请对比PituDemo,重新集成。

至此算是全部完成了。

三、本地集成商业版jar+so+assets

如果不想用aar集成,也不需要远程加载so,只需要在工程本地集成jar,导入商业版资源文件时,有个地方需要注意:

通过上面可以了解到,6.6之后的版本,assets资源包被分包了,所以集成时不能简单的把assets-static、assets-dynamic里面的资源文件复制到工程的默认assets文件下,动效会无法识别资源。

正确的做法是把aar包改成zip后缀,然后解压,里面有一个完整的assets资源包,把里面文件全复制到工程assets文件夹下,就可以正常集成了

五、资源

相关文章:LiteAVSDK集成,动态加载so库

PituDemo下载