Android入门笔记12
交叉编译
- 在一个平台下,编译出另一个平台能够执行的二进制的代码
- 平台:windows,mac os,linux
- 处理器:x86,arm,mips
交叉编译的原理
- 源代码->编译->链接->可执行程序
- 模拟其他平台的特性
交叉编译的工具链
- 多个工具的集合,一个工具使用完后接着调用下一个工具
常见工具
- NDK:native developement kit:开发jni必备,就是模拟其他平台特性来编译代码的工具
- CDT:C/C++ developement tools:高亮显示c语言关键字
- cygwin:一个模拟器,可以再windows下运行linux指令
NDK目录结构
- docs:帮助文档
- build/tools:linux的批处理文件
- platforms:编译c代码需要使用的头文件和类库
- prebuilt:预编译使用的二进制可执行文件
- sample:jni的使用例子
- source:ndk的源码
- toolchains:工具链
- ndk-build.cmd:编译打包c代码的一个指令
使用jni
在项目根目录下创建jni文件夹
在jni文件中创建一个c文件
在java代码中,创建一个本地方法helloFromC
public native String helloFromC();
在jni中定义函数实现这个方法,函数名必须为
jstring Java_com_itheima_helloworld1_MainActivity_helloFromC(JNIEnv* env, jobject obj)
返回一个字符串,用c定义一个字符串
char* cstr = "hello from c";
把c的字符串转换成java的字符串
jstring jstr = (*env)->NewStringUTF(env, cstr);return jstr;
在jni中创建Android.mk文件
在c文件中添加<jni.h>头文件
在jni文件夹下执行ndk-build.cmd指令
java代码中加载so类库,调用本地方法
常见错误
findLibrary returned null
- CPU平台不匹配
- 加载类库时,写错类库名字
本地方法找不到
- 忘记加载类库
- c代码中方法名写错了
javah
*1.7:在src目录下执行javah 包名.类名
*1.6:在bin/classes目录下执行
javap
- 在bin/class目录下执行javap -s 包名.类名
- 打印方法签名
C向C++改造
- 把c文件后缀名换成cpp
- Android.mk文件中的hello.c也要换成hello.cpp
- c++的使用的环境变量结构体中,访问了c使用的结构体的函数指针,函数名全部都是一样的,只是参数去掉了结构体指针
- 访问函数指针时,把env前面的*号去掉,因为此时env已经是一级指针
- clean,清除之前编译的残留文件
- 把声明函数的h文件放入jni文件夹中,include该h文件
Android入门笔记12相关推荐
- Android入门笔记之更改手机屏幕方向
Android入门笔记之更改手机屏幕方向 <1>简介 通过一个按钮组来改变横屏竖屏显示. <2>关键步骤 主要通过android.app.activity.getRequest ...
- 【机器学习入门笔记12:matplotlib绘图模块的使用】20190217
2019-02-17 by 崔斐然 我们先在anaconda中参考笔记1中的配置方法安装matlpotlib. plt.plot绘制折线图,其中参数1:x轴坐标,参数2:Y轴坐标,参数3:颜色 im ...
- Android入门(12)| 数据持久化
文章目录 数据持久化 文件存储 将数据存储进文件 实例 从文件中读取数据 实例 SharedPreferences存储 将数据存储进文件 实例 从文件中读取数据 实例 实现记住密码的功能 SQLite ...
- 吴恩达机器学习入门笔记12/13-聚类与降维
12 聚类-无监督学习算法之一 聚类试图将数据集中的无标记样本划分为若干个通常不相交的子集,每个子集称为一个簇(cluster),每个簇可能对应于一些潜在的概念 聚类算法的两个基本问题:性能度量和距离 ...
- Android复习笔记(12) -handler的使用
handler主要实现现在之间的通信.在子线程中执行耗时操作,通过handler传递数据给主线程进行UI的更新. 用法: 1.在主线程中创建Handler子类对象, 重写handleMessage() ...
- 云炬Android开发笔记 12基于WebView的混合App框架设计(包含浏览器与原生请求Cookie的处理)
阅读目录 1.WebView高可扩展性封装 1.1 发现模块的框架搭建 1.2 webView的基类 1.3 对webview基类的实现 1.4 setInitializer的方法的实现 1.5 we ...
- Android Studio 基础入门笔记
Android Studio 基础入门笔记 Android Studio 基础入门笔记 为什么选择使用 Android Studio 而不是EclipseADT 安卓配置JDK AS如何更新 常规的 ...
- 理财入门笔记(1课-12课)
理财入门笔记(1课-12课) 一.改变穷人思维 穷爸爸富爸爸作者罗伯特清崎,财务自由思想在90年代掀起了浪潮,真的是说出了穷富的秘密,大家务必认真看认知很重要:富人思维揭秘 学习理财的目的 1.聪明消 ...
- Android 插件化原理入门笔记
Android开发笔记 onGithub 笔记,参考7.2中所列参考文章所写,DEMO地址在PluginTestDemoApplication 1.综述 2015年是Android插件化技术突飞猛进的 ...
- Android入门自学笔记
Android入门 前几个月要去作物联网项目,花了一个月入门android本文写于物联网大赛后 Android入门所需书籍 <android第一行代码>-----入门必看书.这本书实例和理 ...
最新文章
- 2020-11-02C 标准库 - <ctype.h>
- 结构型模式之Composite模式
- [转载]Javascript异步编程的4种方法
- C语言,把指针按地上摩擦,爽
- spring中@Value的使用(读取配置文件信息)
- c语言程序设计实践教程编程题8.3,C语言程序设计教程(21世纪计算机科学与技术实践型教程)...
- 大型网络之---公司内部局域网
- java中整形_java中怎样实现60多位整形数字的运算
- Matlab重建信号实验总结,实验三信号采样与重建(实验报告).doc
- MySQL索引的原理,B+树、聚集索引和二级索引的结构分析
- mysql 循环_MySQL存储过程中的3种循环【转载】
- IDEA设置背景与字体大小
- 网页游戏开发语言AS3(ActiveScript3.0)
- 局域网共享问题解决方案----日常经验总结
- Pdf之C#直接打印pdf文件
- 宾州州立计算机科学世界排名,宾州州立大学帕克分校qs世界排名
- 11月第5周业务风控关注|重磅!瓜子二手车“遥遥领先”被罚天价1250万
- 自动化测试框架[Cypress命令行执行测试详解]
- 想出名 你就这样炒作自己
- 当你试图将【圣杯布局】无限套娃__