精华内容
下载资源
问答
  • java插件化开发

    千次阅读 2018-11-12 15:09:27
    我开始想一想什么是java常用的插件化开发、在我的印象中jpa等算是一种吧,那么接下来我们将开始总结一下java开发有哪些插件。 一、Small 一个小框架,将应用程序分成小部分 地址: http://code.wequick.net/Small...

    1、题记
    今天有人在群里询问:
    在这里插入图片描述
    我开始想一想什么是java常用的插件化开发、在我的印象中jpa等算是一种吧,那么接下来我们将开始总结一下java开发有哪些插件。
    一、Small
    一个小框架,将应用程序分成小部分
    地址: http://code.wequick.net/Small
    二、pf4j
    PF4J 是一个 Java 的插件框架,为第三方提供应用扩展的渠道。使用 PF4J 你可以轻松将一个普通的 Java 应用转成一个模块化的应用。PF4J 本身非常轻量级,只有 50KB 左右,目前只依赖了 slf4j。Gitblit 项目使用的就是 PF4J 进行插件
    地址:https://gitee.com/xgcl_wcl/pf4j
    三、Atlas
    强大的Android动态组件框架。
    地址:https://github.com/alibaba/atlas
    四、Replugin
    RePlugin - 灵活,稳定,易用的Android插件框架
    地址:https://github.com/Qihoo360/RePlugin
    五、VirtualAPK
    适用于Android的功能强大且轻量级的插件框架
    地址:https://github.com/didi/VirtualAPK
    六、待续…

    展开全文
  • Android组件化和插件化开发

    千次阅读 2016-07-01 11:26:46
    Android组件化和插件化开发什么是组件化和插件化?组件化开发就是将一个app分成多个模块,每个模块都是一个组件(Module),开发的过程中我们可以让这些组件相互依赖或者单独调试部分组件等,但是最终发布的时候是将...

    Android组件化和插件化开发

    什么是组件化和插件化?

    组件化和插件化

    组件化开发就是将一个app分成多个模块,每个模块都是一个组件(Module),开发的过程中我们可以让这些组件相互依赖或者单独调试部分组件等,但是最终发布的时候是将这些组件合并统一成一个apk,这就是组件化开发。
    插件化开发和组件化开发略有不用,插件化开发时将整个app拆分成很多模块,这些模块包括一个宿主和多个插件,每个模块都是一个apk(组件化的每个模块是个lib),最终打包的时候将宿主apk和插件apk分开或者联合打包。


    组件化

    概述

    android工程的组件一般分为两种,lib组件和application组件
    application组件是指该组件本身就可以运行并打包成apk
    lib组件是指该组件属于app的一部分,可以供其它组件使用但是本身不能打包成apk

    为什么要有组件化?

    加入一个app工程只有一个组件,随着app业务的壮大模块越来越多,代码量超10万是很正常的,这个时候我们会遇到以下问题

    • 稍微改动一个模块的一点代码都要编译整个工程,耗时耗力
    • 公共资源、业务、模块混在一起耦合度太高
    • 不方便测试

    组件化正确的姿势

    既然选择使用组件化,那么如何正确的使用它呢?这里给出一种解决方案,如果你有更好的方案,欢迎交流。
    我们创建了一个app工程project,默认里面有一个app组件,这个app组件是可以直接运行的。
    怎么划分组件呢?

    • 1.新建一个lib组件,new Module—>Andorid Library,取名BaseUtilLib,我们将所有的公共的工具类、网络分装等类放在其中
    • 2.新建一个lib组件,BaseReslLib,我们将所有的公共资源、drawable、String等类放在其中
    • 3.将app按照自己的规则划分成多个模块,比如按业务按地区等都可以
    • 4.逐一开发某个模块,比如Test模块,新建一个TestApp组件,TestApp组件引用[1][2]步骤的BaseUtilLib和BaseReslLib,在TestApp组件里添加并引用TestLib组件。在TestLib的activity中写代码写业务逻辑,TestApp只负责跳转和测试
    • 5.将工程中的所有类似TestLib组件(不是TestApp组件)引入到工程的app中
      看着有点乱,整理出一张图

    组件化开发

    这样的好处有

    每个模块可以独立开发编译运行
    开发单个模块时可以共享资源和工具类
    可以针对单个模块测试

    demo地址:https://github.com/halibobo/ModuleBuild


    插件化

    为什么有插件化?

    有了组件化,为什么还要用插件化呢?插件化开发总的来说有以下几点好处(不同插件框架不一样):

    • 宿主和插件分开编译
    • 并发开发
    • 动态更新插件
    • 按需下载模块
    • 方法数或变量数爆棚

    处境

    开放出来的插件化开发框架比较多,他们各自都有自己的优势和和不足,实现的原理也有差别下面列

    开源的插件化框架

    目前开源的这几个框架有宿主和插件分离的也有融合在一起的,每个框架的详细介绍和demo在github里都可以查看到。插件化demo运行起来比较简单,但是真正将它用到实际项目中还是要考虑很多小细节的,目前我也正处于研究阶段。

    欢迎大家多交流

    展开全文
  • 1.什么是插件化开发 首先我们先来看看通过插件化开发后的APP是什么样的效果。这里就用最典型的插件化APP 360手机卫士 来演示。 可以看到,打开应用后在切换到工具箱中有很多功能,我的工具中先是有8个自带的功能...

    1.什么是插件化开发

    首先我们先来看看通过插件化开发后的APP是什么样的效果。这里就用最典型的插件化APP 360手机卫士 来演示一下什么是插件化的APP。
    这里写图片描述
    可以看到,打开应用后在切换到工具箱中有很多功能,我的工具中先是有8个自带的功能,然后点击更多工具可以去添加,点添加后先是下载,下载完成就可以打开使用了。

    这里写图片描述
    我们再来首先看看APP的大小,才15.62M,是不是很惊讶啊。
    在上面演示的图片中那些工具其实都是插件,而且在我的工具中8个自带的工具是我后面要说的内置插件,而我添加的那个“健康管理”工具就是外置插件,区别就是内置插件在安装完主体应用后就安装好了,而外置插件是在主体应用运行时安装的,最重要的一点是,插件也是一个APP,后缀名为.apk。而这个主体应用专业点说法就叫做宿主APP,反正都是APP。

    简单概括插件化开发:

    通过宿主APP可以运行未安装的APP。

    当然,只能运行“成为插件”的APP。

    2.插件化开发的优缺点:

    优点:

    • 模块解耦,应用程序扩展性强
    • 解除单个dex函数不能超过 65535的限制
    • 动态升级,下载更新节省流量
    • 高效开发(编译速度更快)

    缺点:

    • 增加了主应用程序的逻辑难度
    • 技术有难度,目前一些成熟的框架都是闭源的

    3.插件化框架—RePlugin介绍

    3.1什么是RePlugin?

    RePlugin是一套完整的、稳定的、适合全面使用的,占坑类插件化方案,由360手机卫士的RePlugin Team研发,也是业内首个提出”全面插件化“(全面特性、全面兼容、全面使用)的方案。

    3.2RePlugin有什么用?

    可以让你的项目很容易的成为插件化APP以及像开发单品一样来开发插件。

    3.3官方文档

    RePlugin —— 历经三年多考验,数亿设备使用的,稳定占坑类插件化方案

    4.RePlugin的基本使用

    这里分为两部分,宿舍APP的开发和插件APP的开发,然后每部分在一步一步的来讲。

    4.1宿主APP

    这里分为3步

    • 将RePlugin接入到您的主程序
    • 安装一个插件
    • 打开一个插件的Activity

    4.1.1新建一个项目并接入RePlugin

    新建一个项目
    这里写图片描述

    接入Replugin
    第 1 步:添加 RePlugin Host Gradle 依赖
    在项目根目录的 build.gradle(注意:不是 app/build.gradle) 中添加 replugin-host-gradle 依赖:

    buildscript {
        dependencies {
            classpath 'com.qihoo360.replugin:replugin-host-gradle:2.2.1'
            ...
        }
    }

    第 2 步:添加 RePlugin Host Library 依赖
    在 app/build.gradle 中应用 replugin-host-gradle 插件,并添加 replugin-host-lib 依赖:

    // 注意,这里要放在"android{}"这后面,因为要先读取applicationId
    apply plugin: 'replugin-host-gradle'
    
    /**
     * 配置项均为可选配置,默认无需添加
     * 更多可选配置项参见replugin-host-gradle的RepluginConfig类
     * 可更改配置项参见 自动生成RePluginHostConfig.java
     */
    repluginHostConfig {
        /**
         * 是否使用 AppCompat 库
         * 不需要个性化配置时,无需添加
         */
        useAppCompat = true
        /**
         * 背景不透明的坑的数量
         * 不需要个性化配置时,无需添加
         */
        countNotTranslucentStandard = 6
        countNotTranslucentSingleTop = 2
        countNotTranslucentSingleTask = 3
        countNotTranslucentSingleInstance = 2
    }
    
    dependencies {
        compile 'com.qihoo360.replugin:replugin-host-lib:2.2.1'
        ...
    }

    务必注意

    以下请务必注意:

    • 请一定要确保符合Gradle开发规范,也即“必须将包名写在applicatonId”,而非AndroidManifest.xml中(通常从Eclipse迁移过来的项目可能出现此问题)。如果不这么写,则有可能导致运行时出现“Failed to find provider info for com.ss.android.auto.loader.p.main”的问题。
    • 请将apply plugin: ‘replugin-host-gradle’放在 android{} 块之后,防止出现无法读取applicationId,导致生成的坑位出现异常
    • 如果您的应用需要支持AppComat,则除了在主程序中引入AppComat-v7包以外,还需要在宿主的build.gradle中添加下面的代码若不支持AppComat则请不要设置此项
    repluginHostConfig {
        useAppCompat = true
    }

    开启useAppCompat后,我们会在编译期生成AppCompat专用坑位,这样插件若使用AppCompat的Theme时就能生效了。若不设置,则可能会出现“IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.”的异常。

    • 如果您的应用需要个性化配置坑位数量,则需要在宿主的build.gradle中添加下面的代码:
    repluginHostConfig {
         /**
         * 背景不透明的坑的数量
         */
        countNotTranslucentStandard = 6
        countNotTranslucentSingleTop = 2
        countNotTranslucentSingleTask = 3
        countNotTranslucentSingleInstance = 2
    }

    更多可选配置项参见replugin-host-gradle的RepluginConfig类

    第 3 步:配置 Application 类
    让工程的 Application 直接继承自 RePluginApplication。

    如果您的工程已有Application类,则可以将基类切换到RePluginApplication即可。或者您也可以用“非继承式”接入。

    public class MainApplication extends RePluginApplication {
    }

    既然声明了Application,自然还需要在AndroidManifest中配置这个Application。

        <application
            android:name=".MainApplication"
            ... />

    备选:“非继承式”配置Application
    若您的应用对Application类继承关系的修改有限制,或想自定义RePlugin加载过程(慎用!),则可以直接调用相关方法来使用RePlugin。

    public class MainApplication extends Application {
    
        @Override
        protected void attachBaseContext(Context base) {
            super.attachBaseContext(base);
    
            RePlugin.App.attachBaseContext(this);
            ....
        }
    
        @Override
        public void onCreate() {
            super.onCreate();
    
            RePlugin.App.onCreate();
            ....
        }
    
        @Override
        public void onLowMemory() {
            super.onLowMemory();
    
            /* Not need to be called if your application's minSdkVersion > = 14 */
            RePlugin.App.onLowMemory();
            ....
        }
    
        @Override
        public void onTrimMemory(int level) {
            super.onTrimMemory(level);
    
            /* Not need to be called if your application's minSdkVersion > = 14 */
            RePlugin.App.onTrimMemory(level);
            ....
        }
    
        @Override
        public void onConfigurationChanged(Configuration config) {
            super.onConfigurationChanged(config);
    
            /* Not need to be called if your application's minSdkVersion > = 14 */
            RePlugin.App.onConfigurationChanged(config);
            ....
        }
    }

    针对“非继承式”的注意点

    • 所有方法必须在UI线程来“同步”调用。切勿放到工作线程,或者通过post方法来执行
    • 所有方法必须一一对应,例如 RePlugin.App.attachBaseContext 方法只在Application.attachBaseContext中调用
    • 请将RePlugin.App的调用方法,放在“仅次于super.xxx()”方法的后面

    4.1.2安装插件

    插件又分为内置插件和外置插件,不过,无论是内置,还是外置插件,还需理解:不是所有的APK都能作为 RePlugin 的插件并安装进来的。必须要严格按照RePlugin的《插件接入指南》中所述完成接入,其编译出的APK才能成为插件,且这个APK同时也可以被安装到设备中。

    内置插件

    内置插件是指可以“随着主程序发版”而下发的插件,通常这个插件会放到主程序的Assets目录下。
    针对内置插件而言,开发者可无需调用安装方法,由RePlugin来“按需安装”。

    外置插件

    外置插件是指可通过“下载”、“放入SD卡”等方式来安装并运行的插件。

    添加内置插件
    添加一个内置插件是非常简单的,甚至可以“无需任何Java代码”。只需两步即可:

    • 将APK改名为:[插件名].jar
    • 放入主程序的assets/plugins目录

    这样,当编译主程序时,我们的“动态编译方案”会自动在assets目录下生成一个名叫“plugins-builtin.json”文件,记录了其内置插件的主要信息,方便运行时直接获取。

    必须改成“[插件名].jar”后,才能被RePlugin-Host-Gradle识别,进而成为“内置插件”。

    [插件名]可以是“包名”,也可以是“插件别名”。

    安装外置插件
    要安装一个插件,只需使用 RePlugin.install 方法,传递一个“APK路径”即可。

    RePlugin.install(“/sdcard/exam.apk”);

    注意

    • 无论安装还是升级,都会将“源文件”“移动”(而非复制)到插件的安装路径(如app_p_a)上,这样可大幅度节省安装和升级时间,但显然的“源文件”也就会消失
      • 若想改变这个行为,您可以参考RePluginConfig中的 setMoveFileWhenInstalling() 方法
      • 升级插件和此等同,故不再赘述

    4.1.3打开一个插件的Activity

    //RePlugin.createIntent()中的参数是,插件名称,要打开的插件的Activity的全名称
    RePlugin.startActivity(MainActivity.this, RePlugin.createIntent("pluginA", "com.fu.plugina.MainActivity"));

    好,下面来看看该如何开发插件。

    4.2插件APP

    4.2.1新建一个项目并接入RePlugin

    新建一个项目
    这里写图片描述

    接入RePlugin
    第 1 步:添加 RePlugin Plugin Gradle 依赖
    在项目根目录的 build.gradle(注意:不是 app/build.gradle) 中添加 replugin-plugin-gradle 依赖:

    buildscript {
        dependencies {
            classpath 'com.qihoo360.replugin:replugin-plugin-gradle:2.2.1'
            ...
        }
    }

    第 2 步:添加 RePlugin Plugin Library 依赖
    在 app/build.gradle 中应用 replugin-plugin-gradle 插件,并添加 replugin-plugin-lib 依赖:

    apply plugin: 'replugin-plugin-gradle'
    
    dependencies {
        compile 'com.qihoo360.replugin:replugin-plugin-lib:2.2.1'
        ...
    }

    后面就可以向开发单品一样开发插件APP了。

    4.2.2配置插件名

    要声明插件别名,需要在插件的AndroidManifest.xml中声明以下Meta-data:

         <meta-data
                android:name="com.qihoo360.plugin.name"
                android:value="[你的插件别名]" />

    5.演示

    这里我就演示外置插件的安装和打开。
    我在宿主APP的MainActivity中添加了两个按钮,一个按钮是安装插件,一个按钮是打开插件的MainActivity。
    这里写图片描述

    安装插件需要文件的路径,这里我准备把插件放在缓存目录中,先把路径写上,然后先启动了RepluginDemo这个程序,这时插件app还没放到手机上,这时点击安装插件会说文件不存在。
    宿主APP中的MainActivity.java

    public class MainActivity extends AppCompatActivity {
    
        private static final String TAG = "MainActivity";
    
        private android.widget.Button btnInstallPlugin;
        private android.widget.Button btnOpenPlugin;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            this.btnInstallPlugin = (Button) findViewById(R.id.btn_install_plugin);
            this.btnOpenPlugin = (Button) findViewById(R.id.btn_open_plugin);
    
            btnInstallPlugin.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    File file = new File(getCacheDir() + File.separator + "/pluginA.apk");
                    if (file.exists()) {
                        PluginInfo info = RePlugin.install(file.getAbsolutePath());
                        Log.i(TAG, "installPluginInfo: " + info.toString());
                    } else {
                        Toast.makeText(MainActivity.this, "文件不存在", Toast.LENGTH_SHORT).show();
                    }
                }
            });
    
            btnOpenPlugin.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //打开插件的Activity
                    RePlugin.startActivity(MainActivity.this, RePlugin.createIntent("pluginA", "com.fu.plugina.MainActivity"));
                }
            });
    
        }
    }

    然后插件APP中我就在MainActivity中放了一个按钮,点击按钮弹出toast
    插件APP的MainActivity.java

    public class MainActivity extends AppCompatActivity {
    
        private android.widget.Button btntoast;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            this.btntoast = (Button) findViewById(R.id.btn_toast);
            btntoast.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(MainActivity.this, "我是插件", Toast.LENGTH_SHORT).show();
                }
            });
        }
    }

    编译打包插件APP,并把打包出来的APK改名为“pluginA.apk”(因为我们在代码中写的要安装名为pluginA.apk的插件)然后放到宿主APP的缓存目录下。
    这里写图片描述

    好,这时我们点击APP中的安装插件。
    安装完成后打印的信息。
    这里写图片描述

    然后我们再点击打开插件
    这里写图片描述
    成功打开插件。

    参考文章:

    RePlugin —— 历经三年多考验,数亿设备使用的,稳定占坑类插件化方案

    展开全文
  • Android组件化和插件化开发简单介绍

    千次阅读 2019-06-03 19:52:59
    Android组件化和插件化开发简单介绍什么是组件化和插件化?为什么要项目组件化组件化插件化 什么是组件化和插件化? 组件化开发: 就是将一个app分成多个模块,每个模块都是一个组件(Module),开发的过程中我们...

    什么是组件化和插件化?

    组件化开发:
    就是将一个app分成多个模块,每个模块都是一个组件(Module),开发的过程中我们可以让这些组件相互依赖或者单独调试部分组件等,但是最终发布的时候是将这些组件合并统一成一个apk,这就是组件化开发。

    插件化开发和组件化开发略有不用,插件化开发时将整个app拆分成很多模块,这些模块包括一个宿主和多个插件,每个模块都是一个apk(组件化的每个模块是个lib),最终打包的时候将宿主apk和插件apk分开或者联合打包。

    在这里插入图片描述!

    为什么要项目组件化

    为什么要项目组件化
    随着APP版本不断的迭代,新功能的不断增加,业务也会变的越来越复杂,APP业务模块的数量有可能还会继续增加,而且每个模块的代码也变的越来越多,这样发展下去单一工程下的APP架构势必会影响开发效率,增加项目的维护成本,每个工程师都要熟悉如此之多的代码,将很难进行多人协作开发,而且Android项目在编译代码的时候电脑会非常卡,又因为单一工程下代码耦合严重,每修改一处代码后都要重新编译打包测试,导致非常耗时,最重要的是这样的代码想要做单元测试根本无从下手,所以必须要有更灵活的架构代替过去单一的工程架构。

    组件化

    概述
    android工程的组件一般分为两种,lib组件和application组件
    application组件是指该组件本身就可以运行并打包成apk
    lib组件是指该组件属于app的一部分,可以供其它组件使用但是本身不能打包成apk
    为什么要有组件化?
    加入一个app工程只有一个组件,随着app业务的壮大模块越来越多,代码量超10万是很正常的,这个时候我们会遇到以下问题

    稍微改动一个模块的一点代码都要编译整个工程,耗时耗力
    公共资源、业务、模块混在一起耦合度太高
    不方便测试

    组件化正确的姿势
    既然选择使用组件化,那么如何正确的使用它呢?这里给出一种解决方案,如果你有更好的方案,欢迎交流。
    我们创建了一个app工程project,默认里面有一个app组件,这个app组件是可以直接运行的。
    怎么划分组件呢?

    1.新建一个lib组件,new Module—>Andorid Library,取名BaseUtilLib,我们将所有的公共的工具类、网络分装等类放在其中
    2.新建一个lib组件,BaseReslLib,我们将所有的公共资源、drawable、String等类放在其中
    3.将app按照自己的规则划分成多个模块,比如按业务按地区等都可以
    4.逐一开发某个模块,比如Test模块,新建一个TestApp组件,TestApp组件引用[1][2]步骤的BaseUtilLib和BaseReslLib,在TestApp组件里添加并引用TestLib组件。在TestLib的activity中写代码写业务逻辑,TestApp只负责跳转和测试
    5.将工程中的所有类似TestLib组件(不是TestApp组件)引入到工程的app中
    看着有点乱,整理出一张图

    在这里插入图片描述
    这样的好处有

    每个模块可以独立开发编译运行
    开发单个模块时可以共享资源和工具类
    可以针对单个模块测试

    demo地址:https://github.com/halibobo/ModuleBuild

    插件化

    为什么有插件化?
    有了组件化,为什么还要用插件化呢?插件化开发总的来说有以下几点好处(不同插件框架不一样):

    宿主和插件分开编译
    并发开发
    动态更新插件
    按需下载模块
    方法数或变量数爆棚

    处境
    开放出来的插件化开发框架比较多,他们各自都有自己的优势和和不足,实现的原理也有差别下面列
    开源的插件化框架

    https://github.com/Qihoo360/DroidPlugin
    https://github.com/CtripMobile/DynamicAPK
    https://github.com/mmin18/AndroidDynamicLoader
    https://github.com/singwhatiwanna/dynamic-load-apk
    https://github.com/houkx/android-pluginmgr
    https://github.com/bunnyblue/ACDD
    https://github.com/wequick/Small
    ……

    目前开源的这几个框架有宿主和插件分离的也有融合在一起的,每个框架的详细介绍和demo在github里都可以查看到。插件化demo运行起来比较简单

    展开全文
  • Android插件化开发之OpenAtlas初体验 Android插件化开发之OpenAtlas生成插件信息列表 Android插件化开发之OpenAtlas资源打包工具补丁aapt的编译 Android插件化开发之OpenAtlas插件适配 Android插件化开发之解决...
  • Android 组件化和插件化开发

    千次阅读 2018-07-25 11:34:00
    组件化开发就是将一个app...插件化开发和组件化开发略有不用,插件化开发时将整个app拆分成很多模块,这些模块包括一个宿主和多个插件,每个模块都是一个apk(组件化的每个模块是个lib),最终打包的时候将宿主apk和...
  • Android插件化开发之OpenAtlas插件适配

    千次阅读 2015-08-20 12:09:46
    - Android插件化开发之Atlas初体验 - Android插件化开发之Atlas生成插件信息列表 - Android插件化开发之Atlas资源打包工具补丁aapt的编译OpenAtlas的原则就是避免引入冗余的库。也就是宿主中提供了第三方库后,...
  • Android插件化开发实现动态换肤

    千次阅读 2016-09-01 21:59:50
    今晚实在不想coding,于是想着整理点知识点,那么简单整理了下插件化开发实现动态更换皮肤。插件化开发大家应该不陌生或多或少用过或听过,插件化开发在项目业务拓展、模块化等方面有不小优势,当然实现一个完美的...
  • Android 插件化开发技术分享

    千次阅读 2016-06-14 09:14:51
    最近工作中考虑平台化APP的开发,优秀考虑的是Android插件化开发技术,在网络上学习了一些知识点,个人研究了部分资料和源码,拿出一部分作为个人知识点记录,也作为公司内部互相学习的分享。希望有Android开发需求...
  • Python -- 插件化开发

    千次阅读 2019-06-02 10:52:29
    插件化开发动态导入内建函数__import__()importlib.import_module()插件化变成技术依赖的技术加载的时机应用 动态导入 运行时,根据用户需要(提供字符串),找到模块的资源动态加载起来 内建函数__import__() __...
  • QT利用DLL实现插件化开发

    千次阅读 2019-01-10 21:57:40
    这时插件化开发就能很好的解决这样的问题。 每个人都是单独的开发自己的业务功能模块,尽量少的依赖于别人提供的功能,等大家完成了,把每个人开发的功能组合到一起程序就能很好的在一起工作了。 以上是...
  • 1. 前言在现在一些大型的Android应用中都采用了插件化的开发方式,...1.1 插件化的好处首先在大型的项目里往往是一堆人负责一个不同功能的APP,最终于上线的项目会把这些功能集成到一起,采用插件化开发就不用后...
  • Android插件化开发之Hook StartActivity方法

    万次阅读 热门讨论 2016-11-18 00:22:53
    如果不知道或者忘记的小伙伴请猛搓这里,Android插件化开发基础之Java反射机制研究 http://blog.csdn.net/u011068702/article/details/49863931 第三步、应该知道Java静态代理知识 如果不知道或者忘记的小伙伴请...
  • Android插件化开发教程(一)

    千次阅读 2017-06-27 17:58:18
    1.什么是插件化开发首先我们要对插件化的概念有一个认识:插件化开发是将整个app拆分成很多模块,这些模块包括一个宿主和多个插件,每个模块都是一个apk(组件化的每个模块是个lib),最终打包的时候将宿主apk和插件...
  • 引言随着应用版本的不断迭代,App变得...携程开源了其插件化开发框架(携程插件化开发框架),接下来我会学习并从本文开始介绍携程开源的这套插件化开发框架,让更多的人了解安卓的插件化开发。这里感谢携程团队的贡献,
  • 上一篇文章,[Android插件化开发之Atlas初体验]( http://blog.csdn.net/sbsujjbcy/article/details/47446733),简单的介绍了使用Atlas的整个流程,但是如果你没有实践过的话估计还是一头雾水,从这篇文章开始,慢慢...
  • 详解Android插件化开发-资源访问

    千次阅读 2016-10-05 15:32:51
    动态加载技术(也叫插件化技术),当项目越来越庞大的时候,我们通过插件化开发不仅可以减轻应用的内存和CPU占用,还可以实现热插拔,即在不发布新版本的情况下更新某些模块。  通常我们把安卓资源文件制作成插件...
  • 本文转自:Android博客周刊专题之#插件化开发# 原文作者:陆镇生_Jomeslu 本人最近研究插件化, 偶然发现此合集, 按照部分链接的文章实际简单写了些demo,受益良多, 觉得确实不错,特转载过来,给需要的人。...
  • [Android]Android插件化开发入门篇

    千次阅读 2016-01-07 13:25:57
    1、什么是插件化开发 拿活跃用户量第一的微信来说,在第三个界面有个游戏,点开后可以选择很多的增植功能,这里腾讯只放了一些网页应用,那么如果未来想加入一个益智游戏,要怎么做?让用户重新安装吗,这就是插件...
  • 如果对Android的ClassLoader加载机制不熟悉,猛戳Android插件化开发动态加载基础之ClassLoader工作机制http://blog.csdn.net/u011068702/article/details/53248960 二、介绍 我们知道在Android中可以跟java一样实现...
  • C++插件化开发,插件化系统

    千次阅读 2016-05-21 00:00:58
    1.为什么需要插件化系统  “编程就是构建一个一个自己的小积木, 然后用自己的小积木搭建大系统”。  但是程序还是会比积木要复杂, 我们的系统必须要保证小积木能搭建出大的系统(必须能被组合),有必须能使...
  • 使用OpenAtlas进行插件化开发,插件的开发几乎可以按照正常程序的开发流程进行,无需添加额外的东西。为了验证四大组件是否能够正常工作,这里编写一个插件,验证其功能。除了四大组件外,大多数应用还有Application...
  • 关于Android apk 插件化开发

    千次阅读 2013-03-22 15:26:39
    研究下android apk的插件化开发:用户只需要安装基本的apk包,如果需要添加功能就下载一个 插件包来扩展,不需要一次就下载整个包,一次升级就升级10几M。  google一些文章来研究,学到了很多以前不知道的东西,...
  • 插件化开发小结

    千次阅读 2018-06-04 11:06:58
    引言先简单介绍一下Android插件化。很早之前已经有公司在研究这项技术,淘宝做得比较早,但淘宝的这项技术一直是保密的。直到2015年才陆续出现很多框架,Android插件化分成很多技术流派,实现的方式都不太一样。发展...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 388,650
精华内容 155,460
关键字:

插件化开发