1. ホーム
  2. アンドロイド

aapt.exeが0以外の終了値1で終了するAndroidコンパイルの完璧な解決法 吐血整理

2022-02-24 02:04:16

問題の説明

オーナーが数週間前に手がけたプロジェクトのソースコード。 https://github.com/nikolajohn/NFC-Based-Multiplexed-Sensor

最近、グループのニーズにより、このプロジェクトを再び取り上げ、使用しています。

しかし、それは報告された驚くべきエラーで開かれました

エラーメッセージはシンプルですが、当然ながらエラーメッセージがシンプルであるため、得られる情報はごくわずかです

Process 'command 'C:\Users\Administrator\AppData\Local\Android\Sdk\build-tools\27.0.0\aapt.exe'' finished with non-zero exit value 1

画像にあるように

最初はオーナーも、ちょっと何かを変えただけの小さなミスだと思い、最初は問題視もしなかったのですが

しかし、彼がqwqの振る舞いを教わるまで、そう時間はかからなかった。

オーナーはこの小さな問題に丸2日間も悩まされ、その間、あらゆる方法を試したが効果がなく、恥ずかしながら師匠とプロジェクトチームに報告した。

Google、Baidu、Bing、StackOverflow、CSDNなどを調べてみると、多くの友人がこの問題に遭遇しており、解決策をまとめると次のようになります。

  • Android Studioの問題、再起動してから開く
  • キャッシュの削除、再構築の問題
  • SDKのバージョンに関する問題
  • プロジェクト内の様々なパッケージ間のバージョン管理の問題
  • リソースファイルの問題 使用される画像はjpgではなくpngであるべきです。
  • Build.Gradle ファイルに数行のコードを追加してください...

まず、上記のこれらの方法が有効な方もいらっしゃるかもしれませんが

しかし、それらは私にとってはうまくいかなかった(あるいは、一般的すぎて実用的な解決策を持っていなかった)qwq


問題分析

実は、オーナーはかなり早い段階で、これがリソースファイルの問題であることを知っていたのです。

  • オーナーのプロジェクトでは、バージョンの衝突が起こりやすいサードパーティライブラリを多く使用している
  • .javaファイル内のすべてのRクラスが生成できないので、リソースファイルに何か問題があるに違いありません。

それはそうなんですが、プロジェクトが大きいので、リソースファイルが多すぎるんです

オーナーのリソースファイルなので

適当にディレクトリを開くと、そこには大量の

つまり、所有者はリソースファイルに問題があることを知っていますが、このような多くのリソースファイルの中から問題を見つけ出そうとするのは、干し草の中から針を探すようなものです。

そして、このような問題では、ファイルの中の1行のコードである可能性が高いので、1行ずつ探すのでは、仕事の半分しかできません

最後の赤線を選択すると、Android Studio Buildコンソールからさらにエラーメッセージが表示されます。

ちょうどこんな感じ

オーナーは、このようなエラーのログをすべてプリントダウンして、少しずつ探していたのですが、それでも有用な情報は見つからず、すべての手がかりは、リソースファイルにエラーがあったというところで止まってしまいました

だから、次の質問は明確です。

Android Studioが出すエラーメッセージはそれ以上の情報を提供しないので、デバッグとエラーの場所を特定するためにもっと効率的な方法が必要です

オーナーが参考にした、次のデバッグのためのアイデアを提供する最も重要な記事です。

https://blog.csdn.net/tcpipstack/article/details/51559613

デバッグは、Gradlewの


解決手順

まずwin+Rで、cmdと入力し、コンソールに入ります。

キャリッジリターンの後、javaのバージョンが表示されているかどうかを確認し、表示されていない場合は、以下のようにJDKとJreを設定します。

(参考記事はこちら https://blog.csdn.net/u012187452/article/details/72595040 )

なぜgradlewを使うのにJDKやJreの設定をしなければならないのか、と思う学生もいるかもしれません。

理由は簡単で、お使いのgradlewがjava環境を必要とし、プロジェクトディレクトリにあるgradlew.batのバッチファイルを開くからです

notepad++で開く(Notepad++。 https://notepad-plus-plus.org/download/v7.5.9.html )

約30行ほどで、javaの環境変数が使われていることがわかります。

本題に戻る

Android Studioを開き、この場所をクリックします。

以下は、お使いのJDKのアドレスです。

このディレクトリのコピーを作成し、以下を開きます。

このjreは自分でインストールするのではなく、Android Studioをインストールする際にAndroid Studioが代わりにインストールしてくれます(このパスを見ることで、名声の一部を確認することもできます)。

システム変数で、新規をクリックします。

名前はJAVA_HOMEです、そのまま呼んでください、変更しないでください・・・。

アドレスは、Android Studioからコピーしたものです。

次に、Path 変数を見つけ、それをダブルクリックして編集します。

次に、テキストをクリックして編集します。

この段落を一番上にコピーし、自分で変更しないように注意しながら、一字一句コピーしてください。

%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

追加後、以下のようになります。

そして、この新しい

変数名はclasspath

変数の値は以下の通りです。(一語一語、頭にドットをつけて、現在のパスを表し、追加しなければならないことに注意してください)

. ;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar 

<イグ

パースするか、cmdの中に入って見てください。

これは、セットアップがうまくいったことを意味します。

次に、Android Studioに戻って、この場所を以下のように開きます。

Android Studioに付属するターミナルを使ったデバッグ方法

もちろん、cmdでも可能で、実は同じなのですが、その場合は少し面倒です

cmdの一般的なコマンド。

  • dir 現在のディレクトリにあるすべてのファイルまたはディレクトリを表示します。
  • cd **はディレクトリに入る、**はディレクトリ名
  • cd ... 前のディレクトリに戻る

このAndroid端末で、java -versionと入力すると、次のように表示されます。

次に、非常に重要なコマンドを入力します。

gradlew processDebugResources --debug

そして、プロジェクトのコンパイルが開始され、画面にたくさんのコンパイルログメッセージが出力されます。

これは情報量が多いので、一つ一つ見ていけば、何日でも見ていられるかもしれませんね

しかし、この情報は私たちに多くのヒントを与えてくれるのが良いところです。

では、多くの情報から欲しいものを見つけるにはどうしたらいいのでしょうか。

マウスで下から引っ張る

一番上まで引っ張る

Notepad++を開き、すべての情報をコピーします。

うーん...。確かに大げさですね

次にCtrl+Fでaaptとヒット数を検索します。

このログ全体でaaptというキーワードが9回出現していることがわかります。

エラーは aapt で報告されているので、aapt の情報に注目します。

実は、ここにかなり明確に示されています。

16:10:03.184 [INFO] [org.gradle.process.internal.DefaultExecHandle] Successfully started process 'command 'C:\Users\Administrator\AppData \Local\Android\Sdk\build-tools\27.0.0\aapt.exe''
16:10:03.844 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Changing state to: FAILED
16:10:03.844 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Process 'command 'C:\Users\Administrator\AppData\Local\Android\Sdk \build-tools\27.0.0\aapt.exe'' finished with exit value 1 (state: FA
ILED)
16:10:03.845 [DEBUG] [org.gradle.api.Project] Failed to generate resource table for split ''
16:10:03.855 [ERROR] [org.gradle.api.Project] C:\Users\Administrator\Desktop\NFC-Based-Multiplexed-Sensor-master\app\build\ intermediates\res\merged\debug\values\values.xml:129:41-72: AAPT: No resource fo
und that matches the given name (at 'app_color_description' with value '@color/qmui_config_color_gray_5').

16:10:03.856 [ERROR] [org.gradle.api.Project] Failed to generate resource table for split ''
C:\Users\Administrator\Desktop\NFC-Based-Multiplexed-Sensor-master\app\build\intermediates\res\merged\debug\values\values.xml:129: error: Error: No resource found that matches the given name (at 'app_col
or_description' with value '@color/qmui_config_color_gray_5').


彼は道を教えてくれる

何が問題なのかを示す

そのファイルを開くと、そこには

直接コメントアウトすることで、完璧な解決策を!

なぜこのような問題が発生するのでしょうか?オーナーが以前QMUI UIライブラリを使用したが、その後うまく動作しないことがわかり、あきらめたが、ライブラリはプロジェクトに常に含まれていたからです

最近、Android Pluginがアップデートされ、ライブラリが使えないことが判明したため、オーナーはいくつかの小物がまだきれいになっていないことに気づかず、直接ライブラリを削除してしまいました(実際にはいくつかありますが、この記事のデモでは1つだけデモしています)。

この新しいデバッグ方法がなかったら、いつまでやっていたことやら...。


その他のリファレンス

最も重要な2つの参考文献は、本文中で言及したとおりです。

このほかにも、gradlewを理解するのに役立つ記事がたくさんあります。

https://blog.csdn.net/CheDanDeHuiYi/article/details/78513444

https://blog.csdn.net/liveTXL/article/details/79083811

https://blog.csdn.net/suwu150/article/details/81006992

https://blog.csdn.net/a925177652/article/details/68947539