Qihoo360 / RePlugin

RePlugin - A flexible, stable, easy-to-use Android Plug-in Framework
Apache License 2.0
7.26k stars 1.53k forks source link

【v7 appcompat 问题】在内置插件为AppCompatActivity的Theme的时候会报如下错误 #434

Closed StormKid closed 6 years ago

StormKid commented 6 years ago

Logcat上下文 Logcat context

E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: com.xxxx.doctor, PID: 4847
                  java.lang.RuntimeException: Unable to start activity ComponentInfo{com.xxxx.doctor/com.xxxx.doctor.loader.a.ActivityN1NRNTS2}: java.lang.IllegalStateException: This app has been built with an incorrect configuration. Please configure your build for VectorDrawableCompat.
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2193)
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2243)
                      at android.app.ActivityThread.access$800(ActivityThread.java:135)
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
                      at android.os.Handler.dispatchMessage(Handler.java:102)
                      at android.os.Looper.loop(Looper.java:136)
                      at android.app.ActivityThread.main(ActivityThread.java:5019)
                      at java.lang.reflect.Method.invokeNative(Native Method)
                      at java.lang.reflect.Method.invoke(Method.java:515)
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
                      at dalvik.system.NativeStart.main(Native Method)
                   Caused by: java.lang.IllegalStateException: This app has been built with an incorrect configuration. Please configure your build for VectorDrawableCompat.
                      at android.support.v7.widget.AppCompatDrawableManager.checkVectorDrawableSetup(AppCompatDrawableManager.java:758)
                      at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:193)
                      at android.support.v7.widget.TintTypedArray.getDrawableIfKnown(TintTypedArray.java:87)
                      at android.support.v7.app.AppCompatDelegateImplBase.<init>(AppCompatDelegateImplBase.java:128)
                      at android.support.v7.app.AppCompatDelegateImplV9.<init>(AppCompatDelegateImplV9.java:149)
                      at android.support.v7.app.AppCompatDelegateImplV11.<init>(AppCompatDelegateImplV11.java:29)
                      at android.support.v7.app.AppCompatDelegateImplV14.<init>(AppCompatDelegateImplV14.java:54)
                      at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:202)
                      at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:183)
                      at android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:519)
                      at android.support.v7.app.AppCompatActivity.onCreate(AppCompatActivity.java:70)
                      at pick.image.com.myapplication.ImagePickActivity.onCreate(ImagePickActivity.java:118)
                      at android.app.Activity.performCreate(Activity.java:5231)
                      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1104)
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2157)
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2243) 
                      at android.app.ActivityThread.access$800(ActivityThread.java:135) 
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
                      at android.os.Handler.dispatchMessage(Handler.java:102) 
                      at android.os.Looper.loop(Looper.java:136) 
                      at android.app.ActivityThread.main(ActivityThread.java:5019) 
                      at java.lang.reflect.Method.invokeNative(Native Method) 
                      at java.lang.reflect.Method.invoke(Method.java:515) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
                      at dalvik.system.NativeStart.main(Native Method) 
StormKid commented 6 years ago

不知道是哪里配置问题还是说我APP插件本身的问题,此项目宿主调用sample里面的demo1 和 demo3是完全没问题的

StormKid commented 6 years ago

经过仔细研究发现插件内部配错了东西导致的问题,没有将引用classpath的位置写在android{}外部

monty8800 commented 6 years ago

@StormKid 我也碰到这个问题了,作为单品运行时没问题,作为插件就有问题。您如何解决的?是插件的buidle有问题么?

StormKid commented 6 years ago

@monty8800 仔细看classpath的位置,要放在外部,gradle配置位置很重要

monty8800 commented 6 years ago

@StormKid 我的插件gradle中没有classpath啊

apply plugin: 'com.android.application'

android {
    compileSdkVersion rootProject.ext.compileSdkVersion

    defaultConfig {
        applicationId "com.rlzz.receivemanagement"
        minSdkVersion rootProject.ext.minSdkVersion
        targetSdkVersion rootProject.ext.targetSdkVersion
        versionCode 1
        versionName "1.0"
        multiDexEnabled false
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        vectorDrawables.useSupportLibrary = true
    }

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

    lintOptions {
        abortOnError false
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    flavorDimensions "app"
    productFlavors {
        plugin {
            dimension "app"
        }
        local {
            dimension "app"
        }
    }
}

apply plugin: 'replugin-plugin-gradle'

repluginPluginConfig {
    //插件名
    pluginName = "ReceiveManagement"
    //宿主app的包名
    hostApplicationId = "com.rlzz.wms"
    //宿主app的启动activity
    hostAppLauncherActivity = "com.rlzz.wms.MainActivity"
}

configurations {
    /** 所有插件排除 fragment 依赖 */
    all*.exclude group: 'com.android.support', module: 'support-fragment'
}

dependencies {
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
    implementation "com.android.support:appcompat-v7:$rootProject.ext.supportVersion"
    implementation project(':base')
    pluginCompileOnly files('../core/fragment-27.0.2.jar')
    pluginCompileOnly files('../core/library.jar')

    localImplementation files('../core/fragment-27.0.2.jar')
    localImplementation files('../core/library.jar')

    pluginCompileOnly 'org.greenrobot:eventbus:3.1.1'
    localImplementation 'org.greenrobot:eventbus:3.1.1'

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

    implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.35'

    implementation 'com.github.GrenderG:Toasty:1.2.8'

    localImplementation 'com.orhanobut:logger:2.1.1'

    implementation 'com.jakewharton:butterknife:8.8.1'

    annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'

    implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.0.5'

    implementation "io.reactivex.rxjava2:rxandroid:$rootProject.ext.rxandroidVersion"

    pluginCompileOnly "com.squareup.retrofit2:retrofit:$rootProject.ext.retrofitVersion"
    pluginCompileOnly "com.squareup.retrofit2:converter-gson:$rootProject.ext.converterGsonVersion"
    pluginCompileOnly "com.squareup.retrofit2:adapter-rxjava2:$rootProject.ext.adapterRxjava2Version"
    pluginCompileOnly "com.squareup.retrofit2:converter-scalars:$rootProject.ext.converterScalarsVersion"
    pluginCompileOnly "com.squareup.okhttp3:okhttp:$rootProject.ext.okhttpVersion"
    pluginCompileOnly "com.squareup.okhttp3:logging-interceptor:$rootProject.ext.loggingInterceptorVersion"
    pluginCompileOnly "io.reactivex.rxjava2:rxjava:$rootProject.ext.rxjavaVersion"

    localImplementation "com.squareup.retrofit2:retrofit:$rootProject.ext.retrofitVersion"
    localImplementation "com.squareup.retrofit2:converter-gson:$rootProject.ext.converterGsonVersion"
    localImplementation "com.squareup.retrofit2:adapter-rxjava2:$rootProject.ext.adapterRxjava2Version"
    localImplementation "com.squareup.retrofit2:converter-scalars:$rootProject.ext.converterScalarsVersion"
    localImplementation "com.squareup.okhttp3:okhttp:$rootProject.ext.okhttpVersion"
    localImplementation "com.squareup.okhttp3:logging-interceptor:$rootProject.ext.loggingInterceptorVersion"
    localImplementation "io.reactivex.rxjava2:rxjava:$rootProject.ext.rxjavaVersion"

}
StormKid commented 6 years ago

@monty8800 repluginHostConfig { /**

monty8800 commented 6 years ago

@StormKid 有问题的位置在这里

configurations {
    /** 所有插件排除 fragment 依赖 */
    all*.exclude group: 'com.android.support', module: 'support-fragment'
}

只要加上这一段就会出问题,但是不加的话我用宿主调用插件Fragment又会报错。 @cundong