Giter Site home page Giter Site logo

replugin's Introduction

RePlugin Logo

license

Release Version

!!!重要通知!!!

由于jcenter停服原因,RePlugin将迁移到http://maven.geelib.360.cn/nexus上

如果需要继续接入RePlugin,需要在项目的build.gradle内增加新的仓库地址:

maven {url "http://maven.geelib.360.cn/nexus/repository/replugin/"}

通知

360开源又一力作——ArgusAPM移动性能监控平台

ArgusAPM是360手机卫士客户端团队继RePlugin之后开源的又一个重量级开源项目。ArgusAPM是360移动端产品使用的可视化性能监控平台,为移动端APP提供性能监控与管理,可以迅速发现和定位各类APP性能和使用问题,帮助APP不断的提升用户体验。

360移动技术最新活动通知:

2018年12月16日,360移动性能开放日邀您参加,届时将会有360、美团技术大牛为大家分享Android、iOS性能监控实践。 欢迎报名参加,戳戳戳!!!-->https://mp.weixin.qq.com/s/-7DCnXI_EBMBwYG_PUuUDg

RePlugin —— A flexible, stable, easy-to-use Android Plug-in Framework

RePlugin is a complete Android plug-in solution which is suitable for general use.

文档,还是中文的好

It is major strengths are:

  • Extreme flexibility: Apps do not need to be upgraded to support new components, even brand new plug-ins.
  • Extraordinary stability: With only ONE hook (ClassLoader), NO BINDER HOOK. RePlugin’s Crash ratio is as low as Ten thousandth (0.01%). In addition, RePlugin is compatible with almost ALL Android ROMs in the market.
  • Rich features: RePlugin supports almost all features seamlessly as an installed application, including static Receiver, Task-Affinity, user-defined Theme, AppCompat, DataBinding, etc.
  • Easy integration: It takes only couple lines to access, whether plug-ins or main programs.
  • Mature management: RePlugin owns stable plug-in management solution which supports installation, upgrade, uninstallation and version management. Process communication, protocol versions and security check are also included.
  • Hundreds of millions support: RePlugin possesses hundreds of millions users from 360 MobileSafe. After more than three-year verification, we guarantee the solution that Apps use is the most stable and suitable.

By the end of June 2017, RePlugin has already made some achievements:

Feature Achievement
Plug-in Number 103
Ratio of plug-ins to applications 83%
Version released pre year 596
Crash 0.01%, Extraordinary stability
First Release 2014

At present, almost all Apps with hundreds of millions users from 360, and many mainstream third-party Apps, are using RePlugin solution.

We support:

Feature Description
Components Activity, Service, Provider, Receiver(Including static)
Not need to upgrade when brand a new Plug-in Supported
Android Feature Supported almost all features
TaskAffinity & Multi-Process Perfect supported!
Support Plug-in Type Built-in (Only Two Step) and External(Download)
Plug-in Coupling Binder, Class Loader, Resources, etc.
Interprocess communication Sync, Async, Binder and Cross-plug-in broadcast
User-Defined Theme & AppComat Supported
DataBinding Supported
Safety check when installed Supported
Resources Solution Independent Resources + Context pass(No Adaptation ROM)
Android Version API Level 9 (Android 2.3 and above)

Our Vision

Make RePlugin be used in all kinds of ordinary Apps; and provide stable, flexible, liberal plug-ins which adopt for both large and small projects.

Latest features

Solved the Android P (Android 9.0) related adaptation issues, fully support the official version of Android P (Android 9.0).

RePlugin Architecture

RePlugin Framework

How to Use RePlugin

Using RePlugin is very simple. Under most conditions, using it is no different than developing an App.

If you are the first-time user, please click here to read Quick Start Guide(Chinese Version). Following our guide, you will learn more about RePlugin.

If you wish to learn more gameplays about RePlugin, please click here to read Step-by-step Tutorial(Chinese Version).

If you want to view RePlugin’s sample project, and learn concrete usage of the frame, please click here to check Sample SC.

If you have any question, please click here to read FAQ(Chinese Version).

These apps are using RePlugin

360 Mobile Safe 360 App Store 360 Mobile Browser HuaJiao Camera 360 Clean Master
360 Kan Movie JieQianBa 1 HaiTao HuaRun Tong JieLeMa
360OS App 360 Loan (Internal App) (Internal App) (Internal App)

Plug-ins Accessed in RePlugin

For your reference, plug-ins accessed can be classified into following categories:

  • Expo plug-ins: Safe Home Page, physical examination, information flow, etc.
  • Business plug-ins: cleaning, disturbance intercept, floating window, etc.
  • Cooperation plug-ins: App Lock, free Wi-Fi, security desktop, etc.
  • Background plug-ins: Push, service management, Protobuf, etc.
  • Base plug-ins: Security WebView, share, location service, etc.

By the end of June 2017, we already have 102 plug-ins like these. We look forward to you becoming a part of RePlugin family!

Contribute Your Share

We sincerely welcome and appreciate your contribution of any kind. You can submit code, raise suggestions, write documentation, etc. For more information, please click here to read Contribute Your Share(Chinese Version).

License

RePlugin is Apache v2.0 licensed.

(Thanks Xiezihan(谢子晗) for providing the translations.)

replugin's People

Contributors

bnotebook avatar ckjavacoder avatar coder-zhao avatar createchance avatar cundong avatar duqian291902259 avatar erhu avatar goodev avatar hyongbai avatar javencoder avatar jiongxuan avatar kevinfen9 avatar kezong avatar krubo avatar lizhangqu avatar qihoo360github avatar skyeric avatar wangfuda avatar wangyupeng1-iri avatar ximsfei avatar yutiantina avatar zzz40500 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  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

replugin's Issues

是否支持databinding呢

因为用别的插件框架,使用databinding会遇到好多问题,不知道是否做了databinding的支持

host工程无法编译的问题

You may also want to read our issue guide.

RePlugin version:

Android compile SDK version:

Android ROM:

Gradle sync failed: Cause: org.gradle.api.internal.tasks.DefaultTaskInputs$TaskInputUnionFileCollection cannot be cast to org.gradle.api.internal.file.collections.DefaultConfigurableFileCollection

按照接入指南接入报错

Error:Could not find com.qihoo360.replugin:replugin-host-gradle:2.1.0.
Searched in the following locations:
file:/Applications/Android Studio 3.0 Preview.app/Contents/gradle/m2repository/com/qihoo360/replugin/replugin-host-gradle/2.1.0/replugin-host-gradle-2.1.0.pom
file:/Applications/Android Studio 3.0 Preview.app/Contents/gradle/m2repository/com/qihoo360/replugin/replugin-host-gradle/2.1.0/replugin-host-gradle-2.1.0.jar
https://dl.google.com/dl/android/maven2/com/qihoo360/replugin/replugin-host-gradle/2.1.0/replugin-host-gradle-2.1.0.pom
https://dl.google.com/dl/android/maven2/com/qihoo360/replugin/replugin-host-gradle/2.1.0/replugin-host-gradle-2.1.0.jar
https://jcenter.bintray.com/com/qihoo360/replugin/replugin-host-gradle/2.1.0/replugin-host-gradle-2.1.0.pom
https://jcenter.bintray.com/com/qihoo360/replugin/replugin-host-gradle/2.1.0/replugin-host-gradle-2.1.0.jar
Required by:
project :

引用库之后一直提示这个错误?如何解决?

You may also want to read our issue guide.

RePlugin version:

Android compile SDK version:

Android ROM:

`
buildscript {
repositories {
jcenter()
maven {
url "https://dl.bintray.com/qihoo360/replugin"
}
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.3'
classpath 'com.qihoo360.replugin:replugin-host-gradle:2.1.0'
}
}

allprojects {
repositories {
jcenter()
maven {
url "https://dl.bintray.com/qihoo360/replugin"
}
}
}

task clean(type: Delete) {
delete rootProject.buildDir
}`

错误提示:

Error:Execution failed for task ':app:processDebugResources'.

D:\xinshiyunProject\gitClone2\RePluginMainDemo\app\src\main\assets\plugins

Error:Could not find com.qihoo.gradle:replugin-host-gradle:2.1.0.

插件同步不下来
现在用不了吗?还是说要加特殊的repositories?

Error:Could not find com.qihoo.gradle:replugin-host-gradle:2.1.0.
Searched in the following locations:
    file:/home/xxx/Program/AS2.3/android-studio/gradle/m2repository/com/qihoo/gradle/replugin-host-gradle/2.1.0/replugin-host-gradle-2.1.0.pom
    file:/home/xxx/Program/AS2.3/android-studio/gradle/m2repository/com/qihoo/gradle/replugin-host-gradle/2.1.0/replugin-host-gradle-2.1.0.jar
    https://jcenter.bintray.com/com/qihoo/gradle/replugin-host-gradle/2.1.0/replugin-host-gradle-2.1.0.pom
    https://jcenter.bintray.com/com/qihoo/gradle/replugin-host-gradle/2.1.0/replugin-host-gradle-2.1.0.jar
Required by:
    project :

MI5s Crash:NoSuchMethodError: No static method removeFinalModifier

java.lang.NoSuchMethodError: No static method removeFinalModifier(Ljava/lang/reflect/Field;)V in class Lorg/apache/commons/lang3/reflect/FieldUtils; or its super classes (declaration of 'org.apache.commons.lang3.reflect.FieldUtils' appears in /system/framework/framework.jar:classes2.dex)
at com.qihoo360.replugin.RePluginClassLoader.copyFieldValue(RePluginClassLoader.java:128)
at com.qihoo360.replugin.RePluginClassLoader.copyFromOriginal(RePluginClassLoader.java:113)
at com.qihoo360.replugin.RePluginClassLoader.(RePluginClassLoader.java:79)
at com.qihoo360.replugin.DefaultRePluginCallbacks.createClassLoader(DefaultRePluginCallbacks.java:52)
at com.qihoo360.loader.utils.PatchClassLoaderUtils.patch(PatchClassLoaderUtils.java:81)
at com.qihoo360.loader2.PMF.init(PMF.java:79)
at com.qihoo360.replugin.RePlugin$App.attachBaseContext(RePlugin.java:845)
at com.qihoo360.replugin.RePlugin$App.attachBaseContext(RePlugin.java:789)
at com.qihoo360.replugin.sample.host.SampleApplication.attachBaseContext(SampleApplication.java:35)
at android.app.Application.attach(Application.java:191)
at android.app.Instrumentation.newApplication(Instrumentation.java:998)
at android.app.Instrumentation.newApplication(Instrumentation.java:982)
at android.app.LoadedApk.makeApplication(LoadedApk.java:575)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4716)
at android.app.ActivityThread.access$1600(ActivityThread.java:153)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1421)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5458)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:738)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:628)

不支持productFlavors特性

NamedDomainObjectContainer<AndroidSourceSet> sourceSets = project.extensions.getByType(AppExtension).getSourceSets()
File sourceDir = sourceSets.findByName('main')['javaDirectories'][0]
NamedDomainObjectContainer<AndroidSourceSet> sourceSets = project.extensions.getByType(AppExtension).getSourceSets()
fileDir = sourceSets.findByName('main')['assetsDirectories'][0]

以上编码的存在,导致不支持productFlavors,只会处理main目录下的assets与生成main目录下的RePluginHostConfig类

建议hook mergeAssetsTask

like this

project.afterEvaluate {
    project.android.applicationVariants.each { ApplicationVariantImpl variant ->
        def variantData = variant.variantData
        def scope = variantData.scope
        def globalScope = scope.globalScope
        def generatedDir = globalScope.generatedDir;
        def dirName = variantData.variantConfiguration.dirName

        //get task name
        def mergeAssetsTaskName = scope.getMergeAssetsTask().name
        //get real gradle task
        def mergeAssetsTask = project.tasks.getByName(mergeAssetsTaskName)
        if (mergeAssetsTask) {
            def generateRePluginBuiltinJsonTaskName = scope.getTaskName("generate", "RePluginBuiltinJson")
            def generateRePluginBuiltinJsonTask = project.task(generateRePluginBuiltinJsonTaskName)

            generateRePluginBuiltinJsonTask.doLast {
                //generate json
            }
            //finalizedBy
            mergeAssetsTask.finalizedBy generateRePluginBuiltinJsonTask
        }
    }
}

RePluginHostConfig建议生成到build/generated/source目录下,类似BuildConfig,而不是src目录中。

like this

project.afterEvaluate {
    project.android.applicationVariants.each { ApplicationVariantImpl variant ->
        def variantData = variant.variantData
        def scope = variantData.scope
        def globalScope = scope.globalScope
        def generatedDir = globalScope.generatedDir;
        def dirName = variantData.variantConfiguration.dirName

        //get dir
        File generatedRePluginHostConfigSourceDir = new File(generatedDir, "source/replugin/" + dirName);

        //build src dir to ImmutableList<ConfigurableFileTree>
        ImmutableList.Builder<ConfigurableFileTree> sourceSets = ImmutableList.builder();
        sourceSets.add(generatedRePluginHostConfigSourceDir)
        List<ConfigurableFileTree> rePluginGeneratedjavaSources = sourceSets.build()

        //add java file to AndroidJavaCompile Task
        def compileJavaWithJavacTaskName = scope.getTaskName("compile", "JavaWithJavac")
        def compileJavaWithJavacTask = project.tasks.getByName(compileJavaWithJavacTaskName)
        compileJavaWithJavacTask.source(rePluginGeneratedjavaSources)

        //add generate RePluginHostConfig task
        def generateRePluginHostConfigTaskName = scope.getTaskName("generate", "RePluginHostConfig")
        def generateSourcesTaskName = scope.getTaskName("generate", "Sources")
        def generateRePluginHostConfig = project.task(generateRePluginHostConfigTaskName)

        //get the file content by some function
        def rePluginHostConfigTemplate = "get the file content"

        generateRePluginHostConfig.doLast {
            File file = new File(generatedRePluginHostConfigSourceDir, "com/qihoo360/replugin/gen/RePluginHostConfig.java")
            GFileUtils.writeFile(rePluginHostConfigTemplate, file)
        }

        //dependsOn
        def generateSourcesTask = project.tasks.getByName(generateSourcesTaskName);
        if (generateSourcesTask) {
            generateSourcesTask.dependsOn generateRePluginHostConfig
        }
    }

异常java.lang.ClassNotFoundException: com.testreplugin.loader.p.ProviderN1

插件问题:异常
java.lang.ClassNotFoundException: com.testreplugin.loader.p.ProviderN1

我的代码上传到了github:https://github.com/ikakaxi/testRePlugin.git

我是app->lib1->lib2
lib1和lib2有一个相同名字的color资源,然后在app里默认的activity_main里面把文字颜色设置了这个color,运行报错

详细堆栈信息:
java.lang.RuntimeException: Unable to get provider com.testreplugin.loader.p.ProviderN1: java.lang.ClassNotFoundException: Didn't find class "com.testreplugin.loader.p.ProviderN1" on path: DexPathList[[zip file "/data/app/com.testreplugin-2/base.apk", zip file "/data/app/com.testreplugin-2/split_lib_dependencies_apk.apk", zip file "/data/app/com.testreplugin-2/split_lib_slice_0_apk.apk", zip file "/data/app/com.testreplugin-2/split_lib_slice_1_apk.apk", zip file "/data/app/com.testreplugin-2/split_lib_slice_2_apk.apk", zip file "/data/app/com.testreplugin-2/split_lib_slice_3_apk.apk", zip file "/data/app/com.testreplugin-2/split_lib_slice_4_apk.apk", zip file "/data/app/com.testreplugin-2/split_lib_slice_5_apk.apk", zip file "/data/app/com.testreplugin-2/split_lib_slice_6_apk.apk", zip file "/data/app/com.testreplugin-2/split_lib_slice_7_apk.apk", zip file "/data/app/com.testreplugin-2/split_lib_slice_8_apk.apk", zip file "/data/app/com.testreplugin-2/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/com.testreplugin-2/lib/x86_64, /vendor/lib64, /system/lib64]] at android.app.ActivityThread.installProvider(ActivityThread.java:5156) at android.app.ActivityThread.installContentProviders(ActivityThread.java:4748) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4688) at android.app.ActivityThread.-wrap1(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1405) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) Caused by: java.lang.ClassNotFoundException: Didn't find class "com.testreplugin.loader.p.ProviderN1" on path: DexPathList[[zip file "/data/app/com.testreplugin-2/base.apk", zip file "/data/app/com.testreplugin-2/split_lib_dependencies_apk.apk", zip file "/data/app/com.testreplugin-2/split_lib_slice_0_apk.apk", zip file "/data/app/com.testreplugin-2/split_lib_slice_1_apk.apk", zip file "/data/app/com.testreplugin-2/split_lib_slice_2_apk.apk", zip file "/data/app/com.testreplugin-2/split_lib_slice_3_apk.apk", zip file "/data/app/com.testreplugin-2/split_lib_slice_4_apk.apk", zip file "/data/app/com.testreplugin-2/split_lib_slice_5_apk.apk", zip file "/data/app/com.testreplugin-2/split_lib_slice_6_apk.apk", zip file "/data/app/com.testreplugin-2/split_lib_slice_7_apk.apk", zip file "/data/app/com.testreplugin-2/split_lib_slice_8_apk.apk", zip file "/data/app/com.testreplugin-2/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/com.testreplugin-2/lib/x86_64, /vendor/lib64, /system/lib64]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) at java.lang.ClassLoader.loadClass(ClassLoader.java:511) at java.lang.ClassLoader.loadClass(ClassLoader.java:469) at android.app.ActivityThread.installProvider(ActivityThread.java:5141) at android.app.ActivityThread.installContentProviders(ActivityThread.java:4748)  at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4688)  at android.app.ActivityThread.-wrap1(ActivityThread.java)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1405)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:148)  at android.app.ActivityThread.main(ActivityThread.java:5417)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)  Suppressed: java.lang.ClassNotFoundException: com.testreplugin.loader.p.ProviderN1 at java.lang.Class.classForName(Native Method) at java.lang.BootClassLoader.findClass(ClassLoader.java:781) at java.lang.BootClassLoader.loadClass(ClassLoader.java:841) at java.lang.ClassLoader.loadClass(ClassLoader.java:504) ... 12 more Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available

对RePlugin接入过程的疑问

引用一下 @jiongxuan 的comment:

相反,RePlugin只Hook了ClassLoader,所以极为稳定,且同样支持绝大多数单品的特性。而APK只需要通过我们的Gradle编译,无需开发者修改Java Code,即可运行在主程序中。

我是否可以理解为借助gradle的transform?那么如果这时候存在多个transform且它们都会修改字节码,是否会对插件造成影响?

插件需要用到宿主的资源

在插件中需要用到宿主里面的 public static final 变量,以前用别人的插件化框架是把宿主打成jar 包,给插件引用,那RePlugin 是怎么处理的啊?求大大帮解答下。

是否支持databinding呢

因为用别的插件框架,使用databinding会遇到好多问题,不知道是否做了databinding的支持

相互通信问题

宿主和插件之间,插件和宿主之间,插件和插件之间,这些方面的通信有什么限制吗?(毕竟单纯的插件还是很少的,双方甚至多方之间进行通信是免不了的,由于业务需要,单纯的提取出一个插件也看似不怎么现实,现在比较关心的还是相互通信方面。)

能不能建个QQ群

能不能建个QQ群,一旦发布了直接在群里同步一下消息就行了

是否支持MultiDex方案

你好,我方是做游戏SDK的,由于我方无法预知上游游戏厂商的游戏母包是否超过了65535方法数量限制而采用Multidex方案
1.replugin支持宿主使用Multidex方案
`
public class MultiDexApplication extends Application {
public MultiDexApplication() {
}

//写法有问题吗?
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
RePlugin.App.attachBaseContext(this);
MultiDex.install(this);
}
}

`

2 不支持宿主使用Multidex方案
可以告诉下吗

sample 运行报错

用android studio运行到手机,报错如下:

java.lang.ClassNotFoundException: Didn't find class "com.qihoo360.replugin.sample.host.loader.p.ProviderN1"

RePlugin version: 2.1.0

Android compile SDK version: 25

Android ROM: 红米1S

插件更新问题

我把每个业务拆分出来,如果需要单独更新某个插件,怎么做

plugin和host能在一个工程里面一起开发吗

@jiongxuan 我在同一个工程里面试了下,会报错:
root build.gradle:
`// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
repositories {
jcenter()
maven {
url "https://dl.bintray.com/qihoo360/replugin"
}
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.3'
classpath 'com.qihoo360.replugin:replugin-host-gradle:2.1.0'
classpath 'com.qihoo360.replugin:replugin-plugin-gradle:2.1.0'

    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
}

}

allprojects {
repositories {
jcenter()
mavenCentral()
maven {
url "https://dl.bintray.com/qihoo360/replugin"
}
}
}

task clean(type: Delete) {
delete rootProject.buildDir
}
**host app build.gradle:**apply plugin: 'com.android.application'
apply plugin: 'replugin-host-gradle'

android {
compileSdkVersion 25
buildToolsVersion "25.0.3"
defaultConfig {
applicationId "com.zhph.zhyq"
minSdkVersion 14
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.qihoo360.replugin:replugin-host-lib:2.1.0'
}
**plugin home build.gradle:**apply plugin: 'com.android.application'
apply plugin: 'replugin-plugin-gradle'

android {
compileSdkVersion 25
buildToolsVersion "25.0.3"

defaultConfig {
    applicationId "com.zhph.home"
    minSdkVersion 14
    targetSdkVersion 25
    versionCode 1
    versionName "1.0"

    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

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

}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.qihoo360.replugin:replugin-plugin-lib:2.1.0'
}
**Error message:**Error:(2, 0) Failed to apply plugin [id 'replugin-plugin-gradle']
Open File`

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.