Android之JNI:Android Studio使用Android.mk编译C/C++源码

1.生成.h头文件,配置.c文件(可查看Android之JNI:Android Studio使用Gradle编译C/C++源码)

2.编写Android.mk

//Android.mk简介参考链接:http://blog.sina.com.cn/s/blog_602f8770010148ce.htmlLOCAL_PATH:= $(call my-dir)  //Android.mk 文件首先必须定义LOCAL_PATH变量,以便用于在开发树中查找源文件.宏函数‘my-dir‘由编译系统提供,用于返回当前路径(即包含Android.mk的目录)include $(CLEAR_VARS) //CLEAR_VARS由编译系统提供,指定让GNU MAKEFILE清除许多LOCAL_XXX变量(例如 LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES, 等等...),除LOCAL_PATH.因为所有的编译控制文件都在同一个GNU MAKE执行环境中,所有的变量都是全局的,所以有必要.LOCAL_MODULE := juziJni  //表示编译的动态库名称.名称必须唯一,而且不包含任何空格且不要以lib开头LOCAL_SRC_FILES:= jni_use.c //表示源代码文件include $(BUILD_SHARED_LIBRARY) //表示编译生成共享库,是编译系统提供的变量,指向一个GNU Makefile脚本,负责收集自从上次调用‘include $(CLEAR_VARS)‘以来,定义在LOCAL_XXX变量中的所有信息,并且决定编译什么,如何正确地去做.(BUILD_STATIC_LIBRARY:编译为静态库;BUILD_SHARED_LIBRARY :编译为动态库;BUILD_EXECUTABLE:编译为Native C可执行程序)

3.linux环境下使用ndk-build命令编译生成.so文件

若要指定架构,可以使用如下命令:

  1. ndk-build APP_ABI="armeabi armeabi-v7a x86 mips"

4.使用生成的.so文件【Android之Android Studio下使用JNI:Android Studio下使用.so文件】

小Tips:

1.Android.mk:2: *** missing separator.  Stop.

LOCAL_PATH:= $(call my-dir)include$(CLEAR_VARS)LOCAL_MODULE := juziJniLOCAL_SRC_FILES:= jni_use.cinclude$(BUILD_SHARED_LIBRARY)

解决办法:$符号前面必须加一个空格

LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := juziJniLOCAL_SRC_FILES:= jni_use.cinclude $(BUILD_SHARED_LIBRARY)

2./home/emily/android-ndk-r10e/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: fatal error: ./obj/local/armeabi/PassWorld: Input/output error

collect2: error: ld returned 1 exit status

解决办法:在虚拟机和window的共享文件中编译会出现这种问题,copy项目至linux目录即可。

来自为知笔记(Wiz)

时间: 2024-08-04 18:31:02

Android之JNI:Android Studio使用Android.mk编译C/C++源码的相关文章

Android之JNI:Android Studio使用Gradle编译C/C++源码

使用Gradle编译C/C++源码步骤 申明NDK工具类,内部定义native方法 package com.coca.firstdemo; /** * Created by Administrator on 2016/6/6. */public class JniShareUtils { public native String getLogCount(String params);} 定位至项目的app文件夹,调用javah命令生成.h文件: javah com.coca.firstdemo.

Android系统篇之----编写系统服务并且将其编译到系统源码中

在之前已经介绍了一篇关于如何编写简单的驱动以及访问该驱动的小程序,最后将程序编译到Android内核源码中通过程序访问驱动验证是可以通过的,那么本文就继续这个知识点,把这个驱动程序通过JNI连接创建一个系统服务,提供给上层应用访问改服务功能,可以看到前一篇介绍驱动程序的功能是属于内核层的,而本文介绍的内容是Framework层的知识. 声明:本文内容参考罗升阳的书籍:<Android系统源代码情景分析> 如果想了解更详细的内容非常建议购买此书 非常感谢罗神的这本书,给我带来很多未知的知识,大神

Android系统篇之—-编写系统服务并且将其编译到系统源码中【转】

本文转载自:http://www.wjdiankong.cn/android%E7%B3%BB%E7%BB%9F%E7%AF%87%E4%B9%8B-%E7%BC%96%E5%86%99%E7%B3%BB%E7%BB%9F%E6%9C%8D%E5%8A%A1%E5%B9%B6%E4%B8%94%E5%B0%86%E5%85%B6%E7%BC%96%E8%AF%91%E5%88%B0%E7%B3%BB%E7%BB%9F%E6%BA%90%E7%A0%81/ 在之前已经介绍了一篇关于 如何编写简单的

android WebView详解,常见漏洞详解和安全源码

这篇博客主要来介绍 WebView 的相关使用方法,常见的几个漏洞,开发中可能遇到的坑和最后解决相应漏洞的源码,以及针对该源码的解析. 由于博客内容长度,这次将分为上下两篇,上篇详解 WebView 的使用,下篇讲述 WebView 的漏洞和坑,以及修复源码的解析. 下篇:android WebView详解,常见漏洞详解和安全源码(下) 转载请注明出处:http://blog.csdn.net/self_study/article/details/54928371. 对技术感兴趣的同鞋加群 54

android WebView详解,常见漏洞详解和安全源码(下)

上篇博客主要分析了 WebView 的详细使用,这篇来分析 WebView 的常见漏洞和使用的坑. 上篇:android WebView详解,常见漏洞详解和安全源码(上) 转载请注明出处:http://blog.csdn.net/self_study/article/details/55046348 对技术感兴趣的同鞋加群 544645972 一起交流. WebView 常见漏洞 WebView 的漏洞也是不少,列举一些常见的漏洞,实时更新,如果有其他的常见漏洞,知会一下我-- WebView

Android系统篇之—-编写简单的驱动程序并且将其编译到内核源码中【转】

本文转载自:大神 通过之前的一篇文章,我们了解了 Android中的Binder机制和远程服务调用 在这篇文章中主要介绍了Android中的应用在调用一些系统服务的时候的原理,那么接下来就继续来介绍一下如何通过编译Android源码来手动添加一个系统服务,让编译之后的Android系统中存在我们的这个服务,每个应用都可以调用.但是本文得先介绍一下如何编写一个简单的驱动程序,先介绍了驱动程序,然后在通过JNI让framework层访问这个驱动程序,在通过注册服务来封装这个功能,最后在把这个服务添加

Android系统篇之----编写简单的驱动程序并且将其编译到内核源码中

通过之前的一篇文章,我们了解了 Android中的Binder机制和远程服务调用 在这篇文章中主要介绍了Android中的应用在调用一些系统服务的时候的原理,那么接下来就继续来介绍一下如何通过编译Android源码来手动添加一个系统服务,让编译之后的Android系统中存在我们的这个服务,每个应用都可以调用.但是本文得先介绍一下如何编写一个简单的驱动程序,先介绍了驱动程序,然后在通过JNI让framework层访问这个驱动程序,在通过注册服务来封装这个功能,最后在把这个服务添加到系统中,实现上层

Android动态方式破解apk前奏篇(Eclipse动态调试smail源码)

一.前言 今天我们开始apk破解的另外一种方式:动态代码调试破解,之前其实已经在一篇文章中说到如何破解apk了: Android中使用静态方式破解Apk  主要采用的是静态方式,步骤也很简单,首先使用apktool来反编译apk,得到smail源码,然后分析smail代码,采用代码注入技术来跟踪代码,然后找到关键方法进行修改,进而破解,同时还可以使用一些开源的hook框架,比如:Xposed和Cydia Substrate,来进行关键方法的hook.所以这里我们可以看到我们破解的第一步是使用ap

Android Asynctask与Handler的比较,优缺点区别,Asynctask源码

1  AsyncTask实现的原理,和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程. 使用的优点: l  简单,快捷 l  过程可控 使用的缺点: l  在使用多个异步操作和并需要进行Ui变更时,就变得复杂起来. 2 Handler异步实现的原理和适用的优缺点 在Handler 异步实现时,涉及到 Handler, Loo