aapt.exeが0以外の終了値1で終了するAndroidコンパイルの完璧な解決法 吐血整理
問題の説明
オーナーが数週間前に手がけたプロジェクトのソースコード。 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
関連
-
WeChatとQQは、他のアプリのオープンリストに自分のアプリを追加し、ファイルパスを取得することができます
-
android bluetooth--Bluetooth on、検索、ペアリング、接続
-
Androidのカラーグラデーション実装のまとめ
-
新しいAndroidプロジェクトの作成時に、AndroidManifest.xmlファイルが見つからないというプロンプトが表示されます。
-
android.view.inflateexception 例外処理
-
Lottieの使用方法とソースコードの詳細
-
jni/hellocpp/main.cpp:16:18: エラー: '->' のベースオペランドはポインタでない型 'JNIEnv {aka _JNIEnv}' を持っています。
-
android 9.0以降のhideメソッドの反映制限の解析について
-
TaskExecutionException: タスク ':app:transformJackWithJackForDebug' の実行に失敗しました 最も権威と効果のある解決策
-
不明なホスト 'd29vzk4ow07wi7.cloudfront.net' があります。Gradleのプロキシ設定を調整する必要がある場合があります。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Androidのadbデバイスがオフラインであることが判明
-
アプリはGoogle検索でインデックスされません Androidmanifestのクソみたいな黄色い警告
-
repo: コマンドが見つかりません
-
view.getRootView()の本当の意味とテストについて
-
ConstraintLayoutのいくつかのプロパティの概要(RelativeLayoutの強化版、LinearLayoutの比例プロパティを含む、階層ツールの削減)。
-
Androidの美しいSeekBarスタイルのカスタマイズ
-
Android ANR traces.txt ファイルエクスポート解析
-
Viewコントロールでandroid:drawablePaddingが機能しない原因を探る
-
Androidユニットテスト完全解説
-
ADBサーバーからOKを読めなかった && 'adb':nullを実行できなかった