论坛首页 移动开发技术论坛

关于ANDROID NATIVE 的No implementation found for native问题

浏览 5129 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-09-11  

背景:搞android framework改制,加入一个系统服务。在framework/base/service里

 

写一个测试程序:

 

 

 

xxxxxx_android_hua_HuaRadio.cpp

 

#define LOG_TAG "Vehicle-JNI"

#include "JNIHelp.h"
#include "jni.h"

#include <termios.h>
#include <string.h>
#include <fcntl.h>
#include <utils/Log.h>


#define MCU_DEV "/dev/uart-mcu"

using namespace std;

namespace android {

	static void xxx_android_hua_HuaRadio_nativeInit
		(JNIEnv * env, jobject obj){
			jclass cls = env->GetObjectClass(obj);
			jmethodID print= env->GetMethodID(cls,"print","()V");
			env->CallIntMethod(obj,print);
		}
	static void xxx_android_hua_HuaRadio_nativeRun
		(JNIEnv *, jobject){
			LOGE("send data:%d",2222222);
		}



	static JNINativeMethod HuaRadioMethods [] = { 
		{"nativeInit","()Z",(void*)xxx_android_hua_HuaRadio_nativeInit},
		{"nativeRun","()Z",(void*)xxx_android_hua_HuaRadio_nativeRun},
	};


	int register_xxx_android_hua_HuaRadio(JNIEnv *env)
	{

		int res = jniRegisterNativeMethods(env,"cn/com/xxx/android/hua/HuaRadio",
				HuaRadioMethods,NELEM(HuaRadioMethods));
		return 0;
	}

}
 

HuaRadio.java

 

package cn.com.xxx.android.hua;
import android.content.Context;
import cn.com.xxx.android.IHuaRadio;


public class HuaRadio  extends IHuaRadio.Stub{
	private Context context;
	public  HuaRadio(Context ctx){
		System.out.println("HuaRadio init() by hua");
		this.context=ctx;
	try{
		nativeInit();
		nativeRun();
		}catch(Exception e){

		System.out.plintln("hua "+e);
}
	}
	public void init(){

		nativeRun();
	
	}
	public void print(){
		System.out.println("HuaService print method!!!");
	}
	public native  void nativeInit();  
	public native void nativeRun();  

}

 

 

最后编译出现

No implementation found for native问题

 

 

为什么呢?

 

找了许久,发现register_xxx_android_hua_HuaRadio是要自己注册的

 

在onload.cpp 里加入

 

namespace android {
int register_android_server_AlarmManagerService(JNIEnv* env);
int register_android_server_BatteryService(JNIEnv* env);
int register_android_server_InputManager(JNIEnv* env);
int register_android_server_LightsService(JNIEnv* env);
int register_android_server_PowerManagerService(JNIEnv* env);
int register_android_server_UsbService(JNIEnv* env);
int register_android_server_VibratorService(JNIEnv* env);
int register_android_server_SystemServer(JNIEnv* env);
int register_android_server_location_GpsLocationProvider(JNIEnv* env);

//加入这个 就OK了
int register_cs2c_android_hua_HuaRadio(JNIEnv* env);
};
 

哎!!!

   发表时间:2012-09-11  

extern "C" jint JNI_OnLoad(JavaVM* vm, void* reserved)
{
    JNIEnv* env = NULL;
    jint result = -1;

    if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
        LOGE("GetEnv failed!");
        return result;
    }
    LOG_ASSERT(env, "Could not retrieve the env!");

    register_android_server_PowerManagerService(env);
    register_android_server_InputManager(env);
    register_android_server_LightsService(env);
    register_android_server_AlarmManagerService(env);
    register_android_server_BatteryService(env);
    register_android_server_UsbService(env);
    register_android_server_VibratorService(env);
    register_android_server_SystemServer(env);
    register_android_server_location_GpsLocationProvider(env);

  
    register_cs2c_android_hua_HuaRadio(env);
    return JNI_VERSION_1_4;
}

 

 

在onload.cpp 中还得加入这个代码!!!

0 请登录后投票
论坛首页 移动开发技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics