किसी भी सी या सी ++ प्रोग्राम के अंदर, आप लोड और DEX वर्गों में कॉल करना चाहते हैं, तो आप देख सकते हैं कि Dalvik वी एम शुरू कर दिया है, AndroidRuntime अंदर - उदाहरण के चौखटे के लिए/बेस/cmds/app_process/app_main.cpp:
status_t app_init(const char* className, int argc, const char* const argv[])
{
LOGV("Entered app_init()!\n");
AndroidRuntime* jr = AndroidRuntime::getRuntime();
jr->callMain(className, argc, argv);
LOGV("Exiting app_init()!\n");
return NO_ERROR;
}
के रूप में "जे आर" AndroidRuntime पहले से ही शुरू कर रहा है, callMain() कहा जाएगा:
status_t AndroidRuntime::callMain(
const char* className, int argc, const char* const argv[])
{
JNIEnv* env;
jclass clazz;
jmethodID methodId;
LOGD("Calling main entry %s", className);
env = getJNIEnv();
if (env == NULL)
return UNKNOWN_ERROR;
clazz = findClass(env, className);
if (clazz == NULL) {
LOGE("ERROR: could not find class '%s'\n", className);
return UNKNOWN_ERROR;
}
methodId = env->GetStaticMethodID(clazz, "main", "([Ljava/lang/String;)V");
if (methodId == NULL) {
LOGE("ERROR: could not find method %s.main(String[])\n", className);
return UNKNOWN_ERROR;
}
<...>
env->CallStaticVoidMethod(clazz, methodId, strArray);
return NO_ERROR;
}
ऊपर से, हम देख सकते हैं कि DEX वर्गों 'कोड और लोड किए गए हैं CallStaticVoidMe thod() DEX कोडों की व्याख्या करना शुरू कर देगा।
स्रोत
2011-02-09 02:39:40
आपके उत्तर के लिए धन्यवाद। क्या मुझे अभी अपना कोड जनरेटर लिखने से रोक रहा है? मैंने .Net-> Flash और .Net -> नेट, और डेक्स के लिए एक लिखा है जावा के बीच एक क्रॉस की तरह है। क्लास और फ्लैश .एबीसी फाइलें। इसके अलावा, लिंक के लिए धन्यवाद। मैंने इसे तारांकित किया और एक टिप्पणी जोड़ा (इसका एपीआई अनुरोध करना नेट के डीएलआर के समान है)। –
आप निश्चित रूप से अभी अपना कोड जनरेटर लिख सकते हैं। यदि आप इसे अपाचे-लाइसेंस देते हैं, तो भी बेहतर! –
अद्यतन: डेक्समेकर पर एक नज़र डालें जो इसे आसान बनाता है: http://code.google.com/p/dexmaker/ –