6

テストを含む Android アプリ プロジェクトを取得したとします。

リリース バージョンに対して (別のテスト プロジェクトで) テスト スイートを実行する方法はありますか?

4

3 に答える 3

3

バウンティのコメントを読んだ後、OPが実際には単純なはい/いいえの返信以上のことを尋ねることに気付いたので、コメントを回答に拡張します。一般的に言えば、適切に設計された proguard.cfg とプロジェクト構造は、このジレンマを防ぐのに十分です。

典型的なプロガード構成 (このリンクのセクション 7. A complete Android application section を参照) では、Activity、View などのすべての Android 関連のものは難読化中に保持されることが保証されます。たとえば、Activity.onCreate() メソッドを難読化するために構成を変更しても意味がありません。実行時にアプリケーションが明らかに台無しになるからです。つまり、適切に設計された proguard.cfg は、基盤となるランタイム フレームワークへのすべてのパブリック インターフェイスを保護し、それらを変更しないままに保ちます。

... ...

-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider

-keep public class * extends android.view.View {
    public <init>(android.content.Context);
    public <init>(android.content.Context, android.util.AttributeSet);
    public <init>(android.content.Context, android.util.AttributeSet, int);
    public void set*(...);
}

... ...

一方、Android テスト プロジェクトは、Android コンポーネントのテストに焦点を当てる必要があります (難読化中に意図的に保持されます)。つまり、ビューは適切にレンダリングされ、ボタン クリックは正しいタスクを実行し、依存しない POJO クラスのテストを作成することは避ける必要があります。 Android API では、これらの POJO が通常難読化されていることに注意してください。最終リリース (難読化、署名、および zipalign 済み) を作成する前に、これらの junit テストが maven テスト段階で関与するように、アプリケーションまたは参照される Java プロジェクトでこれらの POJO の純粋な junit テストを作成することをお勧めします。さらに、適切な OO 設計は、これらの中間的な POJO 依存関係を保護し、外部 (ランタイム フレームワーク) に対して透過的にします。

app/
  src/main/java/
  src/test/java/  <-- intermediate POJO tests put here.
  AndroidManifest.xml
  ... ...
app-test/
  src/main/java  <-- Android component tests put here.
  AndroidManifest.xml
  ... ...

Android テスト プロジェクト内に POJO junit テストを記述することはまったく問題ありませんが、難読化された apk に対してテスト プロジェクトを実行する機能を維持したい場合は、アプリケーション プロジェクトの proguard.cfg を適切に調整し、難読化中に POJO クラスを保持する必要があります。テストコードに合わせてください。

于 2013-02-13T01:38:01.560 に答える
1

ディレクティブを使用して、作成したマッピングをファイルに書き出すように proguard に指示できます-printmapping <filename>。そのファイルの構造は明らかで、Hashtable に解析できます。次に、それらの変換をテストに適用するスクリプトを作成します (それらのコピーを作成します)。難読化とは、単純にクラス名とメソッド名を、Java バイトコード仕様に関して有効なもの (人間が判読できるもの) から別のもの (短くて人間が判読できないが有効なもの) に置き換えることを意味するため、これは機能するはずです。難読化されたプロジェクトに対して適合したテストをコンパイルし、実行します。

于 2013-02-15T08:34:26.623 に答える
0

テストとソースを 1 つのプロジェクトにまとめていますか? もしそうなら、リリースを実行するときにAndroid Mavenがテストコードを削除すると思います。

これを修正するには、実際のアプリケーションにリンクする別のプロジェクトにテストを移動する必要があります (実際のプロジェクトのコード/アセットに依存していると仮定します)。その後、別のプロジェクトは引き続きアプリのリリース ビルドに対してインストルメント化できます。 (それらが同じ鍵で署名されていると仮定します)。

于 2013-02-05T09:58:55.257 に答える