安卓动态链接库系列-编写so

闲话少说,so的修改,重要性大家都知道,俗话说,磨刀不误砍柴功,不写写怎么逆的回来,这里从头编写so文件,分析so文件,修改so文件

今天先讲讲编写so

技术准备:

jdk环境

jre环境

安卓开发环境

ndk开发环境

1.新建个工程,随便建 主函数界面入口 先这样放着

public class MainActivity extends ActionBarActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

}

}

2.新建个类 我这里命名为JniGg

代码如下:这里的gg-jni代表的so名字   ggprinthello是我想要调的方法名

3.生成.h

首先先进入工程所在目录,然后输入如下命令

javah -classpath bin/classes -d jni 包名+类名

结束后 查看下jni目录有没有成功生成  (如下的是自动生成的)

4.编写C代码

右键jni文件夹 新建file 命名为gg-jni.c

敲入代码

#include "com_testso_JniGg.h"          //前面的头
JNIEXPORT jstring JNICALL Java_com_testsoxxin_JniGg_ggPrintHello           ###提供一个可供调用的方法
(JNIEnv * env, jobject this)
{

return (*env)->NewStringUTF(env, "Hello from GG-jni2222222222 !");#####返回字符串

}

5.Android.mk编写

依旧是新建file 命名为Android.mk

内容如下

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS) 
LOCAL_MODULE :=JniGg                       //名字要对齐
LOCAL_SRC_FILES := JniGg .c                      //名字要对齐  上面是.c这里就要.c 上面是CPP这里也要是cpp

include $(BUILD_SHARED_LIBRARY)

6.ndk-build

依旧是在工程目录下 输入ndk-build 生成so

如下就是生成成功了

那个警报就忽略吧

7.调用

然后回到安卓的mainactivity

输入代码

TextView tv=new TextView(this);
tv.setText(JniGg.ggPrintHello());
setContentView(tv);

也就是新建个文字框,调用so,至此大工告成

8.运行效果

 

时间: 2024-10-29 19:07:27

安卓动态链接库系列-编写so的相关文章

程序员带你学习安卓开发系列-Android文件存储

这是程序员带你学习安卓开发系列教程.本文章致力于面向对象程序员可以快速学习开发安卓技术. 上篇文章:.Net程序员快速学习安卓开发-布局和点击事件的写法 主要讲解了布局和点击事件的写法. 上篇文章补充: 控件单位介绍: px 像素 dip或者dp 设备独立像素 sp 比例像素 控件的高度宽度一般用dip或者dp.字体用sp. Android 存储数据项目: 描述:实现QQ登录效果.如图: 输入帐号密码,并勾选记住帐号 ,点击登录时,保存帐号信息.下次登陆可以直接显示上次保存的QQ帐号. 前台界面

动态链接库的编写及使用

以前安装程序的时候,在安装目录下总会发现 好多的以.DLL结尾的文件,这些是什么玩意儿?有什么用?而且有时候运行程序的时候还会出现"无法定位程序输入点...与动态链接库....上"这种错误,现在想起来真是可笑.下面就来介绍一下动态链接库以及怎么使用动态链接库(以下简称DLL). 当你编写一个程序的时候,为了使用以前写好的库中的函数,很方便的一个解决方法就是使用动态链接库(DLL),下面我们先来编写一个DLL文件,了解一下DLL文件的结构. 我使用的是RadASM 汇编集成工具,以前编写

如何开发一款以太坊安卓钱包系列3 - 资产信息展示

这是如何开发以太坊(安卓)钱包系列第3篇, 钱包账号资产信息展示,展示信息主要包括账号地址.eth余额及该账号所拥有的Token及余额. 预备知识 MVVM 本文会涉及和UI界面的交互,提前理解下界面和数据如何交互是非常有必要的,如果你已经很熟悉MVVM,可跳过这一小节. 最早写Android的时候,数据和界面经常耦合在一起,一个Activity文件总是特别大,每当产品界面改版就非常痛苦,吐槽下,很多产品经理都喜欢对界面改来改去. 后来Google 推荐多个架构模式: MPV. MVVM模式来解

Android环境搭建-安卓开发系列教程(原创)

[面向人员]:立志于安卓开发的所有人员,做到真正的从零基础起步: [教程说明]:本教程在内容上保证原创.简洁.详细,在附件链接上保证可用.最新.完整: [回帖说明]:教程有不清晰的地方,请及时回帖互动,楼主会第一时间更新帖子,谨以此开源.分享.共进. 1.下载最新版JDK(JDK是运行环境) 官方下载地址:    http://www.oracle.com/technetwor ... nloads-2133151.html 小提示:甲骨文官方下载速度比较慢,请耐心等待 网盘下载地址:http:

基于Cocos2d-x学习OpenGL ES 2.0系列——编写自己的shader(2)

在上篇文章中,我给大家介绍了如何在Cocos2d-x里面绘制一个三角形,当时我们使用的是Cocos2d-x引擎自带的shader和一些辅助函数.在本文中,我将演示一下如何编写自己的shader,同时,我们还会介绍VBO(顶点缓冲区对象)和VAO(顶点数组对象)的基本用法. 在编写自己的shader之前,我觉得有必要提一下OpenGL渲染管线. 理解OpenGL渲染管线,对于学习OpenGL非常重要.下面是OpenGL渲染管线的示意图:(图中淡蓝色区域是可以编程的阶段) 此图是从wiki中拿过来的

【安卓自定义控件系列】安卓自定义控件之组合控件

在安卓开发中,谷歌已经为我们提供了许多原生控件,基本上能够满足我们日常的开发需求,但是某些项目中原生控件可能达不到产品所要求的各式各样的酷炫效果或功能效果,这个时候我们只能自己自定义控件来满足项目需求,我们知道自定义控件包括三种方式: 1继承控件,即继承谷歌提供的原生控件,在此基础上提供一些原生控件不具备的功能,如github上各种酷炫效果的开源组件基本上都是采用的这种方式. 2组合控件:即组合多个原生控件来达到某些单个原生控件原本不具备的功能,这个在日常开发中应该是使用的比较多的,如基本上每个

安卓动画系列之一,妙用Interpolator 快速实现弹球效果

一直很想写个动画系列,把自己学过的东西好好总结一下,无奈最近都在看源码忙的焦头烂额.现在先写个开篇,以后继续补充动画相关的文章.作为引起兴趣, 这里弹球效果作为一个小例子,顺便讲讲Animation动画中应该利用Interpolator来锦上添花. 这是个很简单的例子,但复杂的东西不都由诸多看似简单的元素组合而成的么. 网上搜索已经有很多关于Interpolator的介绍文章, 这里借用一大神的文章作为介绍http://blog.csdn.net/jason0539/article/detail

安卓 UI系列之ProgressBar

系统默认样式进度条 /** * Android 七种进度条的样式 * http://www.jb51.net/article/71269.htm 七种样式 * http://www.cnblogs.com/Yang-jing/p/3757219.html 属性详解 */ 基于系统进度条自定义样式 /** * 基于系统自定义样式的进度条 * http://www.jb51.net/article/91909.htm 百分比样式 * http://www.jb51.net/article/96146

飞龙的安卓逆向系列教程

作者:飞龙 在线阅读 PDF格式 EPUB格式 MOBI格式 代码仓库 更新历史 v1.0:2017.4.4 添加 Dalvik.APK.DEX 基础知识 添加静态分析.抓包工具教程 添加 12 个 APK 破解案例 赞助我 协议 CC BY-NC-SA 4.0