1

スクリーンショットを撮る必要がありますが、Robotiumですでに利用可能なメソッド「takeScreenShot」を使用してスクリーンショットを撮ることはできますか?jarファイルをインポートしましたが、あまり成功していません。robotiumを使用できない場合は、他の解決策を提案できますか。

public class MyService extends Service {
    Solo solo;
    Context con;
    private Instrumentation it;
    @Override
public void onCreate() {
        // TODO Auto-generated method stub
        super.onCreate();

        it = new Instrumentation();
        Log.i("My Service", "Instrumentation Obj was created");

    }
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
    // TODO Auto-generated method stub

        solo = new Solo(it);
        if(solo == null)
        Log.i("My Service", "Solo Obj was created");
        solo.takeScreenshot();
        return super.onStartCommand(intent, flags, startId);
    }

Log cat O / P:03-06 17:27:54.939:W / dalvikvm(1405):VFY:Lcom / example /の新しいインスタンス468(Lcom / jayway / android / robotium / solo / Solo;)を解決できませんunboundserviceex / MyService; 03-06 17:27:54.949:D / dalvikvm(1405):VFY:0x0000でオペコード0x22を置き換えます03-06 17:27:54.949:D / dalvikvm(1405):DexOpt:0x04で直接呼び出し0x0cf0を選択できませんLcom / example / unboundserviceex / MyService; .onStartCommand 03-06 17:27:54.949:I / My Service(1405):InstrumentationObjが作成されました03-0617:27:54.959:D / AndroidRuntime(1405):VMをシャットダウンしています03-06 17:27:54.959:W / dalvikvm(1405):threadid = 1:キャッチされない例外で終了するスレッド(group = 0x409c01f8)03-06 17:27:54.979:E / AndroidRuntime(1405):致命的な例外:メイン

03-06 17:27:54.979:E / AndroidRuntime(1405):java.lang.NoClassDefFoundError:

com.jayway.android.robotium.solo.Solo 03-06 17:27:54.979:E / AndroidRuntime(1405):com.example.unboundserviceex.MyService.onStartCommand(MyService.java:33)03-06 17:27 :54.979:E / AndroidRuntime(1405):android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2359)03-06 17:27:54.979:E / AndroidRuntime(1405):android.app.ActivityThread.access $ 1900 (ActivityThread.java:123)03-06 17:27:54.979:E / AndroidRuntime(1405):android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1210)03-06 17:27:54.979:E /AndroidRuntime(1405):android.os.Handler.dispatchMessage(Handler.java:99)03-06 17:27:54.979:E / AndroidRuntime(1405):android.os.Looper.loop(Looper.java: 137)03-06 17:27:54.979:E / AndroidRuntime(1405):android.app.ActivityThread.main(ActivityThread.java:4424)03-06 17:27:54.979:E / AndroidRuntime(1405):at java.lang.reflect.Method.invokeNative(Native Method)03-06 17:27:54.979:E / AndroidRuntime(1405):at java.lang.reflect.Method.invoke(Method。 java:511)03-06 17:27:54.979:E / AndroidRuntime(1405):com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:784)03-06 17:27:54.979: E / AndroidRuntime(1405):com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)03-06 17:27:54.979:E / AndroidRuntime(1405):dalvik.system.NativeStart.main (ネイティブ方式)E / AndroidRuntime(1405):com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)03-06 17:27:54.979:E / AndroidRuntime(1405):dalvik.system.NativeStart.main (ネイティブメソッド)E / AndroidRuntime(1405):com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)03-06 17:27:54.979:E / AndroidRuntime(1405):dalvik.system.NativeStart.main (ネイティブメソッド)

私が信じる主なエラーは次のとおりです:java.lang.NoClassDefFoundError

4

2 に答える 2

0

プロジェクトで Robotium フレームワークを使用したい場合は、Robotium には次の 2 つのものが必要であることも理解する必要があります。

  1. アクティビティ
  2. パッケージ名

次のステップでは、これらの詳細をマニフェスト ファイル (インストルメンテーション タグ内) に追加する必要があります。

ここで、上記の詳細に固執します。

これら 2 つの詳細を、スクリーンショット レコーダー アプリケーションのマニフェストに動的に追加する必要があります。

マニフェストファイルの目的を無効にするため、これは不可能です

基本的に、これは悪い考えであり、Robotium の「takeScreenShot」メソッドを使用してスクリーン ショットを撮ることはできないと言っているのです。ASL Libraryを使用することをお勧めしますが、まだ問題が発生しています。お時間をいただきありがとうございます。

于 2013-03-07T06:51:32.140 に答える
0

Robotium はスクリーンショットを撮ることができますが、アプリケーションのビューのみが含まれます (たとえば、ステータス バーは空白になります)。どのような問題が発生しましたか? 「私はあまり成功していません」は何も言いません。

編集: プロジェクトに robotium-solo jar が含まれていないようです。

とにかく、スクリーンショットを撮るためだけに必要な場合は、まったく必要ありません。このコードを使用するだけですが、前に書いたように、それを取得するには任意のビュー (および外部ストレージへの書き込み許可) が必要になります。

protected void takeScreenshot(String name, View v) {
    View view = v.getRootView();
    view.setDrawingCacheEnabled(true);
    view.buildDrawingCache();
    Bitmap bmp = view.getDrawingCache();
    if (bmp != null) {
        String path = String.format("%s/%s/",
            Environment.getExternalStorageDirectory(),
            "scrrenshots");

        File dir = new File(path);
        if (!dir.exists()) {
            dir.mkdirs();
        }

        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream(String.format(
                    "%s%s.png", path, name));
            bmp.compress(Bitmap.CompressFormat.PNG, 90, fos);
        } catch (IOException e) {
        } finally {
            if (view != null) {
                view.destroyDrawingCache();
            }
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e) {
                }
            }
        }
    } 
}
于 2013-03-06T11:25:57.253 に答える