以下の dalvik/vm/native/dalvik_system_DexFile.cpp にある API を使用したい:
static void Dalvik_dalvik_system_DexFile_defineClass(const u4* args, JValue* pResult)
static void Dalvik_dalvik_system_DexFile_openDexFile_bytearray(const u4* args, JValue* pResult)
しかし、上記の 2 つの API を使用するための適切なインクルード ファイルを libdvm.so に含める方法がわかりません。
Android プロジェクトにヘッダー全体を含めようとしましたが、「引数リストが長すぎます」というコンパイル エラー メッセージで失敗しました。
libdvm.so で上記の 2 つの API を使用するために何をしなければならないか知っている人はいますか? ありがとうございました。
- 追加した -
dalvik/vm/native/dalvik_system_DexFile.cpp には、他のユーザーが静的 API を使用できるようにする追加のコードがいくつかあります。
const DalvikNativeMethod dvm_dalvik_system_DexFile[] =
{
{ "openDexFile", "(Ljava/lang/String;Ljava/lang/String;I)I", Dalvik_dalvik_system_DexFile_openDexFile },
{ "openDexFile", "([B)I", Dalvik_dalvik_system_DexFile_openDexFile_bytearray },
{ "closeDexFile", "(I)V", Dalvik_dalvik_system_DexFile_closeDexFile },
{ "defineClass", "Ljava/lang/String;Ljava/lang/ClassLoader;I)Ljava/lang/Class;", Dalvik_dalvik_system_DexFile_defineClass },
{ "getClassNameList", "(I)[Ljava/lang/String;", Dalvik_dalvik_system_DexFile_getClassNameList },
{ "isDexOptNeeded", "(Ljava/lang/String;)Z", Dalvik_dalvik_system_DexFile_isDexOptNeeded },
{ NULL, NULL, NULL },
};
上記の 2 つの静的 API を次のように呼び出します。
dvm_dalvik_system_DexFile[1].fnPtr(args, &pResult);