Coder Social home page Coder Social logo

axbaseplugin's Introduction

Overview

AxbasePlugin是轻量级开源Android插件化开发框架。可实现在不重新安装的情况下动态更新应用。

Features

  • 完整解决方案,不止核心引擎
  • 非隔离式,宿主和插件间可自由通信
  • 非侵入式设计,插件和普通App代码编写方式无区别
  • 插件可作为独立App安装运行,便于测试和独立分发
  • 支持Service等四大组件,和.so文件
  • 支持assets目录中预置插件和网络下载方式
  • 不需要手动分配资源ID或者使用定制aapt打包
  • 最小化Hook系统私有API数量,运行更稳定
  • 插件库大小不到60k,极致体积

Source Code

  • 源码中axbaseCore为插件框架的核心代码。
  • axbaseHost为宿主Demo,axbasePlugin为插件Demo。
  • axbaseProtocl是宿主和插件通信的示例,可选。

Usage

在宿主AndroidMainifest.xml注册插件使用的组件:

<service android:name="info.axbase.app.UpdateService"/>
<activity android:name="info.axbase.plugin.ActivityStub"/>

在Application.onCreate(必须是Application的)中初始化。

PluginClient.init(this);

启动插件:

PluginClient.getInstance()
.launch("0729c758-3216-3c80-3113-0242ac110150(你新建项目获得的AppID)", MainActivity.this, false);

插件包[email protected](后面的@0指版本号)放入assets目录中。后续上传版本的版本会自动更新。

More

其他问题请提在Issues页

axbaseplugin's People

Contributors

bryant1410 avatar chunquedong avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

axbaseplugin's Issues

插件如何使用宿主程序的资源

目的:减小插件安装包的大小。
目前遇到的问题:jar文件可以通过provided方式在打包的时候不把jar文件打进apk中,但是如果是aar文件,里面包含了资源文件就不能通过provided方式。这样插件就有许多与宿主程序重复的文件,我想尽量减小apk的大小。
例如宿主程序使用了android的v7兼容包,插件也需要使用android的v7兼容包,为了减小插件的安装包的大小,插件就直接使用宿主程序的V7兼容包,请问如何在插件不包含v7兼容的资源的同时使用宿主的v7兼容包?

java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation

运行环境:android4.3 x86机型 asus zenfone6

05-31 11:51:03.417: E/AndroidRuntime(20369): java.lang.NoClassDefFoundError: info/axbase/appex/MainActivity$1
05-31 11:51:03.417: E/AndroidRuntime(20369): at info.axbase.appex.MainActivity.(MainActivity.java:18)
05-31 11:51:03.417: E/AndroidRuntime(20369): at java.lang.Class.newInstanceImpl(Native Method)
05-31 11:51:03.417: E/AndroidRuntime(20369): at java.lang.Class.newInstance(Class.java:1208)
05-31 11:51:03.417: E/AndroidRuntime(20369): at info.axbase.plugin.AxInstrumentation.newActivity(AxInstrumentation.java:56)
05-31 11:51:03.417: E/AndroidRuntime(20369): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2216)
05-31 11:51:03.417: E/AndroidRuntime(20369): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2396)
05-31 11:51:03.417: E/AndroidRuntime(20369): at android.app.ActivityThread.access$800(ActivityThread.java:139)
05-31 11:51:03.417: E/AndroidRuntime(20369): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1293)
05-31 11:51:03.417: E/AndroidRuntime(20369): at android.os.Handler.dispatchMessage(Handler.java:102)
05-31 11:51:03.417: E/AndroidRuntime(20369): at android.os.Looper.loop(Looper.java:149)
05-31 11:51:03.417: E/AndroidRuntime(20369): at android.app.ActivityThread.main(ActivityThread.java:5257)
05-31 11:51:03.417: E/AndroidRuntime(20369): at java.lang.reflect.Method.invokeNative(Native Method)
05-31 11:51:03.417: E/AndroidRuntime(20369): at java.lang.reflect.Method.invoke(Method.java:515)
05-31 11:51:03.417: E/AndroidRuntime(20369): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
05-31 11:51:03.417: E/AndroidRuntime(20369): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)
05-31 11:51:03.417: E/AndroidRuntime(20369): at dalvik.system.NativeStart.main(Native Method)
05-31 11:51:03.417: E/AndroidRuntime(20369): Caused by: java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation
05-31 11:51:03.417: E/AndroidRuntime(20369): at dalvik.system.DexFile.defineClassNative(Native Method)
05-31 11:51:03.417: E/AndroidRuntime(20369): at dalvik.system.DexFile.defineClass(DexFile.java:222)
05-31 11:51:03.417: E/AndroidRuntime(20369): at dalvik.system.DexFile.loadClassBinaryName(DexFile.java:215)
05-31 11:51:03.417: E/AndroidRuntime(20369): at dalvik.system.DexPathList.findClass(DexPathList.java:322)
05-31 11:51:03.417: E/AndroidRuntime(20369): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:54)
05-31 11:51:03.417: E/AndroidRuntime(20369): at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
05-31 11:51:03.417: E/AndroidRuntime(20369): at java.lang.ClassLoader.loadClass(ClassLoader.java:457)

插件如何与宿主程序共享资源文件

宿主程序和插件都需要使用到v7兼容包,我的想法是宿主持有v7兼容包,插件共享宿主的这个v7兼容包,但是实际上插件不只能共享宿主程序的代码,不能共享资源文件。请问有什么办法能共享资源文件?比如说主题文件或者图片文件

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.