[稳定]$plugin - 插件开发

我将教会你如何开发属于自己的apk插件,你可以在手机上开发,也可以使用电脑。 手机上开发,推荐使用AIDE进行安卓app的开发; 电脑端推荐使用AndroidStudio进行安卓app开发。

01.开发插件类

在你的项目中随便创建一个类,类名、包名都可随意,不过你需要遵守一个规则:那就是构造函数的参数类型,必须是(Activity,Context),除此以外,没有任何限制了。

package com.demo.test1;

import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;

import androidx.appcompat.app.AppCompatActivity;

public class MyPlugin {

    /**
     * 插件类必须有两个构造参数(或者无参构造,但是推荐写两个参数,以便于插件实现更多的功能)
     * <p>
     * 注意:这两个参数类型都不能变!
     *
     * @param parentActivity {Activity} 宿主软件的Activity (测试时可以用插件自己的Activity)
     * @param selfContext    {Context} 插件自己的Context
     */
    public MyPlugin(Activity parentActivity, Context selfContext) {
        //其实宿主软件的Activity是AppCompatActivity类型的,因此如果你想访问宿主软件的activity的主题等资源,可以这么做:
        if (parentActivity instanceof AppCompatActivity) {
            AppCompatActivity appCompatActivity = (AppCompatActivity) parentActivity;
            //获取宿主软件的主题(M3风格的主题)
            Resources.Theme theme = appCompatActivity.getTheme();
            //获取宿主软件的资源
            Resources resources = appCompatActivity.getResources();
        }
    }

    //插件被加载后,这个函数就可以被直接调用了
    public String getPluginName() {
        return "MyPlugin";
    }

    //你也可以继续写更多你想实现的方法
}

02.添加元数据

当你开发玩自己的插件类的时候,你需要把这个类显示声明在元数据中,否则宿主软件无法找到这个类。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <application android:label="我的插件" android:icon="@mipmap/ic_launcher">

        <!--
        在这里定义一个元数据
        名称(name)必须是:org.aigame.plugin.className
        值(value)是插件的全类名:当$plugin加载后会创建这个类的实例
        -->
        <meta-data android:name="org.aigame.plugin.className"
            android:value="com.demo.test1.MyPlugin" />

    </application>
</manifest>

03.安装与调用

你需要把开发好的插件apk安装到手机上,然后在宿主软件中使用$plugin来调用插件。

//1.加载插件
let obj = $plugin.load("com.demo.test1");
//2.调用插件类中的函数
obj.getPluginName();