Ionic構建打包apk出現的問題集合


當我們寫完 ionic 項目准備打包成 apk 時(比如執行 ionic cordova platform add android 或者 ionic cordova build android 等命令),經常會出現一些莫名其妙的問題,特別是對原生開發並不太熟悉的人,往往就是一臉懵逼啊。

因此,很有必要將這些經常出現的問題及對應解決方案做一個匯總,方便查閱。

問題1

BUILD FAILED

Total time: 29.304 secs
Error: cmd: Command failed with exit code 1 Error output:
ERROR: In <declare-styleable> FontFamilyFont, unable to find attribute android:font
ERROR: In <declare-styleable> FontFamilyFont, unable to find attribute android:fontStyle
ERROR: In <declare-styleable> FontFamilyFont, unable to find attribute android:fontVariationSettings
ERROR: In <declare-styleable> FontFamilyFont, unable to find attribute android:fontWeight
ERROR: In <declare-styleable> FontFamilyFont, unable to find attribute android:ttcIndex


FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':processArmv7ReleaseResources'.
> com.android.ide.common.process.ProcessException: Failed to execute aapt

產生原因

主要原因是 cordova-plugin-compat 插件升級引起的,該插件已經包含在 cordova-android 6.3.0 中。如果你的應用使用了地理定位、文件操作或者其它依賴 cordova-plugin-compat 插件的插件的話,而 cordova-plugin-compat 這個插件已經包含在 cordova-android 6.3.0,如果你的 cordova-android 版本小於 6.3.0,則會出現這個問題。

解決方法

  • 升級 cordova-android@6.3.0 以上
  • 升級 android-sdk/platforms 到 android-26 以上
  • 刪除 cordova-plugin-compat 插件,刪除 plugins/android.jsonplugins/fetch.json 中有關該插件的信息,並升級依賴該插件的其它所有插件

參考資料

https://forum.ionicframework.com/t/android-build-broken-after-gradle-dependencies-update-execution-failed-for-task-processdebugresources-com-android-ide-common-process-processexception-failed-to-execute-aapt/109982/80

問題2

Error: Could not find an installed version of Gradle either in Android Studio,
or on your system to install the gradle wrapper. Please include gradle
in your path, or install Android Studio

產生原因

window 開發環境下沒有將 gradle 配置到環境變量 path 中。

解決方法

  • https://services.gradle.org/distributions/ 下載對應版本的 gradle,如 gradle-3.3-bin.zip
  • gradle-3.3-bin.zip 解壓之后放置到某個目錄下,如 D:\Program Files\gradle-3.3
  • 在環境變量 path 中添加 D:\Program Files\gradle-3.3\bin
  • 打開 cmd 輸入 gradle -v,驗證是否配置成功

參考資料

https://blog.csdn.net/capmiachael/article/details/73289478

問題3

下載 gradle-xxx-all.zip 太慢或失敗

BUILD SUCCESSFUL

Total time: 6.591 secs
Subproject Path: CordovaLib
Downloading https://services.gradle.org/distributions/gradle-3.3-all.zip
...

產生原因

下載 gradle 是直接在 http://services.gradle.org/distributions/ 上下載的,由於國內網絡的限制,而 gradle-x.x-all.zip 文件比較大(60M以上),因此下載的過程會比較漫長,有時候會下載失敗(當然如果有梯子,這個問題應該就不存在了,但是下載應該也不會太快)。

解決方法

  • https://services.gradle.org/distributions/ 下載對應版本的 gradle,如 gradle-3.3-all.zip
  • 無需下載,放在項目下的 platforms/android/gradle 目錄下
  • 找到項目下的 platforms/android/cordova/lib/builders/GradleBuilder.js,然后修改其中的 var distributionUrl = process.env['CORDOVA_ANDROID_GRADLE_DISTRIBUTION_URL'] || 'http\\://services.gradle.org/distributions/gradle-2.14.1-all.zip';var distributionUrl = process.env['CORDOVA_ANDROID_GRADLE_DISTRIBUTION_URL'] || '../gradle-3.3-all.zip';

參考資料

https://www.cnblogs.com/macq/p/6494798.html

問題4

gradle 構建時下載 maven 太慢

產生原因

依然是網絡的原因。

解決方法

  • 使用國內阿里雲的服務,修改項目下的 platforms\android\build.gradle 為:
buildscript {
    repositories {
        maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}
    }
}

allprojects {
    repositories {
        maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}
    }
}

參考資料

https://www.cnblogs.com/Ave-Maria/p/6274621.html

問題5

Execution failed for task ':app:processDebugResources'. > Failed to execute aapt

產生原因

暫時不清楚。

解決方法

/platforms/android 中新建 build-extras.gradle 文件,並添加如下內容:

configurations.all {
    resolutionStrategy {
        force 'com.android.support:support-v4:27.1.0'
    }
}

如果是 cordova-android 7.0.0,則也要在 /platforms/android/app 中新建 build-extras.gradle 文件。

參考資料

https://stackoverflow.com/questions/49162538/running-cordova-build-android-unable-to-find-attribute-androidfontvariation/49172982#49172982

問題6

Error: cmd: Command failed with exit code 1 Error output:
Exception in thread "main" java.lang.RuntimeException: Timeout of 120000 reached waiting for exclusive access to file: C:\Users\laixiangran\.gradle\wrapper\dists\gradle-3.3-all\55gk2rcmfc6p2dg9u9ohc3hw9\gradle-3.3-all.zip
        at org.gradle.wrapper.ExclusiveFileAccessManager.access(ExclusiveFileAccessManager.java:65)
        at org.gradle.wrapper.Install.createDist(Install.java:48)
        at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:107)
        at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:61)

產生原因

主要還是網絡原因,導致無法在 C:\Users\你的用戶名\.gradle\wrapper\dists\gradle-3.3-all\55gk2rcmfc6p2dg9u9ohc3hw9 中解壓 gradle-3.3-all.zip

解決方法

  • https://services.gradle.org/distributions/ 下載對應版本的 gradle,如 gradle-3.3-all.zip
  • -然后在 C:\Users\你的用戶名\.gradle\wrapper\dists\gradle-3.3-all\55gk2rcmfc6p2dg9u9ohc3hw9 中解壓

問題7

Error:Could not find common.jar (android.arch.core:common:1.1.0).
Searched in the following locations:
    https://jcenter.bintray.com/android/arch/core/common/1.1.0/common-1.1.0.jar

產生原因

platforms\android\build.gradle 中有這樣的幾行代碼:

allprojects {
    repositories {
        jcenter()
        maven { url "https://maven.google.com" }
    }
}

報錯的信息表明在 jcenter() 對應的倉庫中無法找到 common.jar,導致 gradle 在編譯時就直接報錯,而不會再往下執行,但其實執行到 maven { url "https://maven.google.com" } 時就可以找到 common.jar

解決方法

jcenter() 放在最后面,修改之后的代碼:

allprojects {
    repositories {
        maven { url "https://maven.google.com" }
        jcenter()
    }
}

參考資料


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM