赞
踩
主要参考《CTF训练营》
Android是一种基于Linux的开源的操作系统,主要用于移动设备,如智能手机和平板电脑
自2008年以来,Android已更迭了许多版本:
Android系统架构:
Android Studio 是用于开发 Android 应用的官方集成开发环境 (IDE),以 IntelliJ IDEA 为基础构建而成
下载链接:https://developer.android.com/studio
Android Studio项目结构主要包括:
Android SDK是开发Android应用程序所需的软件开发工具和库的集合,谷歌每发布一个新的Android版本或更新版本,就会发布相应的SDK,开发者必须下载并安装。
在导航栏可以打开sdk manager。
sdk manager:
Android SDK包含了从头开始编写程序一直到进行测试所需的所有工具, 这些工具使得从开发、调试到打包的整个开发过程非常顺畅:
Android NDK 是一个工具集,可使用 C 和 C++ 等语言以原生代码(native code)实现应用的各个部分,其主要功能为:
Android NDK构建原生应用时使用的主要组件:
Native层方法有两个特征:
将上面的代码命名为MyJni.java,运行javah MyJni
命令,会在同目录下生成MyJni.h文件:
/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class MyJni */ #ifndef _Included_MyJni #define _Included_MyJni #ifdef __cplusplus extern "C" { #endif /* * Class: MyJni * Method: getPart3 * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_MyJni_getPart3 (JNIEnv *, jclass); #ifdef __cplusplus } #endif #endif
包含对函数Java_MyJni_getPart3
的说明:
jstring
编写MyJni.c实现函数:
#include "MyJni.h"
JNIEXPORT jstring JNICALL Java_MyJni_getPart3(JNIEnv *env, jclass obj)
{
return (*env)->NewStringUTF(env, "Just a test!");
}
然后新建两个文件Android.mk和Application.mk修改编译参数:
Android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := MyJni
LOCAL_SRC_FILES := MyJni.c
include $(BUILD_SHARED_LIBRARY)
Application.mk:
APP_ABI := all
然后将这些文件放在jni文件夹中,使用ndk-build
编译:
MyJni.getPart3方法调用后,JNI需要连接到库中的相应函数,因此必须知道 Java 声明的Native方法与so库中函数的配对关系,配对的方式主要有两种:
使用JNI Native方法名称解析的动态链接
Java_com_example_mobilenormal_MyJni_getPart3
Java
,一个完整的类名com_example_mobilenormal_MyJni
,原方法名称getPart3
使用Registernative API调用的静态链接
(*env)->RegisterNatives(env, class, method, numMethods)
,调用该函数,即可动态注册Native函数
Application.mk不变,Android.mk中把后缀c换成cpp
Myjni.h
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
#include <assert.h>
#include <cstdlib>
#
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。