位置: 编程技术 - 正文

Android jni 应用初探 (MAC 环境)(androidapplication)

编辑:rootadmin
目标:自己生成so库并进行调用。**************************环境:Mac ..3Android studio 1.2NDK (这个不用说,一定要有,,ndk-build 一下包中自带的example,看是否配置好)**************************经过作者实践之后总结出的流程:(1)得到.c 文件 1.首先要写一个java文件,在java文件中加载so库,并调用native方法。 2.执行$javah 包命.文件名 生成.h文件(执行此命令应在包命最外层的同级目录) 3.在新建的.c文件中,include<.h文件>中的方法,并实现。(2)建立目录结构:在项目的根目录下新建JNI 目录,JNI中放置.c文件、mk文件。(3)mk文件内容(Android.mk,Application.mk) Android.mk文件是用来定义编译规则的文件,描述了编译选项、头文件、源文件、依赖库等。文件用到的主要字段及含义有: LOCAL_PATH := $(call my-dir) *local_path 定义了本地源码路径 指定调用my-dir include $(CLEAR_VARS) *清除掉系统的宏定义 LOCAL_MODULE := hello-jni *指定模块的名字,源文件生成的文件名,若生成so文件则在生成的文件前面会自动加上lib。(这个字段的&#; 也就是在java中加载的so库的名字) LOCAL_SRC_FILES := hello-jni.c *指定的C/C&#;&#;源文件 include $(BUILD_SHARED_LIBRARY) *指定生成的文件类型(BUILD_EXECUTABLE 表示生成可执行文件、)(BUILD_SHARED_LIBRARY 生成动态库)(BUILD_STATIC_LIBRARY 生成静态库) Application.mkm描述原生程序的特性(4)编译:在项目的根目录下执行ndk—build。 if(在Android studio环境中) { 在main 目录下新建 jniLibs, 将libs 中生成的内容 全部拷贝到jniLibs目录中 } *************************** java 调用c/c&#;&#;,会根据自身的包名,到特定的文件中去找特定的方法。例如: package com.a.b; class c { public static native String MethodName(); public static void main(String[] args) { System.loadlibrary("Jni-test"); MethodName(); } } 上面这段程序执行时,便会到特定的so库中寻找Java_com_a_b_c_MethodName( JNIEnv* env, jobject thiz) 如果在c文件中这么长的方法名自己去写 避免不了麻烦和出错,有没有方便的方法? 有就是第一步,利用Javah 生成.h文件,然后把其中的方法拷贝到 实现的c文件就可以了。 ***************************

推荐整理分享Android jni 应用初探 (MAC 环境)(androidapplication),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:android jna,android jna,android应用程序,android:initorder,new android application,android:initorder,android jni使用,android:initorder,内容如对您有帮助,希望把文章链接给更多的朋友!

实践Part:

1.新建android应用JniTest(一路next),然后在根目录(JniTest)下新建jni 文件夹,以备后用

2.修改MainActivity内容

public native String getStringFromeNative(),声明了getStringFromeNative()这个Native方法

3.生成.c

(1)$cd 到项目目录,这个可以直接在AndroidStudio中直接选择terminal。

(2 )cd 到新建的jni目录 执行下面的命令:

$ javah -classpath ../app/src/main/java/ com.example.apple.jnitest.MainActivity

com.example.apple.jnitest.MainActivity 应当替换成你的java文件的 包命.类名。执行完这句话后,会在新建的jni目录下生成com_example_apple_jnitest_MainActivity.h文件。

-classpath 后面跟的路径名 应当是从当前文件夹出发,能够找到你的包做外层的目录的路径。既我的目录结构是/app/src/main/java/com/example/apple/jnitest/MainActivity.java,我的classpath只要能找到com 即可。

(3)编写.c

这个可以把(2)生成的.h import,然后实现方法就好。我是直接把google给的ndk包example中的代码拷贝修改了。

Android jni 应用初探 (MAC 环境)(androidapplication)

.h 文件内容:

hello.c 文件代码:

3.定义mk

这里在jni 新建两个mk文件 ,Application.mk和 Android.mk内容分别如下:

Application.mk:

Android.mk:

4.在项目根目录下执行命令ndk-build

terminal 输出如下:

执行完命令会生成libs和obj文件夹

4.善后工作

按道理现在应该可以运行了,可是在实验过程中运行报错(可能和androidStudio的文件组织方式有关,没有深究),在网上找到解决方案:

在app/src/main 目录下新建jniLibs文件夹,并将3中生成的libs文件夹下的所有内容拷贝到此文件夹下,完成后的目录结构:

此时就可以运行了!

一直以来就像搞明白到底该怎么去写,每次实验总是出各种各样的问题,现在终于搞定了! 不一样的环境下,操作应该有差异,不过大概流程就是这样了。

Android平台调用WebService详解(二) 上篇文章已经对WebService及其相关知识进行了介绍(Android开发之WebService介绍),相信有的朋友已经忍耐不住想试试在Android应用中调用WebService。本文将通

Android 实现智能机器人聊天 背景:其实,关于实现机器人聊天,是偶然的情况下的,公司需要做一个ios版的机器人,用于自动购买东西,然后ios就研发了一个,我觉得这种机器人

AsyncTask的缺陷和问题 在Android开发中,AsyncTask可以使得用户避免直接使用Thread类和Handler来处理后台操作,适用于需要异步处理数据并将数据更新到界面上的情况。AsyncTask适用

标签: androidapplication

本文链接地址:https://www.jiuchutong.com/biancheng/383230.html 转载请保留说明!

上一篇:Eclipse Hover 提示过快(eclipse显示错误提示)

下一篇:Android平台调用WebService详解(二)(android webapi调用)

  • 个人所得税纳税义务人
  • 装修费用如何入账
  • 为什么社保账户有钱但是卡里没钱
  • 已经退款买家不退货怎么办
  • 善意取得虚开专票的条件包括
  • 应交税费减免税款
  • 收到利息计入哪个会计科目
  • 营改增后应付职工薪酬如何核算个人所得税?
  • 企业所得税汇算清缴网上申报流程
  • 营改增之后就没有营业税了吗
  • 集体土地上的不动产能符合异议28条规定吗
  • 汽车装饰装潢税率
  • 购买垃圾袋的会计分录
  • 房地产开发企业会计科目
  • 开票系统怎么改管理员名字
  • 增值税更正申报表需要逐月更正吗
  • 预收账款可以开票吗
  • 预交增值税后如何处理
  • 企业一次性支付多年费用 不摊销
  • 退休返聘人员的劳动权益保护
  • 资源综合利用企业税收优惠
  • 苹果macos catalina10.15.7
  • 出租车收税吗
  • 惠普台式电脑配置及价格
  • linux的使用场合
  • macos big sur如何
  • 离职员工工资退不退
  • 旅游公司广告费支出扣除标准
  • 人力资源劳务外包合同
  • 企业接受外单位投入的材料一批,应编制()
  • 天堂之路歌曲
  • php header refresh
  • openresty php
  • windowlocation用法
  • 查看ntpdate状态
  • modprobe operation not permitted
  • xclip命令怎么用
  • 季度所得税申报怎么弥补以前年度亏损
  • 企业纳税人识别号是什么
  • 一般纳税人不得从销项税额中抵扣的进项税额有哪些?
  • 费用化与资本化的区别与影响
  • 其他收益所得税汇算清缴时需要调增吗
  • vue3.0用法
  • 公司处置已使用4年多的汽车,怎么增值税申报
  • 购入项目用仪器怎么做账
  • 通过创建SQLServer 2005到 Oracle10g 的链接服务器实现异构数据库数据转换方案
  • 一般纳税人季报怎么填
  • 政府补贴需要缴纳印花税吗
  • 增值税进项发票抵扣期限是多少天?
  • 公司办公室买的茶叶怎么入账
  • 其他应付款能否直接做实收资本的账务处理
  • 房地产预缴税款主表怎么填
  • 向客户收取贴纸费用怎么说
  • 会计科目费用类
  • 什么叫先打后补
  • 在建工程的人工费会计分录
  • 企业以前年度亏损未弥补完
  • 对会计人员继续教育的目的包括了保障
  • ubuntu docker教程
  • SQL Server 2005/2008 用户数据库文件默认路径和默认备份路径修改方法
  • Tech Ed 2008:HPC Server 2008讲解
  • 硬盘安装fedora35
  • 虚拟机基本知识
  • win10如何关闭windows defender实时保护
  • aow exe是什么
  • win7系统突然打印不了
  • wind微博
  • 不同系统电脑能共享吗
  • win8系统安装教程图解
  • linux执行多个脚本
  • unity 1
  • 理解和运用的重要性要站在哪个的视觉去判断
  • 从零开始学什么技术
  • nodejs mysql orm
  • Android之BroadcastReceiver
  • 蛋哥的日常
  • 百旺税控盘电话服务热线
  • 钟楼在西安的哪里
  • 呼市地方税务局电话
  • 如果企业所得税没有做计提怎么办?
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设