android调用第三方库——第二篇——编写库android程序直接调用第三方库libhello.so (转载)
转自:http://blog.csdn.net/jiuyueguang/article/details/9449737
版权声明:本文为博主原创文章,未经博主允许不得转载。
0:前言
1:本文主要作为丙方android公司的身份来写
2:作者有不对的地方,请指出,谢谢
[第一篇:android调用第三方库——编写库libhello.so]
[第二篇:android调用第三方库——编写库android程序直接调用第三方库libhello.so]
[第三篇:android调用第三方库——编写库android程序整合第三方库libhello.so到自己的库libhelloword.so]
1:场景:公司接到任务,说配合乙方C++公司开发android识别程序,项目布置到项目经理,然后经理把任务交给你来做,你自然是先抱怨一番,活多钱少让我这新人来干,哎没办法啊,干吧!
2:东西:乙方C++公司交给我的东西有
libhello.so库文件
com_hello_hello_HelloActivity.h头文件(有可能没有这个,我是死命要来的)
库的接口说明文档
3:搞起:
- 看了看给的接口说明文档,哎呦,不错哦,文档说明很详细,里面的函数接口定义的完美,而且他的库定义符合jni的规范,不需要在添加什么东西了,直接在android程序中调用就行,good啊
- 新建项目helloword2,在根目录下新建libs/armeabi文件夹,然后把库libhello.so放进去,然后重头戏来了-》新建包com.hello.hello,原来的包叫com.hello.word,之所以这样做,是我经历了一个痛苦的过程总结出来的,他给的头文件
com_hello_hello_HelloActivity.h //符合jni的规范,前面com_hello_hello是包名,后面HelloActivity是类名,注意在丙方这里叫类名,在乙方那里叫Activity的名字
能够看出来他的包结构,然后就建立一个和他一样的包,在这个包中新建一个和他一样的类,类中的方法按照jni规范能够得出来是什么,比如
JNIEXPORT jstring JNICALL Java_com_hello_hello_HelloActivity_sayHello(JNIEnv *, jclass);//其中有一个方法是无参数函数sayHello
结构如图
3.类HelloActiviry.java的代码
package com.hello.hello;
import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle; public class HelloActivity {
// static
// {
// System.loadLibrary("hello"); //实验证明在这里不需要引入包名也是可以的
// }
public static native String sayHello(); // <span style="color:#FF0000;">第三方库函数</span> }
4.android主程序Helloword2Acitiviry.java的代码
package com.hello.word;
import com.hello.hello.HelloActivity;
import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
public class Helloword2Activity extends Activity {
static
{
System.loadLibrary("hello"); //引入包名
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
new AlertDialog.Builder( this ).setMessage(<span style="color:#FF0000;"> </span>new HelloActivity().sayHello()).show();//实例化类方法直接调用
}
}
5.运行android程序,注意你写的是android程序,不需要修改编译选项,运行如图,实验证明,利用android直接调用库是可以的
- 但是这种直接调用也是有弊端的,在第三篇中会介绍-》》》[第三篇:android利用jni调用第三方库——编写库android程序整合第三方库libhello.so到自己的库libhelloword.so]
4:下载demo[猛戳这里下载demo]
android调用第三方库——第二篇——编写库android程序直接调用第三方库libhello.so (转载)的更多相关文章
- [置顶] android利用jni调用第三方库——第二篇——编写库android程序直接调用第三方库libhello.so
0:前言 1:本文主要作为丙方android公司的身份来写 2:作者有不对的地方,请指出,谢谢 [第一篇:android利用jni调用第三方库——编写库libhello.so] [第二篇:androi ...
- JavaWeb学习总结第二篇--第一个JavaWeb程序
JavaWeb学习总结第二篇—第一个JavaWeb程序 最近我在学院工作室学习并加入到研究生的项目中,在学长学姐的带领下,进入项目实践中,为该项目实现一个框架(用已有框架进行改写).于是我在这里记录下 ...
- 第二篇 界面开发 (Android学习笔记)
第二篇 界面开发 第5章 探索界面UI元素 ●The Android View Class ●△Widget设计步骤 需要修改三个XML,以及一个class: 1)第一个xml是布局XML文件 ...
- Android学习笔记(第一篇)编写第一个程序Hello World+Activity
PS:终于开始正式的搞Android了...无人带的一介菜鸟,我还是自己默默的努力吧... 学习内容: 1.编写第一个Hello World程序.. 学习Android,那么就需要有一个编译器来集 ...
- 第二篇:用Android Studio编写Hello World
将Android Studio的环境搭建好后,第一个写Hello World测试程序.Android Studio v3.2.1. 一.新建工程 点击Start a new Android Studi ...
- 《Android进阶》之第二篇 launcher
public boolean addViewToCellLayout(View child, int index, int childId, LayoutParams params, boolean ...
- cocos2d-x之android编译环境搭建(第二篇)[版本号:cocos2d-x-3.1.1]
基于 Android NDK 的学习之旅-----环境搭建 工欲善其事 必先利其器 , 以下介绍下 Eclipse SDK NDK Cygwin CDT 集成开发环境的搭建. 1.Android 开发 ...
- 【第二篇】学习 android 事件总线androidEventbus之异步事件的传递
1,不同Activity直接发送Ansy的事件,以及其他任何事件,必须通过 postSticky方式来进行事件的传递,而不能通过post的形式来进行传递:EventBus.getDefault().p ...
- 29-ESP8266 SDK开发基础入门篇--编写TCP 客户端程序(Lwip RAW模式,非RTOS版,精简入门)
https://www.cnblogs.com/yangfengwu/p/11456667.html 由于上一节的源码长时间以后会自动断开,所以再做这一版非RTOS版的,咱直接用lua源码里面别人写的 ...
随机推荐
- python解析网页中js动态添加的内容
https://www.cnblogs.com/asmblog/archive/2013/05/07/3063809.html https://www.zhihu.com/question/21471 ...
- BubbleGum96 开箱杂谈与软件资源
前言 原创文章,转载引用务必注明链接. 拿到有一段时间了,一直在想写哪些内容.96boards发布以来,吸引了很多眼球.这里我就慢慢随便聊聊,希望能让大家对96boards有更多了解. 开箱 [开箱图 ...
- Unity ----- 对象池GameObjectPool
孙广东 2014.6.28 非常早之前看到的外国文章,认为不错,分享一下. 对象池在AssetStore中也是有非常多插件的,可是有些重了.自己写一个轻量的岂不是非常好. 当你须要创建大量某种类型对象 ...
- Jenkins系列之-—07 集成JIRA
一.Jenkins Jira插件安装&配置 1. 安装插件,主要安装如下插件: Jira Issue Updater 该插件用于更新JIRA ISSUES 的工作流状态或增加备注 JIRA p ...
- vs2010配置VL_FEAT库
VL_FEAT库是计算机视觉中的一个开源库,支持C/C++,Matlab,可以在http://www.vlfeat.org/下载. 本文主要讲一下VS2010中如何配置vl_feat库(算是对原文的一 ...
- 面向接口的webservice发布方式
import javax.jws.WebService; /**面向接口的webservice发布方式 */ @WebService public interface JobService { pub ...
- python的pexpect模块
Pexpect 是 Don Libes 的 Expect 语言的一个 Python 实现,是一个用来启动子程序,并使用正则表达式对程序输出做出特定响应,以此实现与其自动交互的 Python 模块. P ...
- linux 命令之 watch
watch能够帮你监測一个命令的执行结果,省得你一遍遍的手动执行.在Linux下.watch是周期性的执行下个程序.并全屏显示执行结果.你能够拿他来监測你想要的一切命令的结果变化,比方 tail 一个 ...
- HDOJ1004 数组还要自己初始化
#include <iostream> #include <stdio.h> #include "string.h"using namespace std; ...
- Django 之 form表单
Django中的Form表单 1.背景 平时我们在书写form表单时,经常都是手动的去写一些input标签,让用户输入一些功能,进行一些校验的判断,等等.Django中的form表单就能够帮我们去实现 ...