解决Android Studio 新项目报错 AAPT2 error: check logs for details

昨天给项目添加了SmartRefreshLayout框架后,因为SmartRefreshLayout的“com.aaron.gradle.bintray-release” gradle使用的4.4版本所以原本的项目4.6也进行了降级操作。

  • 项目中在 Gradle 包装中gradle/wrapper/gradle-wrapper.properties文件修改编辑 URL:distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip
  • 在项目级生成. gradle 文件中更改插件版本,项目的build.gradle文件中:

    dependencies {
            classpath 'com.android.tools.build:gradle:3.1.1'

            classpath 'com.aaron.gradle:bintray-release:1.3.7' 
        }

本来也用的好好的,上午又改了样式之类后来莫名其妙电脑就卡住动不了,等再能动时候发现报了“AAPT2 error: check logs for details”错误。

排查代码

代码排查没有找出问题点。

上网查阅资料,有网友表示“如果有问题可以退回到之前的版本,打开gradle.properties,添加如下内容” 

android.enableAapt2=false 

实践后发现已被废弃

The option 'android.enableAapt2' isdeprecated and should not be used anymore.
Use 'android.enableAapt2=true' to removethis warning.
It removed at the end of 2018..

 很明显,我们使用“android.enableAapt2=false”来关闭AAPT2是行不通的,这个方法已经过时了,关闭之后Android Studio告诉我们要把它打开,这样就陷入了一个死循环,所以我们还是需要找到问题的根本原因在哪里才能解决。

打印报错信息 

在命令行中进入项目的根目录,或者可以在Android studio的Terminal中直接操作也可以,然后敲入一个命令:

gradlew compileDebug --stacktrace

就可以输出较详细的信息,然后根据命令行给出的提示,还可以在后面加上-info或者-debug的选项得到更详细的信息,于是这个命令可以这样写:

gradlew compileDebug --stacktrace -info
或者:gradlew compileDebug --stacktrace -debug

 首先报JAVA_HOME找不到目录,去找了下确实如此,改了环境变量后重启了电脑,仍然还是报“AAPT2 error: check logs for details”,再次命令行打印,报错

Error occurred during initialization of VM
Could not reserve enough space for 1572864KB object heap

这个错误的大意就是说IDEA无法给虚拟机分配内存空间。解决这类问题大体是调整idea.exe.vmoptions里面的内存配置。

编译器里调整heap调到2G

 

问题还在,想想这是gradle里报的错,gradle应该有需要占用内存的配置。打开一看,大吃一惊,gradle默认的jvm内存居然就是1536m,对上了报错信息里的1572864KB,所以修改项目中gradle.properties文件的jvm大小 

#org.gradle.jvmargs=-Xmx1536m
org.gradle.jvmargs=-Xmx512m

 改完后又报了新的错误提示

出现Error:Execution failed for task ':app:processDebugResources'

觉得是缓存太多,将android项目build目录下的所有文件删除掉,然后重新编译 后出现新错误提示

14:00:54.181 [DEBUG] [org.gradle.internal.progress.DefaultBuildOperationExecutor] Completing Build operation 'Calculate task graph'

14:00:54.200 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]

14:00:54.200 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] FAILURE: Build failed with an exception.

14:00:54.201 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]

14:00:54.201 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] * What went wrong:

14:00:54.201 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] Task 'compileDebug' is ambiguous in root project 'ECard20190301'. Candid

ates are: 'compileDebugAidl', 'compileDebugAndroidTestAidl', 'compileDebugAndroidTestJavaWithJavac', 'compileDebugAndroidTestNdk', 'compileDebugAndroi

dTestRenderscript', 'compileDebugAndroidTestShaders', 'compileDebugAndroidTestSources', 'compileDebugJavaWithJavac', 'compileDebugNdk', 'compileDebugR

enderscript', 'compileDebugShaders', 'compileDebugSources', 'compileDebugUnitTestJavaWithJavac', 'compileDebugUnitTestSources'.

14:00:54.201 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]

14:00:54.201 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] * Try:

14:00:54.203 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] Run gradlew tasks to get a list of available tasks.  Run with --scan to

get full insights.

注意到这句话Task 'compileDebug' is ambiguous in root project 'DefineViewStudy'. 单词ambiguous是模糊不清的意思.尝试着把命令改为 

gradlew compileDebugJavaWithJavac

这次打印的信息很明了了. 

D:\php\androidProject\ECard20190301>gradlew compileDebugJavaWithJavac

D:\php\androidProject\ECard20190301\app\src\main\res\layout\activity_eventsearch.xml:30: AAPT: error: resource android:color/dim_foreground_inverse_ho

lo_light is private.

error: failed linking file resources.

FAILURE: Build failed with an exception.

* What went wrong:

Execution failed for task ':app:processDebugResources'.

> Failed to process resources, see aapt output above for details.

 代码中确实有被我修改引用module的资源文件,

<com.scwang.smartrefresh.layout.SmartRefreshLayout
            android:id="@+id/refreshLayout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:srlEnablePreviewInEditMode="false">

            <com.scwang.smartrefresh.layout.header.ClassicsHeader
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:srlAccentColor="android:color/dim_foreground_inverse_holo_light
                  "/>

            <android.support.v7.widget.RecyclerView
                android:id="@+id/search_recyclerview"
                android:name="com.php.ecardzz.EventMapCertSearchActivity"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@color/white"
                app:layoutManager="LinearLayoutManager"
                android:scrollbars="vertical"
                android:fadeScrollbars="true"
                android:scrollbarStyle="outsideOverlay"
                tools:context="com.php.ecardzz.EventMapCertSearchActivity"
                tools:listitem="@layout/item_eventsearch_recyclerview" />

                <com.scwang.smartrefresh.layout.footer.ClassicsFooter
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    app:srlClassicsSpinnerStyle="Translate"/>
        </com.scwang.smartrefresh.layout.SmartRefreshLayout>

原因是:低级且致命的错误

资源文件中颜色的值直接引用别的资源的颜色名,直接报错。

修改成

app:srlAccentColor="#ff000000"

问题解决。

猜你喜欢

转载自blog.csdn.net/P876643136/article/details/88724802