Shadow icon indicating copy to clipboard operation
Shadow copied to clipboard

插件项目存在自定义flavorDimensions时报has unknown dimension 'Shadow'

Open GitHubShy opened this issue 3 years ago • 7 comments

Hi guys! 我自己写的一个demo,是可以跑起来这一套逻辑的。但是我在我的插件项目里面就简单写个apply plugin: 'com.tencent.shadow.plugin'怎么一直报如下错误:

Caused by: java.lang.RuntimeException: Flavor 'normal' has unknown dimension 'Shadow'. at com.android.build.gradle.internal.ProductFlavorCombo.createCombinations(ProductFlavorCombo.java:104) at com.android.build.gradle.internal.VariantManager.populateVariantDataList(VariantManager.java:1038) at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:81) at com.android.build.gradle.internal.VariantManager.createAndroidTasks(VariantManager.java:360) at com.android.build.gradle.BasePlugin.lambda$createAndroidTasks$6(BasePlugin.java:800) at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:81) at com.android.build.gradle.BasePlugin.createAndroidTasks(BasePlugin.java:795) at com.android.build.gradle.BasePlugin.lambda$null$4(BasePlugin.java:690) at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:81) at com.android.build.gradle.BasePlugin.lambda$createTasks$5(BasePlugin.java:686) at org.gradle.internal.event.BroadcastDispatch$ActionInvocationHandler.dispatch(BroadcastDispatch.java:91) at org.gradle.internal.event.BroadcastDispatch$ActionInvocationHandler.dispatch(BroadcastDispatch.java:80)


Gradle代码: apply plugin: 'com.android.application' apply plugin: 'com.tencent.shadow.plugin' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions'

android { compileSdkVersion 28

defaultConfig {
    project.archivesBaseName = "Monster"
    applicationId "com.center.Monster"
    minSdkVersion 25
    multiDexEnabled true

    ndk {
        abiFilters 'armeabi-v7a'
    }
    testInstrumentationRunner "com.senter.monitordaemon.testRunner.TestRunnerEmpty"
}

def flavorDistrict = "district"
def flavorDevice = "Device"
flavorDimensions flavorDevice, flavorDistrict

productFlavors {
    device1 {
        dimension flavorDevice
    }
    district1 {
        dimension flavorDistrict
    }

}

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}

}

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

testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'com.android.support:multidex:1.0.3'


compileOnly 'com.tencent.shadow.core:runtime:1.0.0'

}

GitHubShy avatar Feb 16 '22 01:02 GitHubShy

应该是因为'flavorDimensions flavorDevice, flavorDistrict'把plugin自动添加的Shadow Dimension给覆盖掉了。

shifujun avatar Feb 16 '22 01:02 shifujun

应该是因为'flavorDimensions flavorDevice, flavorDistrict'把plugin自动添加的Shadow Dimension给覆盖掉了。

那这应该咋整啊

GitHubShy avatar Feb 16 '22 01:02 GitHubShy

https://github.com/Tencent/Shadow/blob/57fe9126c281d39ee5bbb350a74d486426abcd22/projects/test/gradle-plugin-agp-compat-test/stub-project/build.gradle#L50

这样写,把已存在的Dimension也添加回去就可以了。

shifujun avatar Feb 16 '22 03:02 shifujun

https://github.com/Tencent/Shadow/blob/57fe9126c281d39ee5bbb350a74d486426abcd22/projects/test/gradle-plugin-agp-compat-test/stub-project/build.gradle#L50

这样写,把已存在的Dimension也添加回去就可以了。 非常感谢! 还有个问题是不是我们插件的Gradle和AGP是不是也得和你们的框架的兼容

GitHubShy avatar Feb 16 '22 08:02 GitHubShy

还有个问题是不是我们插件的Gradle和AGP是不是也得和你们的框架的兼容

不用完全一致。可以在这里看到Shadow有自动化测试这些版本的兼容性:

https://github.com/Tencent/Shadow/blob/57fe9126c281d39ee5bbb350a74d486426abcd22/projects/test/gradle-plugin-agp-compat-test/test.sh#L30-L48

shifujun avatar Feb 16 '22 08:02 shifujun

还有个问题是不是我们插件的Gradle和AGP是不是也得和你们的框架的兼容

不用完全一致。可以在这里看到Shadow有自动化测试这些版本的兼容性:

https://github.com/Tencent/Shadow/blob/57fe9126c281d39ee5bbb350a74d486426abcd22/projects/test/gradle-plugin-agp-compat-test/test.sh#L30-L48

Hi, 现在我在宿主app里面加了android:sharedUserId="android.uid.system"变成系统app后,SDK会报错,因为Android禁止系统app使用webview

if (uid == android.os.Process.ROOT_UID || uid == android.os.Process.SYSTEM_UID) { throw new UnsupportedOperationException( "For security reasons, WebView is not allowed in privileged processes"); }

@shifujun caused by here https://github.com/Tencent/Shadow/blob/851ba611b3dcec3fbcf2e117e2b8bb1ea222276e/projects/sdk/core/loader/src/main/kotlin/com/tencent/shadow/core/loader/blocs/CreateResourceBloc.kt#L33-L38

GitHubShy avatar Feb 17 '22 01:02 GitHubShy

和当前issue不相关的问题最好另外提issue。如果不需要使用WebView,可以删掉这段代码。

shifujun avatar Feb 21 '22 09:02 shifujun