问题描述:

My task is to analyze method calls and corresponding native libraries of an android app by using ddmlib. I started with creating a simple app for testing purposes that uses jni for calling a function implemented in C (which squares a given number). Then I implemented 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);

}

works and prints the call of the jni function. MethodCallExtractor is a simple parser that returns a List of MethodCalls. My problem is that

private void printNativeLibraries(Client client){

ClientData clientData = client.getClientData();

while(clientData.getNativeLibraryMapInfo().hasNext()){

System.out.println("library: " + clientData.getNativeLibraryMapInfo().next().getLibraryName());

}

}

does not print anything. Why is the library containing my C function (libsquared.so in my case) not listed in NativeLibraryMapInfo? What do I have to trigger to get NativeLibraryMapInfo initialized properly?

I spent hours experimenting with 'requestNativeHeapInformation()', 'requestAllocationDetails()', 'requestThreadUpdate()' and

'executeGarbageCollector()' without success and I cannot find any useful documentation about this issue.

I am using ddmlib-r13

相关阅读:
Top