HbuilderX打包三方SDK日记(安卓)

      之前做了流媒体服务器,想用HbuilderX开发个APP,做直播推流,HB提供的插件LivePusher功能少了点,所以想到了FFMPEG。在这里打包的就是mobile-ffmpeg4.4版本。下面是工具传送门:

1.mobile-ffmpeg4.4的releases版本,用的是mini版aar文件,因为HB的云打包限制是40M。

2.android-studio-2020.3.1.22-windows.exe,采坑:低于这个版本构建的时候会报错,而且在新建moudle的时候无法创建,稍后还有不少坑,一个一个过。

3.HbuliderX,下个最新版本,没坑,简单。

4.HB的工程包(安卓的),里面有示例工程和SDK

准备工作做好了---------------------------------------------------------------------------------------------

一、android studio的工作

1.import Project

也就是我们上面准备的第四个

HbuilderX打包三方SDK日记(安卓)_第1张图片

2. 然后将下载的 FFMPEG的aar文件放入到:

app/libs下面

HbuilderX打包三方SDK日记(安卓)_第2张图片

 采坑:如果你没有看到 libs目录,需要以下操作:

HbuilderX打包三方SDK日记(安卓)_第3张图片

 3.创建新的moudle工程

HbuilderX打包三方SDK日记(安卓)_第4张图片

HbuilderX打包三方SDK日记(安卓)_第5张图片

 4.修改新建工程下的build.gradle

HbuilderX打包三方SDK日记(安卓)_第6张图片

 原文如下:

plugins {
    id 'com.android.library'
}

android {
    compileSdk 30

    defaultConfig {
        minSdk 16
        targetSdk 30
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        consumerProguardFiles "consumer-rules.pro"
    }

    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 'com.android.support:appcompat-v7:28.0.0'
    testImplementation 'junit:junit:4.+'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

修改为:

apply plugin: 'com.android.library'

android {
    compileSdkVersion 29
    defaultConfig {
        minSdkVersion 16
        targetSdkVersion 28

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

}

repositories {
    flatDir {
        dirs 'libs'
    }
}

dependencies {
    compileOnly fileTree(dir: 'libs', include: ['*.jar'])

    compileOnly fileTree(dir: '../app/libs', include: ['uniapp-v8-release.aar'])
    compileOnly fileTree(dir: '../app/libs', include: ['mobile-ffmpeg-min-4.4.LTS.aar'])

    compileOnly "com.android.support:recyclerview-v7:28.0.0"
    compileOnly "com.android.support:support-v4:28.0.0"
    compileOnly "com.android.support:appcompat-v7:28.0.0"
    implementation 'com.alibaba:fastjson:1.1.46.android'
    implementation 'com.facebook.fresco:fresco:1.13.0'
}

其实两个配置文件的主要差异就在dependencies 这里,HB要使用compileOnly 的方式引用三方包

HbuilderX打包三方SDK日记(安卓)_第7张图片

配置文件编写完了sync 同步下。这样接下来创建CLASS文件的引用就都有了,否则引用不到的。

HbuilderX打包三方SDK日记(安卓)_第8张图片

5. 创建UniMoudle文件

HbuilderX打包三方SDK日记(安卓)_第9张图片

相关FFMPEG的执行命令,在GITHUB上的DOC里都有,可以自行翻阅。 

package com.muearfm.hbffmpeg44min;

import com.arthenica.mobileffmpeg.ExecuteCallback;
import com.arthenica.mobileffmpeg.FFmpeg;

import io.dcloud.feature.uniapp.annotation.UniJSMethod;
import io.dcloud.feature.uniapp.bridge.UniJSCallback;
import io.dcloud.feature.uniapp.common.UniModule;

public class HBffmpeg44minModule  extends UniModule {
    //全局变量 执行ID
    public long executionId = 0;

    //同步执行
    @UniJSMethod(uiThread = true)
    public void FFexecute(String command, UniJSCallback callback) {
        if(callback != null) {
            //执行ffmpeg的命令行
            int backdata = FFmpeg.execute(command);
            //0 on successful execution, 255 on user cancel
            callback.invoke(backdata);
        }
    }
    //同步取消
    @UniJSMethod(uiThread = true)
    public void FFcancel() {
        FFmpeg.cancel();
    }
    //异步执行
    @UniJSMethod(uiThread = true)
    public void FFexecuteAsync(String command, UniJSCallback callback, ExecuteCallback executeCallback) {
        if(callback != null) {
            //执行ffmpeg的命令行
            executionId = FFmpeg.executeAsync(command,executeCallback);
            //0 on successful execution, 255 on user cancel
            callback.invoke(executionId);
        }
    }
    //异步取消
    @UniJSMethod(uiThread = true)
    public void FFcancel(long executionId) {
        FFmpeg.cancel(executionId);
    }
}

 6.修改dcloud_uniplugins.json文件,将插件加入,路径app/src/main/assets

HbuilderX打包三方SDK日记(安卓)_第10张图片

 HbuilderX打包三方SDK日记(安卓)_第11张图片

 name我是按照HB官方的命名要求写的,怕到时候引用错误。

{
      "plugins": [
        {
          "type": "module",
          "name": "muearfm-HBffmpeg44Modulemin",
          "class": "com.muearfm.hbffmpeg44.HBffmpeg44minModule"
        }
      ]
    }

7.打包aar

过坑A:Gradle的控制台找不到,在下图里

HbuilderX打包三方SDK日记(安卓)_第12张图片

对,就是左下角那个小方块。点击就出现了

过坑B:看不到task里的内容的时候,在设置里 关闭不编译

HbuilderX打包三方SDK日记(安卓)_第13张图片 

 

 现在可以 双击assemble进行编译了。

HbuilderX打包三方SDK日记(安卓)_第14张图片 8.组织HB所需要的插件包(只配置了安卓)

第一层:是主目录,一般用来标记版本号

第二层:插件名称,不加版本号

第三层:包涵android目录、IOS目录和package.json 

HbuilderX打包三方SDK日记(安卓)_第15张图片

 第四层:android目录包涵libs和刚才生成的aar

HbuilderX打包三方SDK日记(安卓)_第16张图片

第五层:libs目录包涵项目要引用的三方SDK

HbuilderX打包三方SDK日记(安卓)_第17张图片 

文件目录配置完了,放入文件,开始编辑package.json

{
	"name": "mobileffmpeg44min",
	"id": "muearfm-HBffmpeg44minModule",
	"version": "1.0.0",
	"description": "移动端FFMPEG4.4min同步",
	"_dp_type":"nativeplugin",
	"_dp_nativeplugin":{

		"android": {
			"plugins": [
				{
					"type": "module",
					"name": "muearfm-HBffmpeg44minModule",
					"class": "com.muearfm.hbffmpeg44min.HBffmpeg44minModule"
				}
			],
			"integrateType": "aar",
			"minSdkVersion" : 16
		}
	}
}

 选填参数没有,就不写。IOS没有也不写。参数说明参考官网

9.用HB加载插件

HbuilderX打包三方SDK日记(安卓)_第18张图片

 10.打包自定义基座(HB)

打包基座不超过40M,否则要本地打包,挺麻烦的。今天先写到这,我还没试好不好用。。。

略略略略略略略略略略略略......试验好了再写,

你可能感兴趣的:(HbuilderX打包三方SDK日记(安卓))