diff --git a/AndroidManifest.xml b/AndroidManifest.xml index c50b1e4..a8990f7 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -11,6 +11,8 @@ + + diff --git a/Makefile b/Makefile index 7875680..48c624e 100644 --- a/Makefile +++ b/Makefile @@ -7,7 +7,7 @@ with-libs: NDK_DEBUG=1 $(CFG_ANDROID_NDK_PATH)/ndk-build -B cp -a $(CFG_BUILD_HOME)sofile/*.so* ./libs/armeabi/ cp -a ./extlibs/* ./libs/armeabi - cd ./libs/armeabi && find . -name libservo* | xargs -I {} ln -s {} libservo.so && find . -name libglut* | xargs -I {} ln -s {} libglut.so & cd ../../ + find . -name libglut* | xargs -I {} ln -s {} libglut.so & cd ../../ $(CFG_ANDROID_SDK_PATH)/tools/android update project --name ServoAndroid --target "android-18" --path . ant debug diff --git a/jni/android-dl.cpp b/jni/android-dl.cpp index d358b9c..9abde2d 100644 --- a/jni/android-dl.cpp +++ b/jni/android-dl.cpp @@ -211,7 +211,7 @@ android_dlneeds(const char *library) return NULL; } if (dyn.d_tag == DT_NEEDED) { - /* LOGI("needs: %s\n", dynstr + dyn.d_un.d_val); */ + LOGI("needs: %s\n", dynstr + dyn.d_un.d_val); result[n_needed] = strdup(dynstr + dyn.d_un.d_val); n_needed++; } @@ -243,12 +243,12 @@ android_dlopen(const char *library) char* library_path = getenv("LD_LIBRARY_PATH"); strcpy(ld_library_path, library_path); - LOGI("LD_LIBRARY_PATH is : %s", ld_library_path); + // LOGI("LD_LIBRARY_PATH is : %s", ld_library_path); libraries[i1] = strtok(ld_library_path, ":"); - LOGI("library : %s", libraries[i1]); + //LOGI("library : %s", libraries[i1]); while(libraries[i1]) { libraries[++i1] = strtok(NULL, ":"); - LOGI("library : %s", libraries[i1]); + //LOGI("library : %s", libraries[i1]); } icnt = i1; @@ -260,10 +260,10 @@ android_dlopen(const char *library) return 0; } library_locations[0] = "/data/data/com.example.ServoAndroid/lib"; - LOGI("added library path : %s", library_locations[0]); + // LOGI("added library path : %s", library_locations[0]); for(int i = 0; i < icnt; i++ ) { library_locations[i+1] = strdup(libraries[i]); - LOGI("added library path : %s", library_locations[i+1]); + // LOGI("added library path : %s", library_locations[i+1]); } /* diff --git a/jni/main.cpp b/jni/main.cpp index cc2a7ac..68035d5 100644 --- a/jni/main.cpp +++ b/jni/main.cpp @@ -60,7 +60,6 @@ typedef void (*fty_glutIdleFunc)(void(*)()); typedef void (*fty_glutInitWindowSize)(int, int); typedef int (*fty_glutGetModifiers)(); - #define REGISTER_FUNCTION(lib, function)\ void (*reg_fn_##function)(fty_##function);\ *(void**)(®_fn_##function) = dlsym(lib, "reg_fn_" #function);\ @@ -91,18 +90,17 @@ static void init_servo() // LOGI("loading url is : %s", servo_url); -// void* librustuv = android_dlopen("/data/data/com.example.ServoAndroid/lib/librustuv-d4277cd5f62aa99-0.9-pre.so"); -// if (librustuv == NULL) { -// LOGW("failed to load rustuv lib: %s", dlerror()); -// return; -// } - LOGI("load servo library"); void* libservo = android_dlopen("/data/data/com.example.ServoAndroid/lib/libservo.so"); if (libservo == NULL) { LOGW("failed to load servo lib: %s", dlerror()); return; } + void* crate_map = dlsym(libservo, "_rust_crate_map_toplevel"); + if (crate_map == NULL) { + LOGW("failed to load the crate map from the servo lib: %s", dlerror()); + return; + } LOGI("load rust-glut library"); void* libglut = android_dlopen("/data/data/com.example.ServoAndroid/lib/libglut-f186cebf-0.1.so"); @@ -133,11 +131,26 @@ static void init_servo() REGISTER_FUNCTION(libglut, glutInitWindowSize); REGISTER_FUNCTION(libglut, glutGetModifiers); + + LOGI("load libstd library to set the cratemap"); + void* libstd = android_dlopen("/data/data/com.example.ServoAndroid/lib/libstd-966edb7e-0.10-pre.so"); + if (libstd == NULL) { + LOGW("failed to load libstd: %s", dlerror()); + return; + } + + void (*rust_set_crate_map)(void*) = (void (*)(void*))dlsym(libstd, "rust_set_crate_map"); + if (rust_set_crate_map == NULL) { + LOGW("failed to load rust_set_crate_map from libstd: %s", dlerror()); + return; + } + rust_set_crate_map(crate_map); + void (*main)(int, char**); *(void**)(&main) = dlsym(libservo, "android_start"); if (main) { LOGI("go into android_start()"); - static char* argv[] = {"servo", "/sdcard/about-mozilla.html"}; + static char* argv[] = {"servo", "/mnt/sdcard/html/about-mozilla.html"}; (*main)(2, argv); return; }