Android編譯通過,執行編譯錯誤問題總結

Minla發表於2019-06-24

一.   > Could not find com.android.support:support-annotations:28.0.0.
         Required by:
             project :app > com.android.support:support-v4:21.0.3
      > Could not find com.android.support:support-annotations:28.0.0.
         Required by:
             project :app > ch.acra:acra-http:5.3.0 > ch.acra:acra-core:5.3.0 > ch.acra:acra-javacore:5.3.0

 

       解決方法:

          1.  看異常未找到的是annotations註解包,首先查是否依賴support-annotations,如果依賴了appcompat 包也可以,它的內部包含註解包;

          2.  依賴後不起作用,檢視sdk版本,使用版本對應註解包版本,例如:sdk版本為26,而support-v4使用的21的版本,依賴那句程式碼下面會有紅線;

          3.  其實上面的都沒用,Could not find 是因為 com.android.support 是在google的maven庫中,需要在專案根目錄下的build.gradle 中在 repositories 節點下新增 google();

          4.  第三點新增後可能還不能使用,因為google的maven庫需要gradle外掛版本在3.2.0之上,如下圖:

所以在根目錄下的build.gradle 中還要提高gradle外掛版本,對應的也需要在gradle/wrapper目錄下的gradle-wrapper.properties檔案中調整gradle版本;

二.   > Annotation processors must be explicitly declared now.  The following dependencies on the compile classpath are found to contain annotation processor.  Please add them to the annotationProcessor configuration.
           - butterknife-6.0.0.jar (butterknife-6.0.0.jar)
  Alternatively, set android.defaultConfig.javaCompileOptions.annotationProcessorOptions.includeCompileClasspath = true to continue with previous behavior.  Note that this option is deprecated and will be removed in the future.

 

      解決方法:

          1.  第一種解決方法如英文提示第一種   (重點看上面小括號裡的內容

                 1.1  如果是上面(xxxx.jar),則一定是專案libs目錄下jar檔案:

                         新增依賴  annotationProcessor files("libs/butterknife-6.0.0.jar")

                 1.2  如果是(網路依賴地址),例如:- permissionsdispatcher-processor-3.0.1.jar (com.github.hotchemi.permissionsdispatcher:permissionsdispatcher-processor:3.0.1)

                         新增依賴  annotationProcessor "com.github.hotchemi.permissionsdispatcher:permissionsdispatcher-processor:3.0.1"

          2.  第二種解決方法如英文提示第二種

                 defaultConfig節點下新增   javaCompileOptions { annotationProcessorOptions { includeCompileClasspath = true } } ,最好用第一種,英文提示有說這種會廢棄,但是看你專案的具體環境,我使用第一種時還是編輯不通過。

 

三.   > com.android.build.api.transform.TransformException: com.android.builder.dexing.DexArchiveBuilderException: com.android.builder.dexing.DexArchiveBuilderException: Failed to process C:\Users\XQSKKFJ\.gradle\caches\transforms-1\files-1.1\acra-core-5.3.0.aar\339764307da79406ab48d82ea26a52b1\jars\classes.jar

 

      解決方法:

          1.  最為簡單,在build.gradle中設定java jdk版本為1.8

 

四.   Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'.

> com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives: app/build/intermediates/transforms/dexBuilder/debug/目錄下無數個n.jar報錯(n為整數)

  Learn how to resolve the issue at https://developer.android.com/studio/build/dependencies#duplicate_classes.
  Program type already present: org.acra.sender.HttpSender$Method

 

      解決方法:

          1.  刪掉app下的build目錄,編譯重新生成是沒有用的。重要的是看報錯資訊最下面那句,會提示衝突的位置。例如上面的錯誤就是org.acra.sender.HttpSender這個類存在兩個,一個在本地打的aar中,一個在網路依賴庫,我需要是用網路庫的,就去掉aar中的。(具體根據自己的使用情況)

 

五.  org.gradle.api.internal.tasks.compile.CompilationFailedException: Compilation failed; see the compiler error output for details.
    at org.gradle.api.internal.tasks.compile.JdkJavaCompiler.execute(JdkJavaCompiler.java:52)
    at org.gradle.api.internal.tasks.compile.JdkJavaCompiler.execute(JdkJavaCompiler.java:36)

 

相關文章