2015-01-07 28 views
13

./gradlew connectedAndroidTestを実行して、テストAPKを使用して、テストしていないAPK(デバッグ、リリース)にアクセスできないアクセス許可を取得する必要があります。私は許可を得て、マニフェスト作成しました:Gradleのアンドロイドプラグインからrelease notesとして、Androidのテスト専用アクセス許可(グラブル

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="com.mypackage"> 
    <uses-permission android:name="android.permission.SET_ANIMATION_SCALE"/> 
</manifest> 

その後、私はsrc/androidTestディレクトリに、このマニフェストコピーしたをお勧め:

0.13.0(2014年9月18日) Gradleの2.1 テストのアプリ(SRC/androidTest/AndroidManifest.xmlに)

しかし、許可が適用されていないdurのためのマニフェストを提供できるようになりましたが必要です私の接続テストをします。

src/debugディレクトリを作成し、このマニフェストを移動すると、接続テスト中(ただし、通常のデバッグビルド時には望ましくありません)にアクセス許可が正しく適用されます。

何か間違っているのですか、バグがありますか?

答えて

11

この問題は、connectedAndroidTest gradleタスクがどのように機能するのかについての私の誤解に起因しています。テスト可能な(あなたのプロジェクト)とテスター(テスト可能なアプリケーションとやり取りするユーザーをシミュレートするアプリケーション)の2つのアンドロイドアプリケーションを作成してデプロイします。私の意図は、テスト可能なアプリケーションにアクセス許可を追加することでした。ただし、マニフェストをsrc/androidTestに追加すると、テスターアプリに権限が追加されました。ここで私はそれを考え出した方法は次のとおりです。

私は

adb shell pm list packages -f -3 

私はこの

パッケージのようなものを見ることができます(-3のみ、サードパーティ製のパッケージを一覧表示することを意味する)を実行した場合:/データ/アプリ/ SmokeTestApp .apk = com.android.smoketest パッケージ:/data/app/GestureBuilder.apk=com.android.gesture.builder パッケージ:/data/app/com.mycompany.myapp-2.apk=com.mycompany。 myapp パッケージ:/data/app/SoftKeyboard.apk=com.example.android。ソフトキーボード パッケージ:/data/app/org.libsdl.app-2.apk=org.libsdl.app パッケージ:/data/app/SmokeTest.apk=com.android.smoketest.tests パッケージ:/ data/APP/com.mycompany.myapp.test-1.apk = com.mycompany.myapp.test

試験-1サフィックスを持つアプリは、他の一つは私のテスト可能なアプリケーションテスタアプリケーションです。彼らの許可をチェックすると得られます。

[email protected]_x86:/ # aapt d permissions /data/app/com.mycompany.myapp-2.apk 

package: com.spredfast.android 
uses-permission: android.permission.INTERNET 
uses-permission: android.permission.WRITE_EXTERNAL_STORAGE 

[email protected]_x86:/ # aapt d permissions /data/app/com.mycompany.myapp.test-1.apk 

package: com.spredfast.android 
uses-permission: android.permission.SET_ANIMATION_SCALE 

だから私は私のテスト可能なアプリに置くために意図された許可、SET_ANIMATION_SCALEは、テスターアプリに入れています。マニフェストをsrc/androidTestからsrc/debugに移動すると、テスト可能なアプリケーションにアクセス権が設定されることは間違いありません(正しいが、広すぎる)。唯一connectedAndroidTestタスクの内部で実行されているアプリケーションの場合に適用に許可を置く -


は、ここで私は、元の問題を解決した方法です。

  1. 私は統合テストで使用する空のビルドの風味を作成しました:

    productFlavors { 
        /** 
        * This flavor is to be run only using connectedAndroidTestAnimcontrol 
        */ 
        animcontrol {} 
    
        regular {} 
    } 
    
  2. ./gradlew connectedAnimcontrolDebugAndroidTest 
    
    としてsrc/animcontrol/AndroidManifest.xml

  3. 実行される接続テストに、単一の許可を得てsrc/androidTest/AndroidManifest.xmlを移動

これはトリックでしたが、今はAndroidManifest.xmlがあります。これは、connectedAndroidTestとして実行されている場合にのみメインアプリケーションのマニフェストとマージされます。

これは誰かを助けることを望みます。

関連する問題