私はkotlinを初めて使用し、Javaからいくつかのコードを変換しましたが、何か問題があるようです。findViewById(R.id.my_id)のRが赤で強調表示され、次のメッセージが表示されます。参照:R "..私は解決策を探していましたが、それを理解していないようです。これがスクリーンショットです:
この問題は多くの要因によって引き起こされる可能性がありますが、
com.Android.tools.build:gradle
バージョンによって引き起こされ、バージョンをより安定したものに変更すると問題が解決します:例えば:com.Android.tools.build:gradle:3.4.0-alpha02
with com.Android.tools.build:gradle:3.2.1
また、同じグループのライブラリで異なるバージョンを使用すると、問題が発生したり、実行時エラーが発生する可能性があります。次のようなグループの除外メソッドを使用します。implementation('com.squareup.picasso:picasso:2.71828') { exclude(group: 'com.Android.support') }
この場合、picassoライブラリはAndroid.supportコンポーネントを使用します。picassoで使用されるAndroidライブラリバージョンは、現在使用しているものとは異なります。そのため、この問題を解決するには、サブライブラリとクラスグループから完全に除外する必要があります。
リソースとコードの不一致によっても発生する可能性があります。アクティビティにこのインポート行を含めると、問題が解決する場合があります:import com.package.name.R
Build -> Clean Project / Rebuild Project
-IDEキャッシュのクリーニングはパフォーマンスとメモリにも役立ちます。Android StudioではFile-> Invalidate Chases/ Restart -> Invalidate Cashes and Restart
. , , - , UpperCase or special Letters
などのエラーが発生しますkotlinx.Android.synthetic.main.activity_page.*
またはifカスタムビューを使用している場合:kotlinx.Android.synthetic.main.view_layout.view.*
その後、アクティビティのonCreat()メソッドで、呼び出す必要があるのはid、たとえば:my_edit_text_ID.text = "Kotlin Dbest!"
、またはカスタムビューから:mCostumView.my_edit_text_ID.text = "Kotlin Dbest!"
編集:
私は再びこの問題に直面しましたが、問題は '' R ''ライブラリが2つの異なるソースからインポートされたことでした:
com.Android.R
com.example.package.R
アプリケーションパッケージ名を持つ '' R ''ライブラリのみをインポートする必要があります。この場合はcom.example.package.R
ライブラリがまったくインポートされない場合があります。インポートするには、未解決の参照R
をクリックして押しますAlt + Enter
Com.Android.tools.build:gradle:3.3.0-alpha13を使用しましたが、同じ問題がありました。安定したバージョン3.2.1に変更すると、この問題は解決しました。
したがって、これは誤解を招くエラーです。
私は何が起こっているの30,000フィートのビューを説明するつもりです。これは厳密な順序でも厳密なフローでもありません。かなり近いです;)あなたがより多くを知っているなら、私は正確な順序をしてリンクで修正することに気をつけてください、私はyaを止めません:).
プロセス
Rファイルは生成されたコードです。
世代には秩序があります。
Gradleは魔法を実行し、依存関係を引き出し、最初に警告とエラーツリーを開始します。
その後、AndroidはすべてのKotlinを舞台裏でJavaに変換します。そうです、私たちの愛するKotlinは、愛するART仮想マシン用にコンパイルするために、まだJavaでなければなりません。
その後、実行され、JVM Staticsおよび他のいくつかのタスク用に作成したアダプターが実行されます。次に、すべてのxmlデータバインディングファイルをコンパイルして、生成されたデータバインディングファイルを作成します。
すべてが成功すると、資産とリソースの処理に進みます。コードで参照する各リソースのポインターまたはIDを作成します。次に、実行され、その後、コードとパッケージングプロセスのコンパイルが開始されます。
かなり簡単なプロセスですが、ここに問題があります。
誤解を招くエラー
R生成が完了する前にいずれかのステップが失敗した場合、Rは生成されません。単純な再構築だけで十分な場合もあれば、単純な「ファイル」->「キャッシュの無効化と再起動」だけで十分な場合もあります。ただし、ほとんどの場合、gradle、xml、databinding、またはアダプターにコードの問題があり、コンパイラーがR生成段階に到達することさえ妨げています。
つまり、次の質問は
「さて、エラーが価値がないか存在しない場合、どのようにトラブルシューティングしますか」。
まず、これらのエラーが発生するさまざまな方法について説明しましょう。
次に、問題を引き起こす可能性のある候補について話しましょう。すっごくたくさんあるので笑。
残念ながら、これは、端末ツールにまだUIツールが対応していないEdgeテクノロジーのブリーディングでよく起こります。したがって、ターミナルのプロジェクトルートから実行することをお勧めします
bash gradlew assembleRelease --debug
失敗すると、そうなります。実際にエラーが発生し、次の段階が発生しないようにするために、赤が見つかるまでログをスクロールアップし始めます。
これは、データバインディングの処理を開始するときに特に役立ちます。
ヒント:
データバインディングの処理を開始するときは、他のファイルを実行する前にすぐに認識して、生成を中断せず、追加したばかりのコードが問題を引き起こしていることをより簡単に確認できるようにすることを目標としているため、頻繁にコンパイルして実行するようにしてください遠くに行く前に。
先に進む前に問題を確認するためにコンパイルして実行する時間。
上で述べたように、その理由は多くの変更を避けることであり、生成されたデータバインディングコードに関連する一般的な漠然とした恐ろしいエラーを見つけることはトラブルシューティングの悪夢になります。ツールは改善されると確信していますが、今のところは、データバインディング関連のアイテムを変更する際に、自分自身を優先してコンパイルし、頻繁に実行してください。
ハッピーコーディング
Gradleコマンドを使用します。
Android Studioの右側のメニュー:Gradle -> :app -> Tasks -> build -> clean
。
その後、Gradle -> :app -> Tasks -> build -> build
私は同じ問題を抱えていたので、gradleバージョン3.3からgradleバージョン3.2.1にダウングレードしないようにしました。代わりに、Android Studioをバージョン3.3に更新しました。
これは私のために働いた。どのくらいの作業が必要かは、プロジェクトの大きさに依存します。新しいプロジェクトを開始し、必要なモジュール(XML、Kotlin、色、文字列など)を作成し、古いプロジェクトのモジュールから新しいプロジェクトのモジュールにコードをコピーしました。 XMLをコピーすると、UIを再作成する場合に比べて時間を大幅に節約できます。全体として、少し時間がかかりますが、未解決の参照エラーを修正せずに修正するのにもっと多くの時間を費やしました。
Gradleバージョンのダウングレードはうまくいきました。
私が変更され :
Gradleバージョン:4.10.4から4.4.1
およびGradleプラグインバージョン:3.3.1から3.1.3
Android Studioをバージョン3.3.1に更新し、この問題を解決しました。
これを試して
Content_main.xmlファイルに移動し、そこで変更する必要があります
Android:id="@+id/??????">
コードの行をファイルに指定したIDに追加します。
疑問符??????
を関連するファイルID名に置き換えます(IDがわからない場合は、下部のデザインタブに移動し、関連するアセットをクリックします。
属性の下の右側に、指定したIDがあります。空白の場合、新たに名前を付けることができ、Android Studioがコードを記述します。
次に、Android Studioを再起動します。これが役立つことを願っています。ハッピーコーディング。
R参照でも同じ問題が発生しました。最後にAndroid Studio 3.3がリリースされ、'com.Android.tools.build:gradle:3.3.0'
を使用して問題が修正されました!
(偶然ではあるが)本当の答えに出会ったと思う。
また、OPでKTファイルがRに失敗したため、Javaにある他のクラスも失敗しました。私が気づいたのは、ファイル名に大文字と小文字の違いがあるということです。インポートステートメントを修正して、パッケージ(別名、フォルダー)の大文字と小文字を一致させると、エラーは解決しました。