Hi,all:
I think JNI is supported in 0.9 Beta. Because I wrote a
helloworld's jni application in 0.9 beta,and it seem running
successfully.
but i encounter a trouble, I can not do any writing operation,
like remove/rename file.
Next is JNI C code:
JNIEXPORT void JNICALL Java_jprint_print(JNIEnv *env, jobject obj)
{
remove("/data/a.log");
rename("/data/b.log", "/data/c.log");
printf("================hello jni===================\r\n");
}
JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *reserved)
{
JNIEnv *env;
JNINativeMethod meth;
jclass k;
jint r;
r = (*vm)->GetEnv (vm, (void **) &env, JNI_VERSION_1_4);
k = (*env)->FindClass (env, "com.android.helloactivity.jprint");
meth.name = "print";
meth.signature = "()V";
meth.fnPtr = Java_jprint_print;
r = (*env)->RegisterNatives (env, k, &meth, 1);
return JNI_VERSION_1_4;
}
JNIEXPORT void JNI_OnUnload(JavaVM *vm, void *reserved)
{
JNIEnv *env;
jclass k;
jint r;
r = (*vm)->GetEnv (vm, (void **) &env, JNI_VERSION_1_2);
k = (*env)->FindClass (env, "com.android.helloactivity.jprint");
(*env)->UnregisterNatives(env, k);
}
It is very important to call RegisterNatives() to register native
interface. It will show error information "Not Implemention" if you
do not register it.
Next is Jave Code:
public class jprint
{
public native void print();
static
{
try {
Log.i("JNI", "Trying to load jni .so");
System.out.println(System.getProperty("java.library.path"));
System.load("/data/libjnilibs.so");
}
catch (UnsatisfiedLinkError ule) {
Log.e("JNI", ule.getMessage());
}
}
}
Add code to Android OnCreate():
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
jprint p = new jprint();
p.print();
...
}
It is also very important to call System.load("/data/libjnilibs.so")
in java instead of System.loadLibrary(), because System.loadLibrary()
always load library from /system/lib directory.
because /system/bin is readonly file system. so you can push .so file
to /data.
1.build out .so file using arm-eabi compiler
2.push .so to /data directoy: adb push d:/libjnilibs.so /data.(I use
windows's emulator and tool)
3.run java application, you will see(via adb logcat):
I/JNI ( 524): Trying to load jni .so
I/System.out( 524): /system/lib
D/dalvikvm( 524): Trying to load lib /data/libjnilibs.so 0x433f22d0
D/dalvikvm( 524): Added shared lib /data/libjnilibs.so 0x433f22d0
I/ActivityManager( 50): Displayed activity com.android.helloactivity
No, the native interface print() will be called from Jave application.
But It can not remove file in JNI. I think it is limited by java's
security management.
JNIEXPORT void JNICALL Java_jprint_print(JNIEnv *env, jobject obj)
{
remove("/data/a.log");
rename("/data/b.log", "/data/c.log");
printf("================hello jni===================\r\n");
}
I do not know how to solve this problem. who can tell me and
suggestion?
On Aug 26, 5:01 am, hackbod <[EMAIL PROTECTED]> wrote:
> Native code is not supported in 1.0.
>
> On Aug 25, 11:15 am, Tyler Ernst <[EMAIL PROTECTED]> wrote:
>
>
>
> > Thanks, that was exactly what we needed. We realize JNI is not
> > supported, but Java code is just too slow to do the things we need...
>
> > On Aug 25, 2:23 am, Volker Gropp <[EMAIL PROTECTED]> wrote:
>
> > > On Aug 22, 9:30 pm, Tyler Ernst <[EMAIL PROTECTED]> wrote:
>
> > > > Also since the 0.9 beta has been released I have been unable to copy
> > > > the .so to the /system/lib directory of the emulator. If anyone has
> > > > found a way to do this that would be greatly appreciated.
>
> > > Hi,
>
> > > you have to mount the system rw. To do so run `adb remount` before you
> > > push your .so. And keep in mindJNIwill not be supported, or did you
> > > find a way to deploy your native lib with a .apk?
>
> > > Volker Gropp- Hide quoted text -
>
> - Show quoted text -
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[EMAIL PROTECTED]
Announcing the new Android 0.9 SDK beta!
http://android-developers.blogspot.com/2008/08/announcing-beta-release-of-android-sdk.html
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
-~----------~----~----~----~------~----~------~--~---