kezong / fat-aar-android Goto Github PK
View Code? Open in Web Editor NEWA gradle plugin that merge dependencies into the final aar file works with AGP 3.+
License: MIT License
A gradle plugin that merge dependencies into the final aar file works with AGP 3.+
License: MIT License
下载example导入studio中,报错如下:
WARNING: API 'variantOutput.getPackageLibrary()' is obsolete and has been replaced with 'variant.getPackageLibraryProvider()'.
It will be removed at the end of 2019.
根据网上查到的资料说是使用了过时的api,想问下作者,这个问题该怎么解决呢?
A problem was found with the configuration of task ':login:mergeReleaseManifest'.
pecified for property 'mainManifestFile' does not exist.
demo 该如何运行
If you declare a dependency on "com.android.tools.build:gradle" in buildSrc
script instead of buildscript
, the plugin throws an excception. Should handle this case
发现在gradle-5.4.1-all com.android.tools.build:gradle:3.4.1 环境下,会有一个报错。
Caused by: groovy.lang.MissingPropertyException: No such property: absolutePath for class: org.gradle.api.internal.file.DefaultFilePropertyFactory$DefaultDirectoryVar
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:67)
at org.codehaus.groovy.runtime.callsite.GetEffectivePojoPropertySite.getProperty(GetEffectivePojoPropertySite.java:65)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGetProperty(AbstractCallSite.java:298)
at com.kezong.fataar.VariantProcessor.processManifest(VariantProcessor.groovy:160)
at com.kezong.fataar.VariantProcessor.processVariant(VariantProcessor.groovy:93)
at com.kezong.fataar.VariantProcessor$processVariant$1.call(Unknown Source)
at com.kezong.fataar.FatLibraryPlugin.processVariant(FatLibraryPlugin.groovy:75)
at sun.reflect.GeneratedMethodAccessor401.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:104)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:326)
at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:352)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1041)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:821)
at groovy.lang.GroovyObjectSupport.invokeMethod(GroovyObjectSupport.java:44)
at org.gradle.internal.metaobject.BeanDynamicObject$GroovyObjectAdapter.invokeOpaqueMethod(BeanDynamicObject.java:579)
at org.gradle.internal.metaobject.BeanDynamicObject$MetaClassAdapter.invokeMethod(BeanDynamicObject.java:506)
at org.gradle.internal.metaobject.BeanDynamicObject.tryInvokeMethod(BeanDynamicObject.java:191)
at org.gradle.internal.metaobject.ConfigureDelegate.invokeMethod(ConfigureDelegate.java:77)
at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeOnDelegationObjects(ClosureMetaClass.java:398)
at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:338)
at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:68)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:168)
at com.kezong.fataar.FatLibraryPlugin$_apply_closure1$_closure4.doCall(FatLibraryPlugin.groovy:39)
at sun.reflect.GeneratedMethodAccessor400.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:104)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:326)
at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:264)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1041)
at groovy.lang.Closure.call(Closure.java:411)
at groovy.lang.Closure.call(Closure.java:427)
at org.gradle.util.ClosureBackedAction.execute(ClosureBackedAction.java:70)
at org.gradle.util.ConfigureUtil.configureTarget(ConfigureUtil.java:154)
at org.gradle.util.ConfigureUtil.configure(ConfigureUtil.java:105)
at org.gradle.util.ConfigureUtil$WrappedConfigureAction.execute(ConfigureUtil.java:166)
at org.gradle.api.internal.DefaultDomainObjectCollection.all(DefaultDomainObjectCollection.java:158)
at org.gradle.api.internal.DefaultDomainObjectCollection.all(DefaultDomainObjectCollection.java:192)
at org.gradle.api.DomainObjectCollection$all$0.call(Unknown Source)
at com.kezong.fataar.FatLibraryPlugin$_apply_closure1.doCall(FatLibraryPlugin.groovy:38)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:104)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:326)
at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:264)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1041)
at groovy.lang.Closure.call(Closure.java:411)
at org.gradle.configuration.internal.DefaultListenerBuildOperationDecorator$BuildOperationEmittingClosure$1$1.run(DefaultListenerBuildOperationDecorator.java:181)
at org.gradle.configuration.internal.DefaultUserCodeApplicationContext.reapply(DefaultUserCodeApplicationContext.java:58)
at org.gradle.configuration.internal.DefaultListenerBuildOperationDecorator$BuildOperationEmittingClosure$1.run(DefaultListenerBuildOperationDecorator.java:176)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:402)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:394)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:92)
at org.gradle.configuration.internal.DefaultListenerBuildOperationDecorator$BuildOperationEmittingClosure.doCall(DefaultListenerBuildOperationDecorator.java:173)
at sun.reflect.GeneratedMethodAccessor366.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:104)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:326)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1217)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1041)
at groovy.lang.Closure.call(Closure.java:411)
at org.gradle.listener.ClosureBackedMethodInvocationDispatch.dispatch(ClosureBackedMethodInvocationDispatch.java:40)
at org.gradle.listener.ClosureBackedMethodInvocationDispatch.dispatch(ClosureBackedMethodInvocationDispatch.java:25)
at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:42)
at org.gradle.internal.event.BroadcastDispatch$SingletonDispatch.dispatch(BroadcastDispatch.java:230)
at org.gradle.internal.event.BroadcastDispatch$SingletonDispatch.dispatch(BroadcastDispatch.java:149)
at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:58)
at org.gradle.internal.event.BroadcastDispatch$CompositeDispatch.dispatch(BroadcastDispatch.java:324)
at org.gradle.internal.event.BroadcastDispatch$CompositeDispatch.dispatch(BroadcastDispatch.java:234)
at org.gradle.internal.event.ListenerBroadcast.dispatch(ListenerBroadcast.java:140)
at org.gradle.internal.event.ListenerBroadcast.dispatch(ListenerBroadcast.java:37)
at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
at com.sun.proxy.$Proxy34.afterEvaluate(Unknown Source)
at org.gradle.configuration.project.LifecycleProjectEvaluator$NotifyAfterEvaluate$1.execute(LifecycleProjectEvaluator.java:190)
at org.gradle.configuration.project.LifecycleProjectEvaluator$NotifyAfterEvaluate$1.execute(LifecycleProjectEvaluator.java:187)
at org.gradle.api.internal.project.DefaultProject.stepEvaluationListener(DefaultProject.java:1424)
at org.gradle.configuration.project.LifecycleProjectEvaluator$NotifyAfterEvaluate.run(LifecycleProjectEvaluator.java:196)
... 116 more
主library依赖的support包可能是低版本(25),APK集成的是高版本28,25的资源id会进入到R.txt,所以在symbolMap里是肯定存在的;
fataar的R文件是在APK生成时创建的,打fataar包时是不知道依赖的资源是否真实存在,所以我觉得判断过程应该是在APK生成过程中,去修改fataar里的R文件;
java.lang.NoSuchFieldError: No static field abc_action_bar_view_list_nav_layout of type I in class Lmg/rbt/R$layout; or its superclasses (declaration of 'mg.rbt.R$layout' appears in /data/app/cmccwm.mobilemusic-vPfTr5Z-AgBjr9exDFh8uQ==/base.apk:classes2.dex)
Hi,
The latest Android Gradle plugin breaks the fat-aar plugin :
Cannot expand ZIP '****\intermediates\compile_only_not_namespaced_r_class_jar\release\generateReleaseRFile\R.jar' as it does not exist.
Path of the R.jar file with 3.4.2 :
intermediates\compile_only_not_namespaced_r_class_jar\release\generateReleaseRFile\R.jar
Path of the R.jar file with 3.5.0 :
intermediates\compile_only_not_namespaced_r_class_jar\release\R.jar
One step is really important : clean before trying to reproduce this error. Without a clean, old generated files are still present and are used by the plugin.
I think the fix should be made here by adding another case without the last part of the path (/generate${mVariant.name.capitalize()}RFile
) :
I tried to build by manually puting the R.jar file in the old path and it seems to work, so it may be the only broken thing.
When I build the fat aar, the r-classes.jar has R files for all embedded modules but not the main module
警告: [options] 未与 -source 1.7 一起设置引导类路径
/Users/zhoupengfei/StudioProjects/game_sdk/testmerge/build/intermediates/exploded-aar/release/r/com/bytedance/sdk/account/open/aweme/R.java:290: 错误: 找不到符号
public static final int abc_config_showMenuShortcutsWhenKeyboardPresent = com.ss.union.testmerge.R.bool.abc_config_showMenuShortcutsWhenKeyboardPresent;
^
符号: 变量 abc_config_showMenuShortcutsWhenKeyboardPresent
位置: 类 bool
/Users/zhoupengfei/StudioProjects/game_sdk/testmerge/build/intermediates/exploded-aar/release/r/com/bytedance/sdk/account/open/aweme/R.java:335: 错误: 找不到符号
public static final int error_color_material = com.ss.union.testmerge.R.color.error_color_material;
然而 这些文件是 这个module依赖了 appcompatV7 这些文件是V7里面的 ,可是我在 生成的R.java文件中 确实看到有这么个属性 ,但是就是报错 一直卡在这了
gradle插件版本3.4。1
gradle版本 5.1.1
fat-aar版本是 1.1.11
Hi,
I am using your plugin. My use case is as below:
I am developing one module 'lib1' which internally uses a third party aar 'lib2'.I want to merge that 'lib2' into my codebase so that our merchant can import 'lib1' and get working.
'lib2' internally uses 'raw' asset. I merged the two codebases using your plugin as an example of "lib-aar-local".For merging, I ran the task assembleRelease in Android Studio. When I analyzed the merged aar I found that some code base also comes in libs folder whereas those files weren't visible when I individually analyze "lib2".Actually, that libs folder content is increasing the size of my fat aar .Can I skip that libs folder content somehow?
I have an aar file, I pasted it in libs folder and built an another aar using your plugin. It build successfully but I'm facing this below issue on the application side.
Any idea?
java.lang.NoSuchFieldError: No static field avd_hide_password of type I in class Lcom/samplelibrary/R$drawable; or its superclasses (declaration of 'com.samplelibrary.R$drawable' appears in /data/app/demo.example.samplelibrary-UsdjnpGEsXDda3KVnopmZQ==/base.apk)
运行Demo的时候报的异常,可以看到aar包里是有这个资源的,但是R文件里没有生成这个id
fat-aar后lib的AndroidManifest ${applicationId} 会变为lib的包名
example:
1、lib的包名com.kezong.demo.lib
2、AndroidManifest 下
<provider
android:authorities="${applicationId}.InitProvider"
android:exported="false"
android:name=".InitProvider"/>
3、fat-aar后变为
<provider
android:authorities="com.kezong.demo.lib.InitProvider"
android:exported="false"
android:name="com.kezong.demo.lib.InitProvider"/>
4、fat-aar后希望结果:
<provider
android:authorities="${applicationId}.InitProvider"
android:exported="false"
android:name="com.kezong.demo.lib.InitProvider"/>
When I run using Android Gradle plugin version 3.3, I get the following error:
ERROR: No such property: absolutePath for class: org.gradle.api.internal.file.DefaultProjectLayout$DefaultDirectoryVar
如题 1.1.11是可以的 ,切换到1.2.3 就有问题
ERROR: Unable to resolve dependency for ':lib-main@debug/compileClasspath': Failed to transform artifact 'lib-aar.aar (project :lib-aar)' to match attributes {artifactType=jar}
大佬,我下载你的demo,example打开报错
Hi,
Firstly, thank you for the plugin.
There seems to be a bug where it is including transitive dependencies in final artifact when I have a custom artifact with pom file.
Reference artifact in build.gradle
// aar dependency
embed 'com.custom.aar:0.0.1'
compileOnly 'com.custom.aar:0.0.1'
pom file (partial) for the artifact
<dependency>
<groupId>org.jetbrains.kotlinx</groupId>
<artifactId>kotlinx-coroutines-core</artifactId>
<version>1.1.1</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlinx</groupId>
<artifactId>kotlinx-coroutines-android</artifactId>
<version>1.1.1</version>
<scope>runtime</scope>
</dependency>
My understanding is any dependency with runtime
scope should not be included in final artifact?
Does it currently support different both buildTypes & productFlavours? @kezong
embed的aar manifest中有中文注释时,merge出来的manifest中有乱码,应该是编码问题。
出现 2 字节的 UTF-8 序列的字节 2 无效。
No signature of method: org.gradle.api.internal.artifacts.DefaultResolvedArtifact.getBuildDependencies() is applicable for argument types: () values: []
Looks like when I'm activating transitive
into true
, show this error:
Execution failed for task ':app:packageReleaseResources'.
> Error: java.lang.RuntimeException: java.lang.RuntimeException: Error while processing /User/home/app/build/intermediates/exploded-aar/com.android.support/appcompat-v7/28.0.0/release/res/drawable/abc_ic_search_api_material.xml : Can't process attribute android:fillColor="@android:color/white": references to other resources are not supported by build-time PNG generation. See http://developer.android.com/tools/help/vector-asset-studio.html for details.
Does the problem related to this issue #15 and the cause for duplicated dependencies?
/×××/build/intermediates/exploded-aar/r/com/***/R.java:2493: 错误: 找不到符号
public static int[] ActionMenuView = ***(自己的包名).R.styleable.ActionMenuView;
^
符号: 变量 ActionMenuView
位置: 类 styleable
1 个错误
这个是为啥?
我想请问下,不是使用embed 命令才会把资源打包进aar吗?,但是我只embed 一遍appcompatv7b包,但是打包时有很多v7包资源重复的报错
configurations.embed.transitive = true
when the transitive dependency set into true
, above error thrown
作者你好。
假设主工程app依赖module1, 然后module1依赖module2。那么我是否只需将主工程app对module1的依赖方式改为文档中说的embed+compileOnly就可以了?还是说module1对module2的依赖方式也要一样的修改掉?
目前我是遇到了#11类似的问题
I have this warning when build
WARNING: API 'variantOutput.getPackageLibrary()' is obsolete and has been replaced with 'variant.getPackageLibraryProvider()'.
It will be removed at the end of 2019.
For more information, see https://d.android.com/r/tools/task-configuration-avoidance.
To determine what is calling variantOutput.getPackageLibrary(), use -Pandroid.debug.obsoleteApi=true on the command line to display a stack trace.
Affected Modules: core
Any plan to fix this warning
?
I get this error after adding plagin and trying to embed some external projects.
gradle version 3.2.1
ansroid studio version - 3.4
I add
configurations.embed.transitive = true
to my :mainLib
build.gradle
and embed ':localModule'
but :localModule
has a remote dependency
implementation 'com.google.zxing:core:3.4.0'
which isn't included in the final aar build
arguably it should be, right?
I'm working around it by stating embed 'com.google.zxing:core:3.4.0'
in my :mainLib
build.gradle
but seeing that ':localModule'` can actually be a dependency in a different repository (via git submodules, or in my case npm providing it for React Native) - I feel like this behaviour that I desire, makes sense to be part of this library
thank you for your work so far, it's been a very helpful tool!
1、3.0.1gradle插件和4.6gradle,远程依赖打不进arr中
2、整个项目rebuild的时候, 整项目会报错,Error:警告: [options] 未与 -source 1.7 一起设置引导类路径
1 个警告
FAILURE: Build failed with an exception.
What went wrong:
Execution failed for task ':lib-main:createRsFiledebug'.
imagepipeline module's AndroidManifest not found
Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
Get more help at https://help.gradle.org
BUILD FAILED in 6s
备注:gradle 插件版本3.1.0 gradle版本4.6,大神请关注
反复build,会导致release中的jni包丢失 1.1.10, 1.1.8都是这样
gradle 3.4.1
com.kezong:fat-aar:1.1.7
目前来看,只有aar类型的依赖本身会被合并到宿主的classes.jar里边,早起的fat-aar gradle脚本是可以的,但是已经不维护了,不支持高版本的gradle
dependencies {
embed 'com.facebook.fresco:fresco:1.11.0'
compileOnly 'com.facebook.fresco:fresco:1.11.0'
}
Set the dependencies above. Then it will build failed with the error log:
FAILURE: Build failed with an exception.
Cannot invoke method replace() on null object
Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
Get more help at https://help.gradle.org
BUILD FAILED in 15s
现在的问题是资源各种冲突,导致编译不成功,特别有很多依赖时!我可以提供一种思路,创建一个空application项目专门依赖各种library项目,build出apk,这里涵盖所有最终的依赖及资源(好处就是我们可以不需要考虑谷歌官方处理的过程,我们只需要拿到最终资源处理就行,重点是我们不需要自己处理,避免过程导致的各种问题,例如资源合并等),我们只要提取出有用的资源生成aar或者jar包,我觉得这是比较妥当的方法,因为这不需要你考虑工程结构及后期谷歌开发新功能导致的问题!目前我尝试了下这是可行的,现在的问题是我纯手动去改,比较麻烦,希望你能对过程直接实现自动化!这种好处可以做插件化!希望你能多抽时间处理下,我现在急需这个功能!
打包失败后,修改里面的libPackageName为aarPackageName,
sb << " public static $type
打包成功,但是在使用打出的fat-aar后,提示资源id找不到。
1.Aaar的activity_a的值是0x7f0f001c,Baar的activity_b的也是0x7f0f001c,合并后,main lib的activity_main的值是0x7f0f001c,,,activity_a的值是0x7f0f001d,,,,activity_b的也是0x7f0f001e,导致资源id找不到。。。
Steps to reproduce the issue by updating your example app.
lib-aar-child-1
and make it a dependency for lib-aar
.lib-aar-chidl-1
that injects some layout file.lib-main
Process: fataarcom.myapplication, PID: 24168
java.lang.NoSuchFieldError: No static field notification_media_action of type I in class Lcom/kezong/demo/lib/R$layout; or its superclasses (declaration of 'com.kezong.demo.lib.R$layout' appears in /data/app/fataar.com.myapplication-ak0csAas0a06SfPPK9sGkw==/base.apk!classes2.dex)
at com.kezong.demo.libaar.child.R$layout.<clinit>(R.java:1018)
Using android gradle plugin 3.0.1
and trying to add a local aar. Did include flatDirs
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:createRsFiledebug'.
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:100)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:70)
at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:63)
at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:88)
at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:52)
at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.run(DefaultTaskGraphExecuter.java:248)
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:197)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:107)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:241)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:230)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.processTask(DefaultTaskPlanExecutor.java:124)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.access$200(DefaultTaskPlanExecutor.java:80)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:105)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:99)
at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.java:625)
at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.executeWithTask(DefaultTaskExecutionPlan.java:580)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:99)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NullPointerException: Cannot invoke method replace() on null object
at org.codehaus.groovy.runtime.NullObject.invokeMethod(NullObject.java:91)
at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:48)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
at org.codehaus.groovy.runtime.callsite.NullCallSite.call(NullCallSite.java:35)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:133)
at com.kezong.fataar.VariantProcessor.createRFile(VariantProcessor.groovy:441)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:384)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1022)
at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:69)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:52)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:154)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:174)
at com.kezong.fataar.VariantProcessor$_createRFileTask_closure27$_closure38.doCall(VariantProcessor.groovy:476)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:294)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1022)
at groovy.lang.Closure.call(Closure.java:414)
at groovy.lang.Closure.call(Closure.java:430)
at org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:2040)
at org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:2025)
at org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:2066)
at org.codehaus.groovy.runtime.dgm$162.invoke(Unknown Source)
at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoMetaMethodSiteNoUnwrapNoCoerce.invoke(PojoMetaMethodSite.java:274)
at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:56)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)
at com.kezong.fataar.VariantProcessor$_createRFileTask_closure27.doCall(VariantProcessor.groovy:474)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:294)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1022)
at groovy.lang.Closure.call(Closure.java:414)
at groovy.lang.Closure.call(Closure.java:430)
at org.gradle.api.internal.AbstractTask$ClosureTaskAction.execute(AbstractTask.java:681)
at org.gradle.api.internal.AbstractTask$ClosureTaskAction.execute(AbstractTask.java:656)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:122)
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:197)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:107)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:111)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:92)
... 30 more
这是我依赖support v4的module的R文件中会有下面这些应该是support包中定义的,如下。实际运行时会报找不到这些attr
public static final class styleable {
public static final int[] ColorStateListItem;
public static final int ColorStateListItem_alpha;
public static final int ColorStateListItem_android_alpha;
public static final int ColorStateListItem_android_color;
public static final int[] CoordinatorLayout;
public static final int CoordinatorLayout_keylines;
public static final int CoordinatorLayout_statusBarBackground;
public static final int[] CoordinatorLayout_Layout;
public static final int CoordinatorLayout_Layout_android_layout_gravity;
public static final int CoordinatorLayout_Layout_layout_anchor;
public static final int CoordinatorLayout_Layout_layout_anchorGravity;
public static final int CoordinatorLayout_Layout_layout_behavior;
public static final int CoordinatorLayout_Layout_layout_dodgeInsetEdges;
My main aar has flavors and I would like to add dependencies based on which flavor is build.
Following gives an error
devEmbed 'com.facebook.fresco:fresco:1.11.0'
Would it be possible to support this?
如果要打包的aar包含另一个aar的时候,资源文件如果两者中都有的话,会报资源文件冲突。
比如两者都有strings.xml,就会报Error: Duplicate resources
未开成功编译出合并后的aar。打开proguard后,一堆note 和 warning,proguard-rules.pro中加
-dontnote并不起作用
我的程序是这样的: 主module A 依赖 module B 和module C 。module B 也依赖module C, 在打包aar时,在主moduleA中加上了embed module B和embed module C ,module B 中对module C的依赖仍沿用 implementation,打包也显示成功。但是引用aar后,使用aar内的功能时闪退,报错如下:
java.lang.NoClassDefFoundError : Failed resolution of : Lcom/serenegiant/common/BaseActivity
这个BaseActivity也就是 module C的基础类。module A 里有import该类,module B没有import该类。同时,我发现aar里的class.jar 里打包进去了 该类,却总报错找不到。想请问一下这个问题有没有什么思路解决,是否是我使用插件不正确,或者这种多层依赖不支持。困惑我好几天,多谢指教!!
Does this fat-aar already support the push to maven gradle?
https://raw.githubusercontent.com/adwiv/android-fat-aar/master/publish.gradle
三个模块
first ----->
provided fileTree(include: ['*.jar'], dir: 'libs')
provided 'com.google.android.material:material:1.0.0'
provided 'androidx.legacy:legacy-support-v4:1.0.0'
// embed (name:'alipaySdk-20180601',ext:'jar')
这里有一个支付宝的jar包,embed加不加都会往里面放
不能用compileOnly,不然AndroidX和一大堆支持包都往里面放了
provided (name:'alipaySdk-20180601',ext:'jar')
<------first
others->>>>>>
embed "com.github.Justson:Downloader:v4.0.3"
provided 'com.github.Justson:Downloader:v4.0.3'
compileOnly 'com.google.android.material:material:1.0.0'
compileOnly 'androidx.legacy:legacy-support-v4:1.0.0'
//embed project(path: ':agentweb-core', configuration:'default')
//provided project(path: ':agentweb-core')
//embed (name:'agentweb-core',ext:'aar')
implementation (name:'agentweb-core',ext:'aar')
<<<<<<<-others
只有第一个模块不存在支持包的依赖,其它的怎么搞都有
使用maven将项目上传至maven时,到bundleReleaseAar就停止了,然后后续的R文件有确实
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.