NDK Dev
1.cdt下载(http://www.eclipse.org/cdt/downloads.php)
http://mirrors.opencas.cn/eclipse//tools/cdt/releases/8.8/cdt-8.8.0.zip
2.Cygwin(https://cygwin.com/install.html)
第一个工具:
NDK (native develop kits)
交叉编译的工具链:
交叉编译: 在一个平台(处理器,操作系统)下 编译出来另外一个平台下可以运行的代码.
windows AMD intel x86 架构-> 手机 android arm处理器
.c .java
1. 编译 把源代码(高级语言)编译成一个低级语言 (汇编语言)
2. 连接 根据具体平台的特性,(cpu的类型 x86 arm,操作系统的类型)
连接成一个可以执行的二进制可执行的程序.
第二个工具:
cygwin: windows下linux环境的模拟器.
cygwin的安装目录 不能有空格,最好不要中文
第三个工具:
cdt : c/c++ develop tools (主要是用来让c和c++代码 完成高亮显示的作用)
adt : android develop tools
环境变量的作用: 方便的在任何目录下 都可以使用 指定目录里面的工具
LOCAL_PATH := $(call my-dir)
# 交叉编译器 在编译c代码/c++代码依赖的配置文件 linux下 makefile的语法的子集
# 获取当前Android.mk的路径
#变量的初始化操作 特点: 不会重新初始化LOCAL_PATH 的变量
include $(CLEAR_VARS)
#libHello.so 加lib前缀 .so后缀 makefile的语法约定的
LOCAL_MODULE := libHello
LOCAL_SRC_FILES := Hello.c
include $(BUILD_SHARED_LIBRARY)
ndk开发常见错误
1. android.mk文件不存在
$ ndk-build
Android NDK: Your APP_BUILD_SCRIPT points to an unknown file: ./jni/Android.mk
/cygdrive/h/heima6/jni2/ziliao/android-ndk-r7b/build/core/add-application.mk:133: *** Android NDK: Aborting... 。 停止。
2.android.mk文件 的配置信息有错误
$ ndk-build
/cygdrive/h/heima6/jni2/ziliao/android-ndk-r7b/build/core/build-shared-library.mk:23:
*** Android NDK: Missing LOCAL_MODULE before including BUILD_SHARED_LIBRARY in jni/Android.mk 。 停止。
3.c代码 语法出现错误,编译不通过 Error 1.
Compile thumb : Hello <= Hello.c
jni/Hello.c: In function 'Java_cn_itcast_ndk_DemoActivity_helloFromC':
jni/Hello.c:21: error: 'ctr' undeclared (first use in this function)
jni/Hello.c:21: error: (Each undeclared identifier is reported only once
jni/Hello.c:21: error: for each function it appears in.)
jni/Hello.c:21: error: expected ';' before 'c'
/cygdrive/h/heima6/jni2/ziliao/android-ndk-r7b/build/core/build-binary.mk:240: recipe for target `obj/local/armeabi/objs/Hello/Hello.o' failed
make: *** [obj/local/armeabi/objs/Hello/Hello.o] Error 1
4.java层c代码库没有找到
Caused by: java.lang.UnsatisfiedLinkError: Library Hell0 not found
静态加载代码库的时候 代码库没有找到.
5.c代码函数签名出现错误
Caused by: java.lang.UnsatisfiedLinkError: hello_from_c
6.逻辑性的错误, 使用了已经回收的内存空间, 访问了不可以被访问的内存空间,
修改了不能被修改的内存空间
断点. ndk-gdb
通过log 方式来观察程序执行流程
//Log打印
#include <android/log.h>
#define LOG_TAG "System.out"
#define LOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG, __VA_ARGS__)
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)
#define LOGW(...) __android_log_print(ANDROID_LOG_WARN, LOG_TAG, __VA_ARGS__)
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)
Android.mk文件增加LOCAL_LDLIBS += -llog
ndk开发的中文乱码问题:
1.低版本ndk 不支持中文 ndk-r4-crystal
iso-8859-1 转码
阿里旺旺 :
登陆的具体实现 c/c++
socket http
int login(char* username,char * password){
//开启一个socket 连接服务器 , 把username 和 password传给服务器.
//服务器返回 200 登陆成功
//服务器返回404 登陆失败
}
public native int Login(String username, String pwd);
javah 生成native方法的签名
jint Java_xxx_xxx_xxx_xxx_Login(JNIENV* env , jobject obj , jstring username, jstring pwd){
char* cusername = JStr2Cstr();
char* cpwd = JStr2Cstr();
int result = login(cusername ,cpwd);
if(result == 200){
}
}
kiss : keep it simaple stupid
int String byte[]
int[]
1,2,3,4,5
c代码写文件
java读文件
java jni 粘合剂 胶水
c工程实现 具体的代码
jni native ->jni ->.c
1. 当c代码接受到特定的消息 让c代码通知 java代码
2. c程序员 c代码想复用java里面的函数和方法
NDK Dev的更多相关文章
- Android驱动入门-Led控制+app+ndk库+底层驱动
硬件平台: FriendlyARM Tiny4412 Cortex-A9 操作系统: UBUNTU 14.04 LTS 时间:2016-09-20 21:56:48 本次实验使用的是 安卓APP + ...
- Android Studio通过JNI调用NDK程序
NDK开发,其实是为了项目需要调用底层的一些C/C++的一些东西:另外就是为了效率更加高些,安全性更高. 如果你在Eclipse+ADT下开发过NDK就能体会到要么是配置NDK还要下载Cygwin,配 ...
- [原]如何用Android NDK编译FFmpeg
我们知道在Ubuntu下直接编译FFmpeg是很简单的,主要是先执行./configure,接着执行make命令来编译,完了紧接着执行make install执行安装.那么如何使用Android的ND ...
- NDK(19)简单示例:ndk调用java基本方法、数组;使用stl、访问设备
一.ndk调用java类示例 1,调用基本方法 /* * Class: com_example_ndksample_MainActivity * Method: ndkFindJavaClass * ...
- ndk-gdb of NDK r9d modified to *always* debug the ":remote"-process of your app
https://gist.github.com/TomTasche/9690186 ndk-gdb of NDK r9d modified to *always* debug the ":r ...
- 第1章 开发环境安装和配置(二)安装JDK、SDK、NDK
原文 第1章 开发环境安装和配置(二)安装JDK.SDK.NDK 无论是用C#和VS2015开发Androd App还是用Java和Eclipse开发Androd App,都需要先安装JDK和Andr ...
- Android Studio NDK 代码 Source Insight调试 (NDK 目前开发方案 | NDK 编译 | 导入 so 库 | 项目编码转换)
作者 : 韩曙亮 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/52088039 最近在移植一个 JNI 项目, 比较纠结, A ...
- linux下搭建android NDK开发环境
1)下载android-ndk-r4 下载地址 http://www.ideasandroid.com/android/sdk/android-ndk-r4-linux-x86.zip http: ...
- ndk编译libpcap 1.7.4
android完全菜鸟,绝对的第一次接触,想做手机抓包,在网上搜又是NDK 又是JNI 又是JNETPCAP 完全蒙了,让我这种android和java都弄不明白什么关系的人情何以堪! 静下心想一想, ...
随机推荐
- ZOJ 2015 10月份 月赛 3911 Prime Query
这道题我改啊,改啊,交啊,就对了. #include <stdio.h> #include <stdlib.h> #include <math.h> #includ ...
- PHP的类自动加载机制
在PHP开发过程中,如果希望从外部引入一个class,通常会使用include和require方法,去把定义这个class的文件包含进来. 这个在小规模开发的时候,没什么大问题.但在大型的开发项目中, ...
- phpcms v9栏目列表调用每一篇文章内容方法1
我们先来看下默认栏目调用的代码: 复制代码代码如下:{pc:content action="lists" catid="$catid" num="25 ...
- Java操作Oracle数据库以及调用存储过程
操作Oracle数据库 publicclass DBConnection { //jdbc:oracle:thin:@localhost:1521:orcl publicstaticf ...
- CSS3随笔系列之transform(一)—— transform-origin
transform-origin属性平时似乎用得很少,它决定了变换时依赖的原点.基本的属性特性可以参考CSS手册. 如果在H5动画项目中,用到旋转的话,它还是不能小觑的. 假如我们做一个秋千效果 其实 ...
- Tomcat架构(三)
嵌套组件 这些组件是针对Tocmat做的特定实现,他们的主要目的是使各种Tomcat容器可以完成各自的工作. 1.阀(Valve) valve是处理元素,它可以被包含在每个Tomcat容器的处理路径中 ...
- Epoll在LT和ET模式下的读写方式
在一个非阻塞的socket上调用read/write函数, 返回EAGAIN或者EWOULDBLOCK(注: EAGAIN就是EWOULDBLOCK) 从字面上看, 意思是:EAGAIN: 再试一次, ...
- 显示 SQLite 日志
通过在 Logcat 查看 SQL 执行语句可以帮助你调试 SQLite 问题, 使用 ADB SHELL 执行如下命令即可在 Logcat 输出 SQL 执行日志: adb shell setpro ...
- Git的分支与合并
在Git里面我们可以创建不同的分支,来进行调试.发布.维护等不同工作,而互不干扰.下面我们还是来创建一个试验仓库,看一下Git分支运作的台前幕后: $rm -rf test_branch_proj $ ...
- APUE读书笔记-第18章-终端I/O
18.1 引言 *终端I/O的用途很广泛,包括用于终端.计算机之间的直接连线.调制解调器以及打印机等等,所以终端I/O系统非常复杂 18.2 综述 *终端I/O有两种不同的工作模式: (1)规范模式输 ...