This is the wrong list to be discussing this. But just as learning Java by programming in Android is hard, learning C by programming in Android is definitely doing it the hard way! Doing this sort of experimentation under Ubuntu, say, would let you use a real debugger.
You're passing a null pointer to execv. The second argument must be an array of char* pointers, the last of which should be a null pointer. An array of one null pointer is NOT the same as a null pointer! In fact, it shouldn't have even compiled, since char* is not char**! You're only initializing the first 4 bytes of your buff array. sizeof(100) = 4 most likely. You want 100*sizeof(char). You didn't really do the right test under adb. If you're going to execv the "/hello" command, that's what you should have typed if you want to test that "/hello" would work! Yes, typing /hello should have worked too, but if there'd been a problem there, you'd have missed it. On Jan 12, 2:01 am, nelsonchung <chihchun.ch...@gmail.com> wrote: > I write some code by c language and build it for arm platform - imx51. > I can run this file under command line like this. > > start machine. > adb push ./hello / > adb shell > ./hello > > and I can see the following information > Hello World! > > I write some code on JNI. > > #include <jni.h> > #include <stdlib.h> > #include <unistd.h> > #include <utils/Log.h> > > JNIEXPORT void JNICALL > Java_rtk_main_atp_BrakeDetect_RunJniBrakeDetect(JNIEnv *env, jobject > jobj) > { > int ret = execv("/hello", (char *)NULL); > > char buff[100]; > memset(buff, 0, sizeof(100)); > sprintf(buff, "[libhello] Hello %d \n", ret ); > LOGD( buff ); > > } > > but it must have something wrong, because I can't get any result from > logcat. > > I got follow message > AndroidRuntime( 2688): > D/AndroidRuntime( 2688): >>>>>>>>>>>>>> AndroidRuntime START > <<<<<<<<<<<<<< > D/AndroidRuntime( 2688): CheckJNI is OFF > D/dalvikvm( 2688): creating instr width table > D/AndroidRuntime( 2688): --- registering native functions --- > I/ActivityManager( 2136): Start proc com.android.defcontainer for > service com.android.defcontainer/.DefaultContainerService: pid=2696 > uid=10013 gids={1015, 2001} > D/dalvikvm( 2696): GC_EXPLICIT freed 742 objects / 54664 bytes in > 53ms > D/PackageParser( 2136): Scanning package: /data/app/vmdl13306.tmp > D/dalvikvm( 2136): GC_FOR_MALLOC freed 6299 objects / 286008 bytes in > 105ms > I/PackageManager( 2136): Removing non-system package:rtk.main.atp > I/ActivityManager( 2136): Force stopping package rtk.main.atp > uid=10034 > D/dalvikvm( 2136): GC_FOR_MALLOC freed 1619 objects / 115552 bytes in > 104ms > D/PackageManager( 2136): Scanning package rtk.main.atp > I/PackageManager( 2136): /data/app/rtk.main.atp-2.apk changed; > unpacking > I/PackageManager( 2136): Package rtk.main.atp codePath changed from / > data/app/rtk.main.atp-1.apk to /data/app/rtk.main.atp-2.apk; Retaining > data and using new > D/installd( 2069): DexInv: --- BEGIN '/data/app/rtk.main.atp-2.apk' > --- > D/dalvikvm( 2718): creating instr width table > D/dalvikvm( 2718): DexOpt: load 14ms, verify 6ms, opt 0ms > D/installd( 2069): DexInv: --- END '/data/app/ > rtk.main.atp-2.apk' (success) --- > D/PackageManager( 2136): Activities: rtk.main.atp.BrakeDetect > I/ActivityManager( 2136): Force stopping package rtk.main.atp > uid=10034 > W/PackageManager( 2136): Code path for pkg : rtk.main.atp changing > from /data/app/rtk.main.atp-1.apk to /data/app/rtk.main.atp-2.apk > W/PackageManager( 2136): Resource path for pkg : rtk.main.atp changing > from /data/app/rtk.main.atp-1.apk to /data/app/rtk.main.atp-2.apk > D/dalvikvm( 2136): GC_FOR_MALLOC freed 1695 objects / 115832 bytes in > 96ms > I/installd( 2069): move /data/dalvik-cache/ > d...@a...@rtk.main.atp-2....@classes.dex -> /data/dalvik-cache/ > d...@a...@rtk.main.atp-2....@classes.dex > D/PackageManager( 2136): New package installed in /data/app/ > rtk.main.atp-2.apk > D/dalvikvm( 2136): GC_FOR_MALLOC freed 1253 objects / 92008 bytes in > 100ms > I/ActivityManager( 2136): Force stopping package rtk.main.atp > uid=10034 > D/dalvikvm( 2296): GC_EXPLICIT freed 3866 objects / 240360 bytes in > 104ms > W/RecognitionManagerService( 2136): no available voice recognition > services found > D/dalvikvm( 2136): GC_FOR_MALLOC freed 1961 objects / 121864 bytes in > 117ms > I/ActivityManager( 2136): Start proc com.svox.pico for broadcast > com.svox.pico/.VoiceDataInstallerReceiver: pid=2720 uid=10014 gids={} > D/dalvikvm( 2136): GC_EXPLICIT freed 412 objects / 21232 bytes in > 81ms > I/ActivityThread( 2720): Publishing provider > com.svox.pico.providers.SettingsProvider: > com.svox.pico.providers.SettingsProvider > I/installd( 2069): unlink /data/dalvik-cache/ > d...@a...@rtk.main.atp-1....@classes.dex > D/AndroidRuntime( 2688): Shutting down VM > D/jdwp ( 2688): Got wake-up signal, bailing out of select > D/dalvikvm( 2688): Debugger has detached; object registry had 1 > entries > D/AndroidRuntime( 2731): > D/AndroidRuntime( 2731): >>>>>>>>>>>>>> AndroidRuntime START > <<<<<<<<<<<<<< > D/AndroidRuntime( 2731): CheckJNI is OFF > D/dalvikvm( 2731): creating instr width table > D/AndroidRuntime( 2731): --- registering native functions --- > I/ActivityManager( 2136): Starting activity: Intent > { act=android.intent.action.MAIN > cat=[android.intent.category.LAUNCHER] flg=0x10000000 > cmp=rtk.main.atp/.BrakeDetect } > D/AndroidRuntime( 2731): Shutting down VM > D/jdwp ( 2731): Got wake-up signal, bailing out of select > D/dalvikvm( 2731): Debugger has detached; object registry had 1 > entries > I/ActivityManager( 2136): Start proc rtk.main.atp for activity > rtk.main.atp/.BrakeDetect: pid=2749 uid=10034 gids={} > D/dalvikvm( 2749): No JNI_OnLoad found in /system/lib/ > libBrakeDetect.so 0x46123a68, skipping init > I/ActivityManager( 2136): Process rtk.main.atp (pid 2749) has died. > I/ActivityManager( 2136): Displayed activity android/ > com.android.internal.app.ResolverA > > after I modify some code under JNI > > #include <jni.h> > #include <stdlib.h> > #include <unistd.h> > #include <utils/Log.h> > > JNIEXPORT void JNICALL > Java_rtk_main_atp_BrakeDetect_RunJniBrakeDetect(JNIEnv *env, jobject > jobj) > { > int ret = 55;//execv("/hello", (char *)NULL); //fail > > char buff[100]; > memset(buff, 0, sizeof(100)); > sprintf(buff, "[libhello] Hello %d \n", ret ); > LOGD( buff ); > > } > > I got follow message. > > D/AndroidRuntime( 2819): > D/AndroidRuntime( 2819): >>>>>>>>>>>>>> AndroidRuntime START > <<<<<<<<<<<<<< > D/AndroidRuntime( 2819): CheckJNI is OFF > D/dalvikvm( 2819): creating instr width table > D/AndroidRuntime( 2819): --- registering native functions --- > I/ActivityManager( 2136): Starting activity: Intent > { act=android.intent.action.MAIN > cat=[android.intent.category.LAUNCHER] flg=0x10000000 > cmp=rtk.main.atp/.BrakeDetect } > D/AndroidRuntime( 2819): Shutting down VM > I/ActivityManager( 2136): Start proc rtk.main.atp for activity > rtk.main.atp/.BrakeDetect: pid=2828 uid=10034 gids={} > D/dalvikvm( 2819): Debugger has detached; object registry had 1 > entries > D/dalvikvm( 2828): No JNI_OnLoad found in /system/lib/ > libBrakeDetect.so 0x46123a68, skipping init > D/ ( 2828): [libhello] Hello 55 > I/ActivityManager( 2136): Displayed activity > rtk.main.atp/.BrakeDetect: 335 ms (total 335 ms) > init: starting 'ril-daemon' > - Show quoted text - > > and can get the message - "Hello 55" that I want to print to logcat. > > Something wrong with execv function? > or > Does anyone know how to launch executable file under JNI level? -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en