1

私の仕事は、ddmlib を使用して、Android アプリのメソッド呼び出しと対応するネイティブ ライブラリを分析することです。私は、JNI を使用して C で実装された関数 (特定の数値を 2 乗する関数) を呼び出す、テスト目的の単純なアプリの作成から始めました。次に、IMethodProfilingHandler を実装しました。

@Override
public void onSuccess(byte[] data, Client client) {
MethodCallExtractor extractor = MethodCallExtractor.GetInstance();
    List<MethodCall> calls = extractor.extract(data, client);
    System.out.println("methodcalls:");
    for(MethodCall call : calls){
        System.out.println(call);
    }
    printNativeLibraries(client);
}

動作し、jni 関数の呼び出しを出力します。MethodCallExtractor は、MethodCalls のリストを返す単純なパーサーです。私の問題はそれです

private void printNativeLibraries(Client client){
    ClientData clientData = client.getClientData();
    while(clientData.getNativeLibraryMapInfo().hasNext()){
        System.out.println("library: " + clientData.getNativeLibraryMapInfo().next().getLibraryName());
    }
}

何も印刷しません。C 関数 (私の場合は libsquared.so) を含むライブラリが NativeLibraryMapInfo にリストされていないのはなぜですか? NativeLibraryMapInfo を適切に初期化するには、何をトリガーする必要がありますか?

「requestNativeHeapInformation()」、「requestAllocationDetails()」、「requestThreadUpdate()」、および「executeGarbageCollector()」の実験に何時間も費やしましたが、成功せず、この問題に関する有用なドキュメントが見つかりません。

私はddmlib-r13を使用しています

4

0 に答える 0