返回> 网站首页 

Android Java NDK开发

yoours2014-06-14 17:06:39 阅读 1501

简介一边听听音乐,一边写写文章。

一、开发环境
       略

二、使用STL
创建Application.mk文件,写入:
APP_STL := stlport_static  // 静态链接stl库

三、NDK编译文件 + STL
Android.mk文件
APP_PLATFORM := android-8  // 最小版本
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_LDLIBS    := -llog \
${ANDROID_NDK_ROOT}/sources/cxx-stl/stlport/libs/armeabi/libstlport_static.a  //STL链接库
LOCAL_C_INCLUDES := ${ANDROID_NDK_ROOT}/sources/cxx-stl/stlport/stlport/     // STL头文件路径
LOCAL_MODULE    := FReader
LOCAL_SRC_FILES := Function/ReadWriteLock.cpp Function/PortBase.cpp Function/TcpClient.cpp Function/EndPort.cpp FReader.cpp

include $(BUILD_SHARED_LIBRARY)

四、NDK网络socket
bool CTcpClient::Open(char *serv_ip, const int serv_port)
{
LOGE("CTcpClient::Open:%s - %d\r\n", serv_ip, serv_port);
struct sockaddr_in their_addr;
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0))== -1)//建立socket
{
LOGE("sockfd = socket Error:%d\r\n", errno);
return false;
}
// 以下略
}
socket创建失败,返回码13,没有权限。
修改AndroidManifest.xml文件,增加socket权限
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>

五、NDK调试信息输出
#include<android/log.h>
#define LOG_TAG "JNILOG" // 这个是自定义的LOG的标识 #undef LOG // 取消默认的LOG 
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__) // 定义LOG类型
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__) // 定义LOG类型
#define LOGW(...) __android_log_print(ANDROID_LOG_WARN,LOG_TAG,__VA_ARGS__) // 定义LOG类型
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__) // 定义LOG类型
#define LOGF(...) __android_log_print(ANDROID_LOG_FATAL,LOG_TAG,__VA_ARGS__) // 定义LOG类型

使用:
char * tmp="hello world!";
LOGE("Android Jni Log test !==%s==\n",tmp);

六、安卓模拟器
每次调试会重新打开新的模拟器,速度慢,浪费时间。
解决方法:
关闭模拟器,任务管理器中结束掉adb.exe程序。
        在adb目录下,执行 adb.exe start-server 即可

七、eclipse窗口
打开工程窗口、LogCat窗口
        Window->ShowView->Other...
       输入logcat,打开LogCat窗口
输入projects,打开工程窗口

八、Java与JNI传入对象
        嵌套类(嵌套对象),都是一样的思路
1. 首先查找对象类名
2. 根据查找到的对象,获取各个字段(成员)
3. 使用传进来的obj和获取的各个字段来进行取值和赋值操作
微信小程序扫码登陆

文章评论

1501人参与,0条评论