Coder Social home page Coder Social logo

kezong / fat-aar-android Goto Github PK

View Code? Open in Web Editor NEW
3.0K 3.0K 594.0 7.07 MB

A gradle plugin that merge dependencies into the final aar file works with AGP 3.+

License: MIT License

Java 28.80% Groovy 70.98% Kotlin 0.23%
aar android fat-aar fataar gradle-plugin merge-aar

fat-aar-android's People

Contributors

516025 avatar aprz512 avatar caiyonglong avatar idstein avatar ingdas avatar johnnymla avatar judas avatar kanat avatar kezong avatar legion2 avatar mirwisek avatar mkopec87 avatar nmguner avatar ok3141 avatar powerserg17-bunch avatar puboe avatar rdamir86 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

fat-aar-android's Issues

关于example编译错误的问题

下载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,想问下作者,这个问题该怎么解决呢?

上传aar maven报错

A problem was found with the configuration of task ':login:mergeReleaseManifest'.
pecified for property 'mainManifestFile' does not exist.

Detecting AGP in buildSrc

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

No such property: absolutePath for class 报错

发现在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

support包资源id在fataar的R文件中未生成:No static field abc_action_bar_view_list_nav_layout of type I in class Lmg/rbt/R$layout

主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)

Android Gradle Plugin 3.5.0 Compatibility

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) :

ConfigurableFileCollection getRClassPath() {

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.

Missing R file

When I build the fat aar, the r-classes.jar has R files for all embedded modules but not the main module

R.txt 错误 找不到符号

警告: [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

Issue in larger size aar than combined one

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?

Unable to build aar using another aar file

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)

lib的AndroidManifest ${applicationId} 失效

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"/>

Does not work with Gradle plugin 3.3

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

运行demo报错

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打开报错

Transitive dependency with Runtime scope are included in fat-aar

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?

Not working with Gradle plugin 3.4

No signature of method: org.gradle.api.internal.artifacts.DefaultResolvedArtifact.getBuildDependencies() is applicable for argument types: () values: []

Execution failed for appcompat 28 references to other resources are not supported by build-time PNG generation. `configurations.embed.transitive = true`

@kezong

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?

合并多module资源重复

我想请问下,不是使用embed 命令才会把资源打包进aar吗?,但是我只embed 一遍appcompatv7b包,但是打包时有很多v7包资源重复的报错

请问对于多级依赖的项目是否适用?

作者你好。
假设主工程app依赖module1, 然后module1依赖module2。那么我是否只需将主工程app对module1的依赖方式改为文档中说的embed+compileOnly就可以了?还是说module1对module2的依赖方式也要一样的修改掉?
目前我是遇到了#11类似的问题

WARNING: API 'variantOutput.getPackageLibrary()' is obsolete and has been replaced with 'variant.getPackageLibraryProvider()'

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?

Remote dependencies of local dependencies not included

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!

关于3.0.1版本兼容问题

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,大神请关注

Execution failed for task ':xxxxxx:createRsFilerelease'. > Cannot invoke method replace() on null object

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.

  • What went wrong:
    Execution failed for task ':xxxxxxx:createRsFilerelease'.

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包,我觉得这是比较妥当的方法,因为这不需要你考虑工程结构及后期谷歌开发新功能导致的问题!目前我尝试了下这是可行的,现在的问题是我纯手动去改,比较麻烦,希望你能对过程直接实现自动化!这种好处可以做插件化!希望你能多抽时间处理下,我现在急需这个功能!

多个aar的合并打aar失败

打包失败后,修改里面的libPackageName为aarPackageName,
sb << " public static $type $name = ${aarPackageName}.R.${subclass}.${name};" << '\n'
打包成功,但是在使用打出的fat-aar后,提示资源id找不到。
1.Aaar的activity_a的值是0x7f0f001c,Baar的activity_b的也是0x7f0f001c,合并后,main lib的activity_main的值是0x7f0f001c,,,activity_a的值是0x7f0f001d,,,,activity_b的也是0x7f0f001e,导致资源id找不到。。。

Can't resolve resource for child modules

Steps to reproduce the issue by updating your example app.

  1. Create a library module lib-aar-child-1 and make it a dependency for lib-aar.
  2. Create any activity in lib-aar-chidl-1 that injects some layout file.
  3. Build lib-main
  4. Create an application that consume fat-aar created in step 3
  5. With-in the sample application start activity you created in step 2
  6. Now launch the sample application - it will fail with following error
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)

Getting an error - Cannot invoke method replace() on null object

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

1.2.3上打包,子module依赖support v4,最终打出的包把support包的attr定义打入了。运行时报错

这是我依赖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;

Flavor support while specifying core dependency

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?

开启proguard编译不通过

未开成功编译出合并后的aar。打开proguard后,一堆note 和 warning,proguard-rules.pro中加
-dontnote并不起作用

多module依赖,引用aar时报错,找不到底层module的基础类。

我的程序是这样的: 主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 里打包进去了 该类,却总报错找不到。想请问一下这个问题有没有什么思路解决,是否是我使用插件不正确,或者这种多层依赖不支持。困惑我好几天,多谢指教!!

multiple module aar build not correctly

三个模块
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

只有第一个模块不存在支持包的依赖,其它的怎么搞都有

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.