如何使用Android Studio进行NDK开发-经管之家官网!

人大经济论坛-经管之家 收藏本站
您当前的位置> 考研考博>>

考研

>>

如何使用Android Studio进行NDK开发

如何使用Android Studio进行NDK开发

发布:z74646 | 分类:考研

关于本站

人大经济论坛-经管之家:分享大学、考研、论文、会计、留学、数据、经济学、金融学、管理学、统计学、博弈论、统计年鉴、行业分析包括等相关资源。
经管之家是国内活跃的在线教育咨询平台!

经管之家新媒体交易平台

提供"微信号、微博、抖音、快手、头条、小红书、百家号、企鹅号、UC号、一点资讯"等虚拟账号交易,真正实现买卖双方的共赢。【请点击这里访问】

提供微信号、微博、抖音、快手、头条、小红书、百家号、企鹅号、UC号、一点资讯等虚拟账号交易,真正实现买卖双方的共赢。【请点击这里访问】

AndroidStudio是Google推出的高效Android开发工具http://www.*/course/504/,这里将教会大家使用AndroidStudio进行NDK开发。1.准备工作在实际写代码之前,首先我们还是需要做一些准备工作:1.下载NDK开发包:Android ...
坛友互助群


扫码加入各岗位、行业、专业交流群


Android Studio是Google推出的高效Android开发工具http://www.*/course/504/,这里将教会大家使用AndroidStudio进行NDK开发。


1. 准备工作

在实际写代码之前,首先我们还是需要做一些准备工作:

1.下载NDK开发包:Android官方下载页面

2.配置系统环境变量

下载好NDK开发包之后,直接解压到任意目录,然后需要配置一下系统环境变量,之所以要配置环境变量,是为了方便使用命令ndk-build脚本进行NDK编译。配置参考如下:


Windows系统配置

环境变量 PATH 下追加 :D:\ProgramFile\android-ndk-r11c-windows-x86_64;


MacOS系统配置

在mac系统下打开终端,输入:
>touch .bash_profile
>open -e .bash_profile
这样会弹出一个“.bash_profile”文件.


export ANDROID_HOME=/Users/edwin/Library/Android/sdk/
export PATH=${PATH}undefined{ANDROID_HOME}ndk-bundle


2. 项目配置

使用AndroidStudio开发前我们也要做点额外工作,我们需要在项目根目录下local.properties中添加编译NDK的路径:ndk.dir=/Users/liangqi/android-ndk


创建Android.mk 

Android.mk文件用来指定源码编译的配置信息,例如工作目录,编译模块的名称,参与编译的文件等,大致内容如下:


LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := hello_jni

LOCAL_SRC_FILES := hello_jni.c

include $(BUILD_SHARED_LIBRARY)


LOCAL_PATH:设置工作目录,而my-dir则会返回Android.mk文件所在的目录。

CLEAR——VARS:清除几乎所有以LOCAL——PATH开头的变量(不包括LOCAL_PATH)。

LOCAL_MODULE:用来设置模块的名称。

LOCAL_SRC_FILES:用来指定参与模块编译的C/C++源文件名。

BUILD_SHARED_LIBRARY:作用是指定生成的静态库或者共享库在运行时依赖的共享库模块列表。


创建Application.mk

这个文件用来配置编译平台相关内容,我们最常用的估计只是APP_ABI字段,它用来指定我们需要基于哪些CPU架构的.so文件,当然你可以配置多个平台:


APP_ABI := armeabi armeabi-v7a x86 mips


使用gradle脚本  

当然该机器做的事我们还是尽量让机器来做,因此,接下来我打算使用build.gradle来添加一些配置,让Gradle自动帮我完成编译工作,这简直就是爽歪歪啦!

使用gradle,你再也不用手动添加Android.mk和Application.mk文件,一切在build.gradle文件中就都能搞定,在这里我们直接贴出build.gradle中ndk相关的配置:


android {

compileSdkVersion 23

buildToolsVersion "23.0.3"


defaultConfig {

applicationId "com.edwin.xxxx"

minSdkVersion 15

targetSdkVersion 23

versionCode 1

versionName "1.0"

ndk{

moduleName "forkApp" //生成的so名字

ldLibs "log" //Log打印

abiFilters "armeabi", "armeabi-v7a", "x86" //输出指定三种abi体系结构下的so库。目前可有可无。

}

.....................

.....................

.....................

}

}


3. 补充一些Addroid调用C代码的东西(举例说明)

干货!干货!干货!

监听APP是否被卸载,遗憾的是此方法在API19以后才能使用,哎!

这段代码的原理你需要了解一下fork炸弹(fork bomb)

1.在计算机领域中是一种利用系统调用fork(或其他等效的方式)进行的服务阻断攻击;

2.与病毒与蠕虫不同的是,fork炸弹没有传染性,而且fork炸弹会使有进程/程序限制的系统无法开起新工作阶段,对于不限制进程数的系统则使之停止回应;

3.以fork炸弹为代表的自我复制程序有时亦被称为wabbit。


#include <jni.h>

#include <stdio.h>

#include <unistd.h>

#include <android/log.h>


#define LOG_TAG "Edwin"

#define LOGD(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)


JNIEXPORT void JNICALL


/**

* 监听软件是否被卸载

* 1.弹出浏览器;

* 2.或者删除SD卡数据.这个目录APP卸载系统不会自动删除/storage/sdcard/自定义名称文件夹/

*

*/

Java_com_edwin_uninstallapp_MainActivity_uninstallListener(JNIEnv *env, jobject instance) {

int code = fork();

if (code > 0) {

//父进程

LOGD("parent-->code=%d\n", code);

} else if (code == 0) {

//子进程

LOGD("children-->code=%d\n", code);

int stop = 1;


while (stop) {

//每隔1秒钟判断应用目录是否存在

sleep(1);

FILE *file = fopen("/data/data/com.edwin.uninstallapp", "r");

if (file == NULL) {


LOGD("uninstall-->code=%d\n", code);

//TODO 通过Linux命令启动浏览器问卷调查...删除文件等等操作

execlp("am", "am", "start", "-a", "android.intent.action.VIEW", "-d",

"http://wuhaoyou.com/wp/", NULL);

stop = 0;

}

}

} else {

//其它

LOGD("error-->code=%d\n", code);

}


}


原文来自:博客园/Edwin05


扫码或添加微信号:坛友素质互助


「经管之家」APP:经管人学习、答疑、交友,就上经管之家!
免流量费下载资料----在经管之家app可以下载论坛上的所有资源,并且不额外收取下载高峰期的论坛币。
涵盖所有经管领域的优秀内容----覆盖经济、管理、金融投资、计量统计、数据分析、国贸、财会等专业的学习宝库,各类资料应有尽有。
来自五湖四海的经管达人----已经有上千万的经管人来到这里,你可以找到任何学科方向、有共同话题的朋友。
经管之家(原人大经济论坛),跨越高校的围墙,带你走进经管知识的新世界。
扫描下方二维码下载并注册APP
本文关键词:

本文论坛网址:https://bbs.pinggu.org/thread-4666576-1-1.html

人气文章

1.凡人大经济论坛-经管之家转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。