android的ndk开发入门示例

Android-NDK开发入门 / 省略引用的第三方库可以看到,相比普通的Android应用,build.gradle配置中多了两个externalNativeBuild配置项。其中,defaultConfig里面的的externalNativeBuild主要是用于配置Cmake的命令参数,而外部的externalNativeBuild的主要是定义了CMake的构建脚本CMakeLists.txt的路径。 阅读详情


 

NDK: NativeDevelopment Kit

 

Android程序运行在Dalvik虚拟机中,NDK允许用户使用类似C /C++之类的原生代码语言执行部分程序。

 

NDK包括了:

从C / C++生成原生代码库所需要的工具和build files。

将一致的原生库嵌入可以在Android设备上部署的应用程序包文件(application packages files ,即.apk文件)中。

支持所有未来Android平台的一些列原生系统头文件和库

 

使用NDK的理由:

1. 代码的保护,由于apk的java层代码很容易被反编译,而C/C++库反汇难度较大。

2. 在NDK中调用第三方C/C++库,因为大部分的开源库都是用C/C++代码编写的。

3. 便于移植,用C/C++写得库可以方便在其他的嵌入式平台上再次使用。

 

上面内容摘自百度百科。

 

 


有天有个哥们找到我,考虑到java的apk不够安全,想将协议部分封装到so库文件中,需要做个技术前期验证,看看效果如何,于是有了下面的示例。

 

这个示例分步骤实现了:

1.       java调用.so文件

2.       显示char数组的字符串

3.       不同进制显示char数组

4.       java调用so从本地返回char数组

5.       java传递char数组给so,然后so修改后再返回char数组给java

 

 

 

基本步骤是:

/* 1. 先编写java文件,定义好本地函数名称和参数;

 * 2. cd C:\LHANDROID\code\hello

 * 3. md jni;

 * 4. 运行项目,编译HelloJni.java,或者手工使用javac编译,在目录

 * C:\LHANDROID\code\Hello\bin\classes\com\example\hello

 * 中生成HelloJni.class

 * 5. 根据HelloJni.class中本地函数的定义生成c语言头文件:

cd C:\LHANDROID\code\Hello\

javah -classpath bin\classes -d jni com.example.hello.HelloJni

 * 6. 根据生成头文件cd C:\LHANDROID\code\Hello\jni\com_example_hello_HelloJni.h

                 中的定义,编写hello-jni.c的函数定义;

 * 7. 拷贝一个Android.mk到jni中修改

 * 8. 编译:C:\LHPROGRAM\android-ndk-r8d\ndk-build.cmd

 结果:

C:\LHANDROID\code\hello>C:\LHPROGRAM\android-ndk-r8d\ndk-build.cmd

C:/LHPROGRAM/android-ndk-r8d/build/core/add-application.mk:128: Android NDK: WAR

NING: APP_PLATFORM android-14 is larger than android:minSdkVersion 8 in ./Androi

dManifest.xml

"Compile thumb : hello-jni <= hello-jni.c

SharedLibrary  : libhello-jni.so

Install        : libhello-jni.so => libs/armeabi/libhello-jni.so

 

 * 9. 直接编译运行apk

 * 

 */

 

 

建议:

最初觉得自己对c/c++还算熟悉,结果发现其实会那个还远远不够,核心的问题是要搞清楚那个jni.h,明白java的数据类型在ndk中的映射,同时知道对该类型的操作方法。强烈建议仔细看看jni.h文件。

 

GOD BLESS U!

 

 

示例参考:

http://download.youkuaiyun.com/detail/testingba/5203811

 

 

Android NDK 入门指南:在 Ubuntu 上进行编程 通过结合使用 Java 和本地代码,开发者可以充分发挥本地语言的性能优势,从而提高 Android 应用的性能和功能。在 src/main 目录下创建一个名为 jni 的文件夹,并在该文件夹中创建一个名为 native-lib.cpp 的源文件。通过使用 Android NDK,你可以进一步探索使用 C、C++ 和其他本地语言开发高性能的 Android 应用程序的能力。以下是一个简单的示例,展示了如何编写一个使用本地代码的 Android 应用程序。首先,创建一个新的 Android 项目。 阅读详情

相关推荐

aide可用的ndk亲测可用

aide可用的ndk亲测可用

最新NDK下载(包含32位和64位)

32位的NDK: 链接:http://pan.baidu.com/s/1mg5wnMC 密码:08bo 64位的NDK: 链接:http://pan.baidu.com/s/1jGlhA0A 密码:xnag

drinkingcode 1万+

AIDE插件c++中文版免费版打包

包含:AIDE_3.2.1910.apk中文版、aide ndk.apk、ndk数据包。免手机root

AIDE_ndk_C++安装

AIDE和C++插件安装

anzhuoaaaanzhuo的博客 1万+

电源设计避坑指南:半桥LLC软启动的5个常见错误及解决方案

本文针对半桥LLC谐振变换器软启动过程中的五个常见设计错误,提供了详细的工程解决方案。重点分析了忽视谐振腔初始状态导致的电流冲击、软启动斜坡与环路带宽不匹配、开环到闭环切换时机不当、变压器偏磁以及参数未考虑边界条件等问题,并给出了包括主动预充电、自适应斜坡、最佳切换点判定等实用调试技巧,帮助工程师实现平稳可靠的电源启动。

weixin_29260291的博客 268

Python OpenCV基于颜色通道分离法去除图片中的红色印章

最近一段时间的工作都是研究如何去除图片中的红色印章,在网上查找了大量的大佬写过的方法,发现大多数是采取颜色通道分离法来做,并且效果还不错。站在前人的肩膀上,我又做了些许调整,谈不上是改进,但是能应对更对的情况总还是好的,特此记录。 拿发票做例子,印章相较于其它部分最大的不同就是印章是红色的,而其它部分不是(这是一句废话)。 那么第一步当然就是将红色分离出来,这一步可以采用Python第三方库OpenCV里的 cv2.split()方法,该方法是把RGB图像的三个通道拆分开来,得...

wl_Honest的博客 1万+

android NDK 开发包,网盘下载,不限速

记录下ndk 开发包的地址,分享给大家。Android studio的下载包。主要是19-25,其他的没有。

beijinghsj的博客 2581

android6 usb默认文件管理,不弹RSA配对提示框

本文修改针对 高通 Android6.0.1 出user版本时 https://www.cnblogs.com/Jokeyyu/p/7424262.html http://blog.youkuaiyun.com/sinc00/article/details/44957943 diff --git a/frameworks/base/packages/SystemUI/src/com/android...

木叶风的博客 690

Android NDK 下载地址

https://developer.android.google.cn/ndk/downloads/

piaomiaozaitianya的博客 8520

深入解析Unity3D中PostLateUpdate突然占用大量时间的原因

在Unity3D的生命周期中,是一个在LateUpdate之后被调用的方法。它通常用于处理一些需要在所有更新(包括物理更新和动画更新)之后进行的逻辑。由于它在游戏循环的后期阶段被调用,因此它通常用于处理与渲染直接相关的任务,如相机调整、UI更新等。突然占用大量时间的问题可能由多种原因引起,包括复杂的逻辑处理、频繁的资源加载、不恰当的渲染优化、插件或第三方库的副作用以及内存泄漏或垃圾回收等。为了解决这个问题,开发者需要仔细审查和优化中的代码,同时利用Unity提供的工具来监控和分析游戏性能。

Yori_22的博客 979

HFSS/ADS仿真实操:手把手调优一个2.4GHz SAW滤波器的IDT结构

本文详细介绍了使用HFSS和ADS仿真工具优化2.4GHz表面声波滤波器(SAW)的IDT结构。从材料参数设置到IDT建模,再到参数化扫描与频率调谐,提供了实用的操作步骤和优化技巧,帮助工程师快速掌握SAW滤波器的设计方案与性能调优方法。

weixin_29197835的博客 531

Android NDK下载(r10~ r26d) 持续更新

鉴于有些人不能上官网,所以复制下来给需要的人。 r10d [Windows] http://dl.google.com/android/ndk/android-ndk-r10d-windows-x86.exe http://dl.google.com/android/ndk/android-ndk-r10d-windows-x86_64.exe[Mac OS X] http://dl.google.

123456789 5万+

YOLO蒸馏原理篇之---MGD、CWD蒸馏

本文详细介绍了特征蒸馏中的两种经典有效方法,MGD和CWD蒸馏

qq_41920323的博客 3240

Android NDK开发入门实战示例(史上最强NDK入门项目实战)

转载于其它社区的文档,很强悍的Android NDK开发入门实例,想要了解和入门NDK的朋友,这肯定是您的首选资料!

Ray 250

【好玩的游戏项目】使用Docker快速部署属于你的RPG网页小游戏

【好玩的游戏项目】使用Docker快速部署属于你的RPG网页小游戏

jks212454的博客 5572

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Android NDK开发之入门示例 用C++ 写一个能四则运算的计算器

这回用Android的NDK技术写一个计算器练练手,啥是Android的NDK开发?看看Google的介绍--传送门 为啥要用NDK开发呢,NDK是用C++ 写的,运行效率特别高,在一些需要复杂计算的地方(例如游戏开发),还有就是Java代码反编译比较简单,很容易被反编译暴露源码,C++的反编译难度较大,涉及...

weixin_33895657的博客 208

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

NDK 在 Android studio如何使用(Android studio NDK)

其实这个东西入门的话。直接在官网查找demo再结合文档就能间接了解如何构建是最快捷的。 这里提供一下官网和demo的地址。 官网的NDK在Android studio的搭建:http://tools.android.com/tech-docs/new-build-system/gradle-experimental 官网的Demo:https://github.com/googlesampl...

weixin_34242331的博客 164

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Android: NDK编程入门笔记

为何要用到NDK? 概括来说主要分为以下几种情况: 1. 代码的保护,由于apk的java层代码很容易被反编译,而C/C++库反汇难度较大。 2. 在NDK中调用第三方C/C++库,因为大部分的开源库都是用C/C++代码编写的。 3. 便于移植,用C/C++写得库可以方便在其他的嵌入式平台上再次使用。 下面就介绍下Android NDK的入门学习过程: 入门的最

haoba1987的专栏 753

NDK编程入门笔记

为何要用到NDK? 概括来说主要分为以下几种情况: 1. 代码的保护,由于apk的java层代码很容易被反编译,而C/C++库反汇难度较大。 2. 在NDK中调用第三方C/C++库,因为大部分的开源库都是用C/C++代码编写的。 3. 便于移植,用C/C++写得库可以方便在其他的嵌入式平台上再次使用。 下面就介绍下Android NDK的入门学习过程: 入门的最

愤怒的油条 952

NDK官网介绍

        Android的官网:https://developer.android.google.cn/ndk/   Android的便捷入口: 入门指南 :介绍NDK的工作原理和主要组件以及各组件的设置; 官方文档:Android NDK的API参考 示例:包括NDK示例和VULKAN示例 下载: Window(32位和64位)、mac、Linux 64-bit(x86)版本下载...

牛八少爷的专栏 1703

Android: NDK编程入门笔记-编译.so

原文:http://www.cnblogs.com/hibraincol/archive/2011/05/30/2063847.html 为何要用到NDK? 概括来说主要分为以下几种情况: 1. 代码的保护,由于apk的java层代码很容易被反编译,而C/C++库反汇难度较大。 2. 在NDK中调用第三方C/C++库,因为大部分的开源库都是用C/C++代码编写的。 3. 便于

u013790419的专栏 899

Android NDK 开发(二) -- 从Hlello World学起【转】

 转载请注明出处:http://blog.youkuaiyun.com/allen315410/article/details/41805719          上篇文章讲述了Android NDK开发的一些基本概念,以及NDK的环境搭建,相信看过的朋友NDK开发环境搭建应该是没有问题了,还没有搭建或者不知道怎么搭建的朋友请点击这里。那么这篇文章,我们跟刚学Java编程语言一样,从世界知名程序“Hello...

weixin_34301307的博客 84
上一篇: 通过GPS测试跑步速度可行性验证
下一篇: android生命周期测试
Testingba
博客等级 码龄15年 128粉丝 86原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Testingba

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值