私の仕事は、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を使用しています