2016-12-03 4 views
0

私のアプリは、サーバーリポジトリでホストされているリモートパッケージによって異なります。パッケージは独立して管理されます。Androidローカルクラスのリモートパッケージでクラスをオーバーライドする方法

今、リモートパッケージ内のクラスを展開したいと考えています。私は同じクラスのローカルコピーを作成し、それを実験目的で変更します。このようにして、ライブラリを修正し、リポジトリにプッシュし、すべてのデバッグサイクルで自分のアプリケーションをコンパイルする必要はありません。

ただし、アプリケーションのコンパイルでは、引き続きローカル拡張コピーではなくリモートクラスが使用されます。そして、エラーを報告する。

error: cannot find symbol variable XXX_XX1 
error: cannot find symbol variable XXX_XX2 

これらの変数のXXX_XX1とXXX_XX2を新たにローカルクラスA

リモートライブラリのレポに追加されます。org.example.packagename.datamodel.classA

ローカルソースパス \アンドロイド\アプリ\ src \ mock \ java \ org \ example \ packagename \ datamodel \ classA.java

私の質問は、コンパイル時にAndroid StudioでclassAのローカルコピーを使用するように要求する方法です。綿密に検討した後、UPDATE

、ユニットテストフォルダレポートエラーでのみのクラス。また、メインプログラムクラスはエラーを報告しません(まだ、単体テストクラスがコンパイルされた後のことでしょう)。

Error:Execution failed for task ':app:compileMockDebugUnitTestJavaWithJavac'. Compilation failed; see the compiler error output for details. 
+0

ライブラリを所有していますか? – Karakuri

+0

@Karakuri私は貢献者ですが、一人の所有者ではありません。 – HarryQ

+0

ライブラリに対して行った変更をテストしようとしていますが、そうするためには、jcenter/maven central/etcから取得する公開バージョンではなく、ローカルバージョンに対してコンパイルする必要があります。私はあなたの問題を正しく理解しましたか? – Karakuri

答えて

0

あなたは、彼らが別のパッケージになりますよう、ライブラリ内のエクステントクラス(クラスが最終であれば組成物を用いたこともオプションである)

public class LocalClassA extends RemoteClassA { 
} 

両方が、ClassA名前を付けることができべきであるが、これは混乱につながる可能性があります。

+0

現在、classAはアプリで広範囲に使用されているため、異なるパッケージに入れるためには、他の12個のファイルの依存関係を変更する必要があります。私が達成しようとしているのは、ビルドの味を選ぶのと同じですが、ローカルのclassAとリモートのclassAの間にあります。 – HarryQ

0

これを行う簡単な方法は、ソースファイルが変更されたバージョンのライブラリであるテストプロジェクトにモジュールを追加することです。バイナリ依存関係を削除し、この新しいモジュールへの依存関係に置き換えます。それは... settings.gradle

はGradleの同期を行うと、あなたは良い形にする必要がありアプリ

// compile 'groupId:artifactId:version' // <-- comment out the published binary 
compile project(':shared') // <-- add your local module 

ためbuild.gradle

include ':libraryName' 
project(':libraryName').projectDir = new File('/path/to/library/sources') 

を追加し、このようになるはずです。 を忘れないでください。完了したら、テストプロジェクトでこれらの変更をコミットしないでください。


私が過去に撮影してきた別のアプローチは、(新しいバージョンの名前で)私の地元のMavenリポジトリにライブラリを公開するのmavenのGradleプラグインを使用することです。そして、テストプロジェクトで、私は、バージョン名を更新しても、これはもう少し複雑になりますが、モジュールをいじりしないという利点があるかもしれません

repositories { 
    mavenLocal() 
} 

を追加します - you'reはまだバイナリ依存関係に引っ張って、これはちょうどあなたのMavenリポジトリからローカルで提供され、Webからダウンロードされません。 ではなく、を覚えておき、ライブラリソースの変更をコミットし、ローカルに公開に関連するファイルをビルドするだけで済みます。

関連する問題