- 博客(29)
- 资源 (12)
- 收藏
- 关注
原创 在windows下使用Charles/Fiddler/Wireshark对Andriod/IOS抓包分析
一、首先安装1.1Charles跨平台1.2Fiddler1.3Wireshark三者的安装及配置自行百度。1.在windows下使用Charles对移动终端抓包分析2.Android抓包方法(一)之Fiddler代理3.Wireshark安装时候选择一块网卡进入即可二、三者的区别首先不管是Charles、Fiddler还是Wireshark都必现保证手机和电脑在同一局域网。Charles、Fidd
2017-07-19 11:26:52 1634
原创 System.load 和 System.loadLibrary区别与详解
1.它们都可以用来装载库文件,不论是JNI库文件还是非JNI库文件。在任何本地方法被调用之前必须先用这个两个方法之一把相应的JNI库文件装载。2.System.load 参数为库文件的绝对路径,可以是任意路径。 例如你可以这样载入一个windows平台下JNI库文件: System.load(“C://Documents and Settings//TestJNI.dll”);。System.
2017-07-19 11:26:06 2102
原创 JNI 调用构造方法和父类实例方法
在前面我们学习到了在 Native 层如何调用 Java 静态方法和实例方法,其中调用实例方法的示例代码中也提到了调用构造函数来实始化一个对象,但没有详细介绍,一带而过了。还没有阅读过的同学请移步《JNI——C/C++ 访问 Java 实例方法和静态方法》阅读。这章详细来介绍下初始一个对象的两种方式,以及如何调用子类对象重写的父类实例方法。 构造方法和父类实例方法 我们先回过一下,在 Java
2017-07-19 11:23:36 500
原创 JNI类型签名和方法签名
一、基本数据类型二、引用数据类型 注意: 1、引用数据类型则不能直接使用,需要根据JNI函数进行相应的转换后,才能使用 2、多维数组(包括二维数组)都是引用类型,需要使用 jobjectArray 类型存取其值 ; 例如:二维整型数组就是指向一位数组的数组,其声明使用方式如下: //获得一维数组 的类引用,即jintArray类型 jc
2017-07-18 09:30:27 1077 2
原创 C/C++ 访问 Java 实例方法和静态方法
通过前面 5 章的学习,我们知道了如何通过 JNI 函数来访问 JVM 中的基本数据类型、字符串和数组这些数据类型。下一步我们来学习本地代码如何与 JVM 中任意对象的属性和方法进行交互。比如本地代码调用 Java 层某个对象的方法或属性,也就是通常我们所说的来自 C/C++层本地函数的 callback(回调)。这个知识点分 2 篇文章分别介绍,本篇先介绍方法回调,在第七章中介绍本地代码访问 Ja
2017-07-18 09:30:09 385
原创 JNI内存释放以及泄露处理方法汇总
在c++中new的对象,如果不返回java,必须用release掉,否则内存泄露。包括NewStringUTF,NewObject 。如果返回java不必release,java会自己回收。 jstring jstr = env->NewStringUTF((*p).sess_id); env->DeleteLocalRef( jstr); ....jobject jobj = env
2017-07-18 09:29:49 2807
原创 JNI 访问数组
JNI 中的数组分为基本类型数组和对象数组,它们的处理方式是不一样的,基本类型数组中的所有元素都是 JNI 的基本数据类型,可以直接访问。而对象数组中的所有元素是一个类的实例或其它数组的引用,和字符串操作一样,不能直接访问 Java 传递给 JNI 层的数组,必须选择合适的 JNI 函数来访问和设置 Java 层的数组对象。阅读此文假设你已经了解了 JNI 与 Java 数据类型的映射关系,如果还不
2017-07-18 09:29:27 396
原创 JNI 字符串处理
JNI 字符串处理 处理字符串 从第三章中可以看出 JNI 中的基本类型和 Java 中的基本类型都是一一对应的,接下来先看一下 JNI 的基本类型定义:typedef unsigned char jboolean; typedef unsigned short jchar; typedef short jshort; typedef float
2017-07-18 09:29:08 469
原创 JNI 数据类型与 Java 数据类型的映射关系
当我们在调用一个 Java native 方法的时候,方法中的参数是如何传递给 C/C++ 本地函数中的呢?Java 方法中的参数与 C/C++ 函数中的参数,它们之间是怎么转换的呢?我猜你应该也有相关的疑虑吧,咱们先来看一个例子,还是以 HelloWorld 为例: HelloWorld.java:package com.study.jnilearn; class MyClass {} pu
2017-07-18 09:28:46 442
原创 NdkDemo开发从环境搭建到入门提高
1.环境搭建 2.添加Log打印到logcat 3.Android NDK开发相关知识集合 4.JNI 数据类型与 Java 数据类型的映射关系 5.C中处理Java中传递的字符串-字符串相加 http://www.jianshu.com/p/f2d3f71a1c99“>6.JNI 访问基本类型数组–返回数组之和,返回数组给java http://www.jianshu.com/p/f2
2017-07-18 09:28:21 349
原创 dlopen failed: cannot locate symbol "__aeabi_memclr4
jni中使用(*env)->GetIntArrayRegion(env, mjintArray, 0, cLen, cPArray);时出现crash07-12 20:52:05.931: E/AndroidRuntime(2900): java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "__aeabi_memcl
2017-07-18 09:27:41 5073 3
原创 Eclipse中编写jni c文件中报错Type could not be resolved
如下Type 'JNICALL' could not be resolvedType 'jstring' could not be resolvedType 'jclass' could not be resolvedMethod 'NewStringUTF' could not be resolvedSymbol 'NULL' could not be resolved出现的提示信息如下:
2017-07-18 09:26:56 1798
原创 C 库函数 – memset()
描述 C 库函数 void memset(void str, int c, size_t n) 复制字符 c(一个无符号字符)到参数 str 所指向的字符串的前 n 个字符。声明 下面是 memset() 函数的声明。void *memset(void *str, int c, size_t n)参数 str – 指向要填充的内存块。 c – 要被设置的值。该值以 int 形式传递,但是函数
2017-07-17 09:10:25 391
原创 C语言free()函数:释放动态分配的内存空间
头文件:#include int a[10];// ...free(a);如果 ptr 所指向的内存空间不是由上面的三个函数所分配的,或者已被释放,那么调用 free() 会有无法预知的情况发生。如果 ptr 为 NULL,那么 free() 不会有任何作用。注意:free() 不会改变 ptr 变量本身的值,调用 free() 后它仍然会指向相同的内存空间,但是此时该内存已无效,不能被使用。所
2017-07-17 09:10:07 2646
原创 Eclipse中NDK开发使用Application.mk指定需要编译的平台
ABI(Application Binary Interface)实际就是指应用程序基于哪种指令集来进行编译,我们能用到的ABI 也就四种 armeabi armeabi-v7a x86 和mips ,前两者是最常见的。 其次这4个编译选项的含义: 1.‘armeabi’ – 默认选项,将创建以基于 ARM* v5TE 的设备为目标的库。 具有这种目标的浮点运算使用软件浮点运算。 使用此 AB
2017-07-17 09:09:33 1364
原创 NDK开发错误 use of invalid jobject 0x7fb147b460
JNI中直接返回C/C++的字符串时会报如下错误 JNI DETECTED ERROR IN APPLICATION: use of invalid jobject 0x7fb147b46007-12 11:35:02.133: A/aoc(21402): aliyunos/aoc/vm/jni/java_vm_ext.cc:399] from java.lang.String com.e
2017-07-17 09:09:05 7784 1
原创 C语言strlen()函数:返回字符串的实际长度
头文件:#include #include<stdio.h>#include<string.h>int main(){ char *str1 = "http://see.xidian.edu.cn/cpp/u/shipin/"; char str2[100] = "http://see.xidian.edu.cn/cpp/u/shipin_liming/"; char
2017-07-17 09:08:17 8835
原创 android jni 中文乱码,该怎么解决
android jni 中文乱码 下面这个在java中调用就返回乱码了。 JNIEXPORT jstring JNICALL Java_com_example_nativeaudio_NativeAudio_readFromAssets(JNIEnv* env) { return env->NewStringUTF(“你好”); } 下面这个在java中调用没有问题,返回的是he
2017-07-14 10:08:49 691
原创 JNI日志调试中文乱码
JNI中如果使用jstring jstr = (*env)->NewStringUTF(env,"English");//正常但是使用jstring jstr = (*env)->NewStringUTF(env,"中文输出");//有中文报错 JNI DETECTED ERROR IN APPLICATION: input is not valid Modified UTF-8: illeg
2017-07-14 10:08:26 693
原创 C语言strcat()函数:连接字符串
头文件:#include #include <stdio.h>#include <string.h>int main (){ char str[80]; strcpy (str,"these "); strcat (str,"strings "); strcat (str,"are "); strcat (str,"concatenated.");
2017-07-14 10:07:16 913
原创 C语言strncpy()函数:复制字符串的前n个字符
头文件:#include #include<stdio.h>#include<string.h>int main(void){ char dest1[20]; char src1[] = "abc"; int n1 = 3; char dest2[20]="********************"; char src2[] = "abcxyz";
2017-07-14 10:06:54 5532
原创 C语言strcpy()函数:复制字符串
定义函数:char *strcpy(char *dest, const char *src);函数说明:strcpy()会将参数src 字符串拷贝至参数dest 所指的地址。返回值:返回参数dest 的字符串起始地址。附加说明:如果参数 dest 所指的内存空间不够大,可能会造成缓冲溢出(buffer Overflow)的错误情况,在编写程序时请特别留意,或者用strncpy()来取代。#inclu
2017-07-14 10:06:26 1613
原创 C++动态分配内存(new)和撤销内存(delete)
在软件开发过程中,常常需要动态地分配和撤销内存空间,例如对动态链表中结点的插入与删除。在C语言中是利用库函数malloc和free来分配和撤销内存空间的。C++提供了较简便而功能较强的运算符new和delete来取代malloc和free函数。注意: new和delete是运算符,不是函数,因此执行效率高。虽然为了与C语言兼容,C++仍保留malloc和free函数,但建议用户不用malloc和fr
2017-07-13 08:54:56 753
原创 C语言calloc()函数:分配内存空间并初始化
头文件:#include char *ptr = (char *)calloc(10, 10); // 分配100个字节的内存空间下面的两种写法是等价的:// calloc() 分配内存空间并初始化char *str1 = (char *)calloc(10, 2);// malloc() 分配内存空间并用 memset() 初始化char *str2 = (char *)malloc(20
2017-07-13 08:54:30 2079
原创 C语言malloc()函数:动态分配内存空间
头文件:#include **注意:函数的返回值类型是 void *,void 并不是说没有返回值或者返回空指针,而是返回的指针类型未知。****所以在使用 malloc() 时通常需要进行强制类型转换,将 void 指针转换成我们希望的类型**,例如:char ptr = (char )malloc(10); // 分配10个字节的内存空间,用来存放字符 “`
2017-07-13 08:54:11 1235
原创 C语言字符串二种方式定义
1.字符串的定义形式有两种 1).使用字符数组来存储: 将字符串数据的每1个字符存储到字符数组的元素中,追加1个’\0’表示结束. char name[] = “jack”; 2).使用字符指针来存储: 直接为字符指针初始化1个字符串数据. char *name = “jack”;不管是用上述那种方法,在字符串的最后都有\0以代表字符串结束。计算
2017-07-13 08:53:50 572
原创 Android NDK开发相关知识集合
1.关于方法名 调用 native 方法之前,首先要调用 System.loadLibrary 接口加载一个实现了native 方法的动态库才能正常访问,否则就会抛出 java.lang.UnsatisfiedLinkError 异常,找不到 XX 方法的提示。现在我们想想,在 Java 中调用某个 native 方法时,JVM 是通过什么方式,能正确的找到动态库中 C/C++ 实现的那个 nat
2017-07-13 08:51:45 303
原创 JNI的native代码中打印日志到eclipse的logcat中
若需要添加ndk对log的支持,只需要通过以下2步即可实现。1.1 修改Android.mk 在Android.mk中添加如下内容:LOCAL_LDLIBS:=-llog1.2 在.c或.cpp文件中引用log头文件 添加如下内容:// 引入log头文件#include LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODUL
2017-07-10 16:03:56 518
原创 Eclipse下搭建NDK开发环境及入门Demo
一、关于NDK:谷歌改良了ndk的开发流程,对于Windows环境下NDK的开发,如果使用的NDK是r7之前的版本,必须要安装Cygwin才能使用NDK。而在NDKr7开始,Google的Windows版的NDK提供了一个ndk-build.cmd的脚本,这样,就可以直接利用这个脚本编译,而不需要使用Cygwin了。只需要为Eclipse Android工程添加一个Builders,而为Eclips
2017-07-10 15:04:45 1153
android supportv4最新版本 20.0.1 -SwipeRefreshLayout的需要
2016-08-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人