`
renzhelife
  • 浏览: 669935 次
文章分类
社区版块
存档分类
最新评论

工具:Android本地代码生成器

阅读更多
<style type="text/css"> <!-- @page {margin:0.79in} p {margin-bottom:0.08in} pre.cjk {font-family:"WenQuanYi Zen Hei",monospace} --> </style>

在使用AndroidNDK开发的时候有个事情是很烦人的,那就是创建本地代码文件夹,生成本地代码文件和创建本地代码的编译文件。特别是实现本地方法的时候,也是比较烦人的,因为本地方法的名字实在是太长了。它的命名规范是:Java_package-name_class-name_method-name(arguments),稍一不留神就会有拼写错误,而导致长时间的调试。由于不勘忍受这样的折磨,也为了不重复同样的事情(DRY-Don't Repeat Yourself),于是就写了一个Java程序来做这件事。
这个小工具可以逐个检查Java文件,并创建含有本地方法文件,也即本地代码文件,生成Android.mk编译文件并更新Java文件,添加System.loadLibrary

具体的原则是这样:

  • 每个含有本地代码的Java文件,生成一个本地文件,其内含有该文件中的所有本地方法

  • 所生成的本地方法是符合标准的JNI,具体的形式是:

return-type Java_package-name_class-name_method-name(arguments){
}
也就是说,所需要做的只是实现这个方法。

  • 默认本地代码共享库的名字是Android项目的名字

有了这个小工具,就可以只在Java中声明本地方法,运行下这个工具,然后实现本地方法,再编译就可以了。
可以从这里下载这个小工具。解压后有三个文件一个是Java源码,一个是Jar包(genjni.jar),一个是Shell脚本(genjni.sh)。放上源码的原因是,如果有兴趣的朋友可以进行改进,但是改进后请
发我一份。下载后,最好修改下Shell脚本,把Jar文件的路径改成具体的存放路径,否则会报出找不到Jar文件的错误。最后把genjni.sh放到~/bin下面,为了使用时方便。使用的时候要在Android项目的根目录下面运行genjni.sh就可以了。
下面以一个实例方式演示下这个小工具的使用方法:
创建一个项目叫HelloJni,并创建一个HelloJniActivity,在其内声明一个本地方法getStringFromJni();并用有一个TextView用来显示getStringFromJni()返回的信息。另一个本地方法getStatusFromJni(int)是为了显示用的,没有使用。这是Java代码:

写好Java代码后,从终端进入到项目的根目录下


打开查看Android.mkHelloJniActivity.c


再查看HelloJniActivity.java也被更新了,里面多了加载共享库的语句:


剩下的工作就是实现本地方法了。
当然这个工具还是有很多问题,欢迎各位反馈,或给出改进意见。
另外,这个工具是用Java写的,更好的选择应该是用脚本来写,如PerlPython。还有就是,如果能把这个工具集成到ADT中,或是创造一个完全用于NDK开发的集成工具ANDT,能够像产生R.java那样的自动生成本地文件。比如做一个ANDT工具,集成到Eclipse中,能够自动当Java中有本地方法声明后就自动生成本地文件和编译文件。这将是多么美好的事情啊,将对NDK的开发有重大的帮助。我想,Google应该会做一专门用于NDK开发的Eclipse插件,或是在ADT中加入对NDK的支持,因为NDK开放的接口越来越多,使用NDK开发者也将越来越多,基于NDK开发的应用也将越来越多(2.3及以后的版本,完全可以只用NDK开发出一个Apk,也就是说用纯C/C++来开发应用)。希望这一天早些到来。

分享到:
评论

相关推荐

    Android本地代码生成器

    可以自动生成Android本地代码。 解压后,在项目根目录下面运行genjni.sh(先把里面的genjni.jar放在一个地方,然后把genjni.sh里面的路径改下)。之后,如果有本地方法声明,就会生成本地文件和编译文件。

    基于Android本地代码生成器详解

    在使用AndroidNDK开发的时候有个事情是很烦人的,那就是创建本地代码文件夹,生成本地代码文件和创建本地代码的编译文件。...这个小工具可以逐个检查Java文件,并创建含有本地方法文件,也即本地代码文件,生成Android

    Android集成主流优秀第三方组件框架

    这是一个集成目前Android主流优秀第三方组件、优秀好用的自定义控件、实用工具类封装、 以及一些APP共通模块(比如:版本更新、意见反馈、引导界面等等)的开发包,帮助程序员 快速开发自己的APP 已集成第三方...

    软件本地化工具 Sisulizer Enterprise Edition 4.0 Build 374 中文免费.zip

    Sisulizer为二进制文件生成本地化版本,而无需对您的原始工程文件作任何修改。 -能翻译为任何人类语言,包括阿拉伯语,中文,希腊语,希伯来语,日语,韩语以及任何用户自定义语言。 -可翻译为可视化文本(所见即...

    安卓源码包android图片缓存&展示Android 异步加载图片等24个合集.zip

    Android9妹工具(9Patch).rar Android创建抗锯齿透明背景圆角图像.zip android相册系统(用Matrix实现).zip android端用于异步加载图片,内存缓存,文件缓存,imageview显示图片时增加淡入淡出动画。.zip Android高级...

    精通Android游戏开发

    8 1.3.4 编写定制编译脚本 10 1.4 建立开发环境 17 1.5 已经成功迈出第一步 22 第2章 在android中编译本地代码 23 2.1 第一个本地android应用 23 2.1.1 创建avd 23 2.1.2 创建android项目 26 2.1.3 应用体系结构 27 ...

    新版Android开发教程.rar

    的 Android SDK 提供了在 Android 平台上使用 JaVa 语言进行 Android 应用开发必须的工具和 API 接口。 特性 • 应用程序框架 支持组件的重用与替换 • Dalvik Dalvik Dalvik Dalvik 虚拟机 专为移动设备优化 • ...

    Xamrin Android开发实战 源代码

    Xamrin Android开发实战-大学霸 基础篇上 的源代码 第1章 构建开发环境 1 1.1 Xamarin介绍 1 1.1.1 Xamarin发展 1 1.1.2 Xamarin工具 1 1.1.3 Xamarin特点 2 1.2 Xamarin.Forms介绍 2 1.3 开发Xamarin.Forms...

    erlang-atrace-flamegraphs:从Android方法跟踪文件生成火焰图

    为了生成一些跟踪文件,将您的代码包装在测试中,如下所示: Debug.startMethodTracing("traceName", 128 * 1024 * 1024); // Code under test Debug.stopMethodTracing(); 如果要测试特别密集的部分,则可以使用...

    疯狂Android讲义源码

     1.3 Android常用开发工具的用法 10  1.3.1 创建、删除和浏览AVD 10  1.3.2 使用Android模拟器  (Emulator) 14  1.3.3 使用DDMS进行调试 15  1.3.4 Android Debug Bridge(ADB)  的用法 16  1.3.5 使用DX...

    Android C++高级编程:使用NDK_Onur Cinar, 于红PDF电子书下载 带书签目录 完整版

    第4章 使用SWIG自动生成JNI代码 81 4.1 什么是SWIG 81 4.2 安装 82 4.2.1 Windows平台上SWIG的安装 82 4.2.2 在Mac OS X下安装 83 4.2.3 在Ubuntu Linux下安装 85 4.3 通过示例程序试用SWIG 86 4.3.1 接口...

    android坦克大战原码

    也只能反编没用混淆器编译的android程序的80%代码,对于混淆器编译的android程序,只能 反编不到10%代码。   借鉴成功的商业程序代码,是新手快速提高编程水平的途径。为此,笔者制作了 android反编译工具,能...

    JAVA上百实例源码以及开源项目源代码

    图片到图片装载器、绘制火焰效果的X坐标,Y坐标、得到X坐标,Y坐标值、绘制火焰效果Image…… Java加密解密工具集 JCT v1.0源码包 5个目标文件 内容索引:JAVA源码,综合应用,JCT,加密解密 WDSsoft的一款免费源代码 JCT ...

    Android APK+Dex文件反编译及回编译工具(APKDB)v.1.9.2 正式版

    是一款,针对Android OS系统的APK程序,直接反编译修改的工具。 APKDB集合了当今最强悍,最犀利的APK及Dex文件编译工具; 正常安装后,它直接在【鼠标右键】创建快捷菜单; 非常方便汉化工作者,对APK或Dex文件...

    web3j:轻量级Java和Android库,用于与以太坊客户端集成

    特征通过HTTP和IPC完整实现以太坊的客户端API 以太坊钱包支持自动生成Java智能合约包装器,以从本地Java代码创建,部署,交易和调用智能合约(支持和定义格式) 响应式API,可用于过滤器支持支持Parity的和Geth的...

Global site tag (gtag.js) - Google Analytics