APK动态加载框架DL库分析

本文详细探讨了Android动态加载框架DL库的工作原理,涵盖了其在APK中的应用,以及如何实现插件化的关键技术和挑战。通过分析DL库的内部机制,读者将能理解如何动态加载APK模块,提升应用程序的灵活性和可维护性。
摘要由CSDN通过智能技术生成
APK动态加载框架

优点:
---简化宿主程序的大小,动态加载模块功能,减小原始apk包大小,解决R文件中int定义超过65535问题。

限制性:
---插件和宿主app之间必须受某种规范的约束,才能将其装载,进而在一个进程内相互传值。
---目前只支持动态注册广播。首次调用apk时不支持加载Fragment,必须是context形式的启动类。
   解释 一下:是通过反射找到apk启动的Context来唤起apk的。
--插件中.so文件还不支持调用!

调用插件的实现流程:


第一步:
1、在插件apk中引入lib文件,在插件apk中add宿主工程





插件apk的启动context(service或者Activity)必须继承至
DLBasePluginService、DLBasePluginActivity或者DLBasePluginFragmentActivity

第二步:
插件apk,以下简称plug要重写onCreate()方法
  @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

第三步:
使用that作为代理Context的实例(为什么这样做?先不管,后面做解释)
比如toast时这样定义:
Toast.makeText(that, "HostExtra----->" +HostExtra, Toast.LENGTH_SHORT ).show();


第四步:
*调用传值

1、宿主向plug传值:

          DLPluginManager pluginManager = DLPluginManager.getInstance(this);
          DLIntent dlIntent= new  DLIntent(
                   packageInfo.packageName , item.launcherActivityName);//目标插件启动类(以启动activity为例)
          dlIntent.putExtra( "HostExtra", "TestIntent--->HostExtra" );
          pluginManager.startPluginActivity( this,dlIntent);


2、plug接受传值:
       String HostExtra;
        if(this.getIntent()!= null){
          HostExtra =this.getIntent().getStringExtra("HostExtra");
          Log. w("HostExtra----->", HostExtra);
          Toast. makeText(that, "HostExtra----->" +HostExtra , Toast.LENGTH_SHORT).show();
        }

3、plug向宿主传值与上面方法相同。

4、plug调用宿主中的方法:
        Button button=;
        button.setOnClickListener( new OnClickListener() {
            @Override
            public void onClick(View v) {
                TestHostClass testHostClass = new TestHostClass();//宿主中类(前提是第一步中add宿主工程)
                testHostClass.testMethod( that);
            }
        });
     --宿主中该类是这样定义的:
                     
            
       public class TestHostClass {

          public void testMethod(Context context) {//context是上面的that
           Toast. makeText(context, "Successed invoke host method", Toast.LENGTH_SHORT).show();
           }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值