VirtualAPK初探

关于Virtual APK 的集成


1、简介

是滴滴2017年6月3号开源,框架功能完备,支持 Android 四大组件,良好的兼容性,且入侵性较低,作为加载耦合插件方案是较好选择

主要分为宿主程序 以及插件,下面是集成的步骤 

2、集成步骤

首先创建宿主程序:(主要的apk)

宿主程序的集成

1.在工程的build.gradle 中添加插件
     dependencies {
        classpath 'com.android.tools.build:gradle:2.3.3'
        classpath 'com.didi.virtualapk:gradle:0.9.4'
·   }
2.在宿主的主工程中,应用插件,并导入工程
    apply plugin: 'com.didi.virtualapk.host'
    android {
        compileSdkVersion 26
        buildToolsVersion '25.0.2'
            defaultConfig {
                 .......
            }
            buildTypes {
             ....
             }
        }

        dependencies {
        ......
        compile 'com.didi.virtualapk:core:0.9.1'
        }

说明
gridle版本建议应用2.3.3 太高了有问题;

3.在宿主的Application中重写attachBaseContext方法:
      protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        PluginManager.getInstance(base).init();
      }
4.要调用插件的页面activity 中:
    class MainActivity : AppCompatActivity(), View.OnClickListener {

        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
            loading.setOnClickListener(this)
            var cpuArch: String
            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
                cpuArch = Build.SUPPORTED_ABIS[0]
            } else {
                cpuArch = Build.CPU_ABI
            }
            Log.d("ryg", "onCreate cpu arch is " + cpuArch)
            loadPlugin(this)
        }


        //加载插件
        override fun onClick(v: View?) {
            val pkg = "com.lishu.pluginproject"
            if (PluginManager.getInstance(this).getLoadedPlugin(pkg) == null) {
                Toast.makeText(this, "plugin ${pkg} not loaded", Toast.LENGTH_SHORT).show()
                return
            }
            // test Activity and Service
            val intent = Intent()
            intent.setClassName(this, "com.lishu.pluginproject.SecondActivity")
            startActivity(intent)
        }


        fun loadPlugin(base: Context) {
            val pluginManager = PluginManager.getInstance(base)
            val apk = File(Environment.getExternalStorageDirectory(), "my.apk")
            if (apk.exists()) {
                try {
                    pluginManager.loadPlugin(apk)
                } catch (e: Exception) {
                    e.printStackTrace()
                }
            }
        }
}

到此,关于宿主程序的简单初始化,就结束了

插件的集成:

1、同样在插件的工程build.gradle中添加插件
dependencies {
    classpath 'com.android.tools.build:gradle:2.3.3'
    classpath 'com.didi.virtualapk:gradle:0.9.4'
}
2、 在工程中应用插件
apply plugin: 'com.didi.virtualapk.plugin'

到这一步,插件工程也初步的集成成功;

3、安装Demo 并运行

1、首先在手机上安装上宿主程序

2、然后再插件中,用命令 gradlew clean assemblePlugin 打包成插件;

    A problem occurred configuring project ':app'.
    > Can't find ..\MyVirtualApk2\app\build\VAHost\versions.txt, please check up your host application
      need apply com.didi.virtualapk.host in build.gradle of host application
有可能会遇到这样的问题,这个时候,我们要先编译下 宿主程序   ,然后再运行打包插件的命令

3、应用 adb push 命令吧插件放到,sdcard 中;

    首先找插件app的build 目录:
    \outputs\apk\app-release-unsigned.apk 
    实例命令: adb push app-release-unsigned.apk  /sdcard/my.apk
    注意:这个命令是进入到apk 目录后直接执行的;

然后启动宿主程序,就可以了;

//现在有着兼容性的问题bug;;;;

E:\demo\PluginProject\app\build\generated\source\r\release\android\support\design\R.java:1459: 错误: 不兼容的类型: <空值>无法转换为int
public static final int[] AppBarLayout = { null, null, null, 0x7f010048, 0x6f010011 };

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值