Android ndk demo
来源:互联网 发布:淘宝刀剑神域武器 编辑:程序博客网 时间:2024/06/06 20:33
步骤:
1. 在eclipse中新建工程新建调用本地方法
例如:新建类 ChatCore.java
所在包:com.mamarow.androidchat.chatcore;
/***********************本地方法**********************************/
//初始化sdk
public native int InitChatCore();
//释放sdk资源
public native int ReleaseChatCore();
//登录chat server
public native int Login(String UserName,String PassWord);
//重新登录 chat server
public native int Relogin(StringUserName,String PassWord);
//注销登录
//public nativeboolean Logout();//底层已catch user数据,可以无参数
//发送聊天请求 nat打洞
public native int RequiryChat(int FromUserId,int ToUserId);
//处理商务消息
public native int CheckBusinessMsg(int businessMsgType);
//发送文本信息
public native int SendTextMsg(int FromUserId,int ToUserId,StringMsg)
/***********************回调方法**********************************/
//登录回调函数
public void OnLoginCallBack(int UserId,int loginRes)
{
Message msg=mHandler.obtainMessage();
Bundle bundle=new Bundle();
bundle.putInt("HANDLETYPE", MainHandler.HANDLE_TYPE_LOGIN);
bundle.putInt("UserId", UserId);
bundle.putInt("loginRes", loginRes);
msg.setData(bundle);
mHandler.sendMessage(msg);
}
//通知登录成功后,基本数据已经接受完毕,可以跳转到主界面
public void OnDataPrepareCallBack()
{
}
//登录成功,server推送回调函数
public void OnDataReciveCallBack(ByteBuffer pBuf)
{
}
//请求进行chat 回调函数
public void OnChatUserOkCallBack(int flag)
{
}
//接收文本消息回调函数
public void OnTextChatMsgCallBack(int FromUserId,int ToUserId,StringMsg)
{
Message msg=mHandler.obtainMessage();
Bundle bundle=new Bundle();
bundle.putInt("HANDLETYPE", MainHandler.HANDLE_TYPE_CHAT_TEXTMSG);
bundle.putInt("FromUserId",FromUserId);
bundle.putInt("ToUserId", ToUserId);
bundle.putString("Msg", Msg);
bundle.putInt("MsgType", 0);
msg.setData(bundle);
mHandler.sendMessage(msg);
}
/***********************静态方法**********************************/
//单例模式
public static ChatCore getInstance()
{
if(sdkInstance ==null )
{
sdkInstance=new ChatCore();
mHandler=new MainHandler(sdkInstance);
}
return sdkInstance;
}
2. 生成c 头文件
在cmd中进入(android工程) bin/classes目录下
javah-classpath . -jni –verbose com.mamarow.androidchat.chatcore.ChatCore
生成头文件com_mamarow_androidchat_chatcore_ChatCore.h
3. 添加jni文件夹
这个文件夹就是放原生态c/c++ 的源码的地方,我们make 的时候cygwin 就是编译这个文件夹的。
4. 在jni文件中新建 Android.mk
LOCAL_PATH :=$(call my-dir)#返回当前路径,默认的,不需要修改
include$(CLEAR_VARS) #清除先前定义的环境变量,默认不要修改
LOCAL_MODULE := libchatcore #动态库lib名称
LOCAL_SRC_FILES := JniChatCore.cpp #需要编译的源文件
include$(BUILD_SHARED_LIBRARY)#动态库默认的
5. 在jni文件中新建 JniChatCore.cpp(这里只贴出 login本地函数实现,其他方法类似)
JNIEXPORT jint JNICALL Java_com_mamarow_androidchat_chatcore_ChatCore_Login (JNIEnv * cEnv,jobject cThis, jstring cName, jstring cPwd)
{
const char*uname=cEnv->GetStringUTFChars(cName,NULL);
const char*upwd=cEnv->GetStringUTFChars(cPwd,NULL);
//查找com.mamarow.androidchat.chatcore.ChatCore类,返回JAVA类的CLASS对象,
jclass cls =cEnv->FindClass("com/mamarow/androidchat/chatcore/ChatCore");
jmethodID mid=0;
if(cls !=0)
{
mid=cEnv->GetMethodID(cls,"OnLoginCallBack","(II)V");
}
if(!(strcmp(uname,"wuhong")&& strcmp(upwd,"123456")))
{
if(mid!=0)
{
cEnv->CallVoidMethod(cThis, mid, 0, 1);
}
return 1;
}
else
{
if(mid!=0)
{ //回调java的对象成员方法
cEnv->CallVoidMethod(cThis, mid, 0, 0);
}
return0;
}
}
6. (在ndk环境已经搭建好的情况下,$NDK是ndk在cygwin配置的环境变量,),在cygwin中新建一个目录workspace,专门用来ndk.把android工程拷贝workspace目录下,cygwin进入work\android工程名 目录, $NDK\ndk-build,假如cpp程序没有问题的话,即可生成.so动态链接库
7. 加载so动态链接库文件,运行workspace下Android工程
经测试,程序正确运行!
- Android ndk 开发demo
- Android ndk demo
- android NDK/JNI demo
- Android studio NDK demo
- android ndk log使用demo
- Android Studio NDK 入门demo
- android studio NDK demo详解
- Android Studio NDK 入门demo
- android NDK开发demo(基于android )
- android NDK配置及使用demo
- Android NDK开发<一>:第一个demo
- Android Studio NDK-Jni开发小Demo
- Android NDK JNI 简单调试 demo
- JNI for Android, Android Studio NDK 入门 实例 demo
- android soundtouch demo 之NDK编译之路
- Android NDK 环境搭建以及第一个Demo
- Android NDK入门2015(环境搭建及第一个小demo)
- Android JNI 开发 Demo by NDK (native develop kit)
- 安卓查询当前所在地天气及查询地区(城市)代码cityCode localCode
- ajax调用servlet出现405 (Method Not Allowed)
- Oracle在线文档下载 【转载自@secooler】
- oracle 11g rac crsctl 命令 使用
- 微淘——微博之后草根创业的又一个平台
- Android ndk demo
- C#.NET 编写后台登录代码
- 关于SurfaceView
- 用户不在sudoers文件中的解决方法
- 正整数n的所有可能和式的组合
- 十五个只有程序员会乐的事情
- Cron 定时运行简单的SSH命令
- Ubuntu 12.04中文输入法的安装(转载)
- C#中数组做参数问题