AutojsPro插件开发流程

本文摘自AutojsPro官方文档,在一些细节部分作了补充!

插件SDK集成

  • 新建一个Android项目,在项目的build.gradle文件中添加:
    allprojects {
    repositories {
        // ...
        maven { url 'https://jitpack.io' }
    }
    }
  • 在具体模块(比如app)的build.gradle文件中添加:
    dependencies {
    // ...
    implementation 'com.github.hyb1996:Auto.js-Plugin-SDK:0.2'
    }

插件配置

  • 新建 MyPlugin 文件,继承于Plugin.

    package com.daowuya.ajplugin;
    import org.autojs.plugin.sdk.Plugin;
    public class MyPlugin extends Plugin {
    
    public MyPlugin(Context context, Context selfContext, Object runtime, Object topLevelScope) {
        super(context, selfContext, runtime, topLevelScope);
    }
    
    // 返回插件的JavaScript胶水层代码的assets目录路径
    @Override
    public String getAssetsScriptDir() {
        return "MyPluginEnrty";
    }
    
    // 插件public API,可被JavaScript代码调用
    public String getStringFromJava() {
        return "道无涯博客:www.daowuya.love";
    }
    }
  • 新增 MyPluginRegistry 文件,继承于PluginRegistry:

    package com.daowuya.ajplugin;
    import android.content.Context;
    import org.autojs.plugin.sdk.Plugin;
    import org.autojs.plugin.sdk.PluginLoader;
    import org.autojs.plugin.sdk.PluginRegistry;
    public class MyPluginRegistry extends PluginRegistry {
    
    static {
        // 注册默认插件
        registerDefaultPlugin(new PluginLoader() {
            @Override
            public Plugin load(Context context, Context selfContext, Object runtime, Object topLevelScope) {
                return new MyPlugin(context, selfContext, runtime, topLevelScope);
            }
        });
    }
    }
  • 在AndroidManifest.xml中配置以下meta-data, name为"org.autojs.plugin.sdk.registry",value为MyPluginRegistry的包名。
    <application
    ...>
    <meta-data
        android:name="org.autojs.plugin.sdk.registry"
        android:value="com.daowuya.ajplugin.MyPluginRegistry" />
    </application>

编写JavaScript胶水层

在assets的相应目录(由Plugin.getAssetsScriptDir返回,本例是 MyPluginEnrty )中添加index.js文件,用于作为胶水层导出插件API。

module.exports = function (plugin) {
    function plugins() {
    }

    plugins.getStringFromJava = function () {
    plugin.getStringFromJava();
    }

    return plugins;
}

在Auto.js Pro中调用

let ajplugin = $plugins.load("com.daowuya.ajplugin");
console.log(ajplugin.getStringFromJava());

关于开发出来的插件的混淆与加密的建议

  • 插件功能代码函数名不要直接明文显示,可以用随机字母或者特殊符号,例如ʾˏʿˊˊˊʽʻ来表示
  • index.js可以不用写的很详细,仅仅暴露插件总入口就行,具体函数在Autojs里引出,例如:
    plugins.openSqlite = function (path) {
    // 打开指定路径的 SQLite 数据库
    // 参数:
    //   - path: String, SQLite 数据库的文件路径
    // 返回: 数据库对象
    return plugin.ʾˏʿˊˊˊʽʻ(path);
    };
  • index.js胶水层代码可以用jsv6/v7混淆加密
  • 使用np管理器:控制流混淆8.0+APKVM保护

注:貌似不能dcc,会报错;也不能360加固,因为加固后接口就无法暴露了
如果你有更好的混淆或者加密建议,欢迎留言探讨!


作 者:道无涯
来 源:道无涯博客
链 接: https://www.daowuya.love/autojspro插件开发流程/
版 权 声 明:本博客所有文章除特别声明外,均采用CC BY-NC-SA 4.0许可协议。文章版权归作者所有,未经允许请勿转载!


暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇