欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

插件化框架Replugin使用

程序员文章站 2022-09-01 08:33:32
关于replugin不做介绍,可以看其他博客。环境介绍Android stuido 3.4gradle 5.1.1replugin 2.3.3androidx插件化项目结构坑: Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.localbroadcastmanager.content.LocalBroadcastMan......

关于replugin不做介绍,可以看其他博客。

环境介绍

  • Android stuido 3.4

  • gradle 5.1.1

  • replugin 2.3.3

  • androidx

 

插件化项目结构

插件化框架Replugin使用

 

坑:

     Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.localbroadcastmanager.content.LocalBroadcastManager" on path: DexPathList[[zip file "/data/app/com.example.replugindemo-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
      

                ... 16 more
     Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available

解决办法

implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0'

宿主的replugin接入

  •   在project 的build.gradle 中
  • classpath 'com.qihoo360.replugin:replugin-host-gradle:2.3.3'

    在app 的build.gradle 中(apply plugin: 'replugin-host-gradle'一定要配置在Android{}之后

    apply plugin: 'replugin-host-gradle'
    
    /**
     * 配置项均为可选配置,默认无需添加
     * 更多可选配置项参见replugin-host-gradle的RepluginConfig类
     * 可更改配置项参见 自动生成RePluginHostConfig.java
     */
    repluginHostConfig {
        /**
         * 是否使用 AppCompat 库
         * 不需要个性化配置时,无需添加
         */
        useAppCompat = true
        /**
         * 背景不透明的坑的数量
         * 不需要个性化配置时,无需添加
         */
        countNotTranslucentStandard = 6
        countNotTranslucentSingleTop = 2
        countNotTranslucentSingleTask = 3
        countNotTranslucentSingleInstance = 2
    }
    
    
    
     
  • 在​​​​​​​dependencies 中添加
    ​​​​​​​dependencies {
       
        implementation 'com.qihoo360.replugin:replugin-host-lib:2.3.3'
        .........

    完整的build

  • apply plugin: 'com.android.application'
    
    android {
        compileSdkVersion 29
        buildToolsVersion "29.0.3"
        defaultConfig {
            applicationId "com.example.replugindemo"
            minSdkVersion 15
            targetSdkVersion 29
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        }
    
    
    
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            }
        }
    }
    //
    
    apply plugin: 'replugin-host-gradle'
    
    /**
     * 配置项均为可选配置,默认无需添加
     * 更多可选配置项参见replugin-host-gradle的RepluginConfig类
     * 可更改配置项参见 自动生成RePluginHostConfig.java
     */
    repluginHostConfig {
        /**
         * 是否使用 AppCompat 库
         * 不需要个性化配置时,无需添加
         */
        useAppCompat = true
        /**
         * 背景不透明的坑的数量
         * 不需要个性化配置时,无需添加
         */
        countNotTranslucentStandard = 6
        countNotTranslucentSingleTop = 2
        countNotTranslucentSingleTask = 3
        countNotTranslucentSingleInstance = 2
    }
    
    
    
    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        implementation 'androidx.appcompat:appcompat:1.2.0'
        implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
        testImplementation 'junit:junit:4.12'
        androidTestImplementation 'androidx.test:runner:1.2.0'
        androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
        implementation 'com.qihoo360.replugin:replugin-host-lib:2.3.3'
    
        implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0'
    }
    
    
    

     


插件的接入

  在project 的build.gradle 中

classpath 'com.qihoo360.replugin:replugin-plugin-gradle:2.3.3'

在app 的build.gradle 中

apply plugin: 'replugin-plugin-gradle'

repluginPluginConfig {
    //插件名
    pluginName = "ft_login"
    //宿主app的包名
    hostApplicationId = "com.example.replugindemo"
    //宿主app的启动activity
    hostAppLauncherActivity = "com.example.replugindemo.MainActivity"
}

​​​​​​​在​​​​​​​dependencies 中添加

implementation 'com.qihoo360.replugin:replugin-plugin-lib:2.3.3'

完整的build

apply plugin: 'com.android.application'

android {
    compileSdkVersion 29
    buildToolsVersion "29.0.3"


    defaultConfig {
        applicationId "com.example.ft_login"
        minSdkVersion 15
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

}

apply plugin: 'replugin-plugin-gradle'

repluginPluginConfig {
    //插件名
    pluginName = "ft_login"
    //宿主app的包名
    hostApplicationId = "com.example.replugindemo"
    //宿主app的启动activity
    hostAppLauncherActivity = "com.example.replugindemo.MainActivity"
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.2.0'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
    implementation 'com.qihoo360.replugin:replugin-plugin-lib:2.3.3'
}

接入完毕

插件代码编写注意点

插件要全部继承PluginFragmentActivity

 

 

生成插件apk复制在宿主工程的 更改后缀名为.jar

插件化框架Replugin使用

 

 

 

 

 

 

 

简单测试

宿主启动插件

Intent intent1 = RePlugin.createIntent("ft_login","com.example.ft_login.LoginActivity");
intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//没有会报错
RePlugin.startActivity(this,intent1);

本文地址:https://blog.csdn.net/xueshao110/article/details/108145198

相关标签: Android