安卓逆向_15( 二 ) --- Android Studio 3.6.3 JNI 环境配置 和 so 生成开发 demo

 

From:Android Studio 3.0 JNI 的实现:https://blog.csdn.net/ziyoutiankoong/article/details/79696279

Android Studio 生成so包和.H文件给jni调用产生新so包。(即so包调so包):https://blog.csdn.net/sxh_android/article/details/80694291

 

Android Studio 3.0 SO文件的引用:https://blog.csdn.net/ziyoutiankoong/article/details/79700879

android studio 3.0 JNI 使用:https://www.jianshu.com/p/190a242fd7ab

Android Studio jni开发入门——看我就够了!:https://www.jianshu.com/p/28d541d658db

Android Studio开发之 JNI 篇:https://www.jianshu.com/p/c993928e8081

android studio 3.4 配置 Android -jni 开发基础的教程详解:https://www.jb51.net/article/169438.htm

基于Android studio3.6 的JNI教程之helloworld思路详解:https://www.jb51.net/article/182804.htm

Android Studio 开发 JNI 示例:https://blog.csdn.net/wzhseu/article/details/79683045

 

 

JNI 技术的整体步骤和原理:

1、新建一个Android studio工程(注意  把这个勾选上,不然后面还需要配置,勾选上就无须自己配置Cmake,Gradle啦)

2、Android 指定位置新建一个类,如JavaJNI.java类(一般位置为、src/main/java/"你的包名"/),在该类里面声明一个方法,该方法有本地端实现,即如 public native void open();

3、写好之后本地native方法之后,配置Javah, 操作步骤:File-Tools-External Tools-"点击加号"    name随便起一个,方便统一叫javah, 下面的Description可以和上面一致;

Program: $JDKPath$\bin\javah.exeAuguments: -classpath . -jni -o $ModuleFileDir$/src/main/jni/$Prompt$ $FileClass$Working directory: $ModuleFileDir$\src\main\java

以上为配置Javah过程,到这就配置好了,注意上面几个配置你可以理解为固定配置,其实是一些路径定义,可以不用管的,

4、鼠标选中刚刚新建的含有本地实现方法的类,右击选择External Tools的Javah, 随机在弹出的窗口输入名字(这个名字就是马上生成的C或C++头文件的名字,文件会保存在/src/main/jni/下面),这样我们的C或C++头文件就生成好了,在JNI文件下,

5、将生成的.h头文件 放到、src/main/cpp文件中

6、在cpp文件下在新建一个对应的.cpp文件,开始编写需要调用的本地函数方法(具体做法把刚生成.h文件中的方法名复制过来,“;”改为方法体“{}”,然后在方法体中用C++实现你需要的功能)

7、在MainActivity.java测试类中调用JavaJNI.java类中本地声明的方法

8、编译即可成功调用实现你写的C++方法


 

1. NDK 安装配置

 

在 File - Settings ...,下查看 NDK 安装配置情况,如果没有下载配置 NDK ,以及相关的包,对应下载相关的安装包。

具体如下图

打开 sdkManager下载 CMake 和 LLDB

配置 ndk

下载安装好后,可以在 File - Project Structure 的 SDK Location 下查看对应的安装配置路径情况,

 

 

2. 打开 Android Studio,新建一个 Native C++工程。

 

具体如下图

输入工程名:JNINDK

然后,点击 完成:

成功创建 Android 项目 (JNIDemo)

如图:

创建 jni 文件夹:src 右键 ---> New ---> Folder ---> JNI Folder 如图:

选择 JNI Folder :

结果如图:

 

 

3. 创建 JNI 类

 

示例代码:

public class JNITest {static {System.loadLibrary("JniLib");}public native String getString();}

如图:

 

 

3.1  生成 .h 文件

 

方法 1:

配置 Anroid Studio 外部工具,一劳永逸,往后无需命令行,File ---> Setting ---> Tools ---> External Tools ---> “+” 进入页面

添加外部命令:

配置命令:

Program:$JDKPath$\bin\javah.exeParameters:-classpath . -jni -d $ModuleFileDir$\src\main\jni $FileClass$Working directory:$ModuleFileDir$\src\main\Java注释:-classpath classes 指明类所在的位置-jni com.jni.jnitest.JNITest 类的绝对路径-d 产生的.h文件放到指定目录下;

配置成功如图:

开始生成 .h文件,选中 JNI类 右键 ---> New ---> External Tools ---> javah,如图:

成功后如图:

 

方法 二

右键拖动JNI类所在的包的路径到Terminal,自动切换到该目录下

javac 编译生成 class 文件( 生成class文件的方法有很多,这里提供一种)

右键拖动 java 文件夹到 Terminal,自动切换到该目录下

必须在包名外使用 javah 命令,编译生成.h文件,把.h文件移动到jni文件夹(生成.h文件后可以删除class文件)如图:

示例命令:javah -d jni -classpath ./java com.example.myapplication.hello

 

 

3.2  创建文件 JniLib.cpp 、Android.mk、Application.mk

在 jni 目录下分别创建并编写 JniLib.cpp、Android.mk、Application.mk 这三个文件

复制.h文件内容到 JniLib.cpp 并修改,如下(此文件为JNI内容文件):

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <com_jni_jnitest_JNITest.h>
/* Header for class com_jni_jnitest_JNITest *//** Class:     com_jni_jnitest_JNITest* Method:    getString* Signature: ()Ljava/lang/String;*/
JNIEXPORT jstring JNICALL Java_com_jni_jnitest_JNITest_getString(JNIEnv * env, jobject jobject){return (*env).NewStringUTF("成功调用JNI内容");}

Android.mk

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := JniLib
LOCAL_SRC_FILES =: JniLib.cpp
include $(BUILD_SHARED_LIBRARY)

Application.mk

APP_MODULES := JniLib
APP_ABI := all

 

 

4.  其它相关配置

 

4.1 修改 app下的 build.gradle 文件, 如下图

示例代码:

ndk{moduleName "JniLib"
//            abiFilters "armeabi", "armeabi-v7a", "x86" //输出指定的三种abi体系下的so库}sourceSets.main{jni.srcDirs = []jniLibs.srcDir "src/main/libs"}

 

4.2 项目下的gradle.properties文件(如果没有此文件,自己新建一个)添加代码:

android.useDeprecatedNdk=true

 

 

5.  执行 ndk-build

此处我用的是配置好的工具来执行,和  javah  外部工具 一样的步骤

选中JNI类右键->New->External Tools->ndk-build,结果如图:

 

 

6.  调用 so

示例代码:

package com.jni.jnitest;import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;public class MainActivity extends AppCompatActivity {Button button;TextView tv;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button = findViewById(R.id.button);tv = findViewById(R.id.tv);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {tv.setText("结果:"+ new JNITest().getString());}});}
}

结果

 

demo 下载:https://download.csdn.net/download/u013015029/10309365

 

 

 

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/495412.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

卡内基梅隆大学机器学习系副主任邢波:AI落地现在最缺的是思维方式

来源&#xff1a;亿欧摘要&#xff1a;邢波认为&#xff1a;人工智能现在最缺的不是算法和知识&#xff0c;而是落地应用的思维方式&#xff1b;数据如何被处理、系统如何被调试、资源如何配置&#xff0c;目前阶段还处于黑箱&#xff0c;很混沌的状态&#xff1b;人工智能未来…

安卓逆向_15( 三 ) --- Android NDK 开发【 jni 静态注册、JNI_OnLoad 动态注册】

Android Studio开发JNI示例&#xff1a;https://blog.csdn.net/wzhseu/article/details/79683045 JNI_动态注册_静态注册.zip : https://pan.baidu.com/s/1wpTYA9euSdPqE1Z2bA_BHA 提取码: 7h97 错误: 编码GBK的不可映射字符 ( https://blog.csdn.net/talenter111/article/de…

学界 | DeepMind等机构提出「图网络」:面向关系推理

来源&#xff1a;机器之心摘要&#xff1a;近日&#xff0c;由 DeepMind、谷歌大脑、MIT 和爱丁堡大学等公司和机构的 27 位科学家共同提交的论文《Relational inductive biases, deep learning, and graph networks》引起了人们的关注。深度学习虽然精于分类&#xff0c;但一直…

ARM 汇编基础教程番外篇 ——配置实验环境

From&#xff1a;https://zhuanlan.zhihu.com/p/29145513 win10 arm 汇编环境 Windows 平台下搭建 ARM 汇编集成环境&#xff1a;https://jingyan.baidu.com/article/4b52d70288bfcdfc5c774ba5.html 要调试 ARM 程序&#xff0c;我们需要&#xff1a; 能运行 ARM 程序的运行环…

asp.net调试方法

1、先将网站设为启动项目。 2、选择“启动选项”。 3、进行设置&#xff1a; 然后调试&#xff0c;在浏览器输入网址&#xff0c;此时如果遇到“断点”程序将自动停止运行&#xff0c;即可进行调试&#xff0c;查看运行中的变量的值。 转载于:https://www.cnblogs.com/gwjtssy/…

基因对智力的预测能力不到7%,别迷信它

图片来源&#xff1a;The Conversation撰文 Carl Zimmer翻译 李杨审校 贾晓璇编辑 魏潇2016 年我在写一本关于遗传的书时&#xff0c;曾对自己的基因组进行了测序。一些科学家还好心地指出了我基因组图谱的一些有趣特征&#xff0c;教我如何自己读取数据。从那以后&#xff0c;…

ARM 汇编语言入门

[翻译]二进制漏洞利用&#xff08;二&#xff09;ARM32位汇编下的TCP Bind shell&#xff1a;https://bbs.pediy.com/thread-253511.htm ARM汇编语言入门 From&#xff1a;ARM汇编语言入门&#xff08;一&#xff09;&#xff1a;https://zhuanlan.zhihu.com/p/109057983 原文…

图灵奖演讲2018,59页PPT迎接芯片体系结构的新黄金时代

来源&#xff1a; 计算所控制计算实验室6月4日&#xff0c;在今年的国际计算机体系结构大会ISCA2018的图灵奖演讲会上&#xff0c;ACM/IEEE邀请了2017年图灵奖获得者John Hennessy与David Patterson联合进行了一场关于未来计算机体系结构发展道路探索的精彩演讲。二位图灵奖得主…

ARM 指令集 和 Thumb 指令集

From&#xff1a;https://gitee.com/lsliushuang/ASM/blob/master/arm汇编.txt ARM 汇编指令集汇总&#xff1a;https://blog.csdn.net/qq_40531974/article/details/83897559 ARM 指令集详解(超详细&#xff01;带实例!&#xff09;&#xff1a;https://blog.csdn.net/micke…

花旗银行将因人工智能裁员50%,失业风波究竟要持续多久

来源&#xff1a;ofweek摘要&#xff1a; 在这个人工智能随时可能会取代人类工作的年代里&#xff0c;人们对自己的工作的未来应该去了解和重视&#xff0c;尤其是数字类别的行业&#xff0c;像是会计、税务、收费站是最早被人工智能替代的一批。在这个人工智能随时可能会取代人…

Python 程序的抽样分析器 - Py-Spy

From&#xff1a;https://python.freelycode.com/contribution/detail/1320 GitHub 地址&#xff1a;https://github.com/benfred/py-spy Py-Spy 是 Python 程序的抽样分析器。 它允许您可视化 Python 程序正花费时间在哪部分&#xff0c;而无需重新启动程序或以任何方式修改代…

微观世界探索者:15家值得关注的纳米技术公司

来源&#xff1a;资本实验室摘要&#xff1a;纳米技术就像微观世界的魔术&#xff0c;让人类得以前所未有地深入到物质的分子与原子层面&#xff0c;探索生物、化学、物理等各领域的融合。资本实验室今日投资关注聚焦前沿科技创新与传统产业升级纳米技术就像微观世界的魔术&…

DeepMind新论文:给侧面照片,AI给你脑补出正面

来源&#xff1a;澎湃新闻摘要&#xff1a;大家在学生时代可能都面对过这些涉及空间想象的几何题。从根本上&#xff0c;它们考验的是2D图像和3D场景间的转换能力。如今&#xff0c;人工智能也成功打破了这种“次元壁”。用小立方体搭一个几何体&#xff0c;使它的主视图和俯视…

安卓逆向 和 手游辅助 学习 路线

From&#xff1a;https://zhuanlan.zhihu.com/p/95915254 知乎&#xff1a;Android 逆向分析学习路线&#xff1f;&#xff1a;https://www.zhihu.com/question/25626303 入门篇 --- 学习Android安全和逆向开发的路线总结&#xff1a;https://www.52pojie.cn/thread-1065039-…

可交互的对抗网络如何增强人类创造力?

编译&#xff1a;集智翻译组来源&#xff1a;distill.pub作者&#xff1a;Shan Carter&#xff0c;Michael Nielsen原题&#xff1a;Using Artificial Intelligence to Augment Human Intelligence摘要&#xff1a;计算机不仅可以是解决数学问题的工具&#xff0c;还可以是拥有…

ARM 寄存器 详解

From&#xff08; ARM 寄存器详解 &#xff09;&#xff1a;https://blog.csdn.net/sandeldeng/article/details/52954781 ARM 汇编基础教程&#xff1a;2.数据类型和寄存器&#xff1a;https://www.52pojie.cn/thread-797306-1-1.html ARM 的 寄存器 ARM 工作状态 和 工作模式…

让AI个性化而且功耗更低 IBM研发新型神经网络芯片

选自&#xff1a;Singularity Hub编译&#xff1a;网易智能参与&#xff1a;李擎摘要&#xff1a;在GPU上运行的神经网络已经在人工智能领域取得了一些惊人的进步&#xff0c;但这两者的合作还并不完美。IBM的研究人员希望能设计出一种专门用于运行神经网络的新的芯片&#xff…

每日一题——LeetCode888

方法一 个人方法&#xff1a; 交换后要达到相同的数量&#xff0c;那么意味着这个相同的数量就是两个人总数的平均值&#xff0c;假设A总共有4个&#xff0c;B总共有8个&#xff0c;那么最后两个人都要达到6个&#xff0c;如果A的第一盒糖果只有1个&#xff0c;那么B就要给出6…

“真”5G标准出炉!不止是速度,这些难以置信的改变将彻底颠覆你的生活

来源&#xff1a;传球创新论坛摘要&#xff1a;5G时代又离我们近了一大步。6月14上午11时许&#xff0c;3GPP批准了第五代移动通信标准5G NR独立组网&#xff08;SA&#xff09;的冻结&#xff0c;这意味着首个完整意义的国际5G标准正式确立。未来&#xff0c;5G技术将成为和电…

写在囧男囧女们的七夕节

写在囧男囧女们的七夕节 当我们发现某些节日已经远离我们时&#xff0c;我们往往会以幽默的方式&#xff0c;让自己无厘头地般地分享节日的快乐 。比如&#xff0c;每年的六月一日&#xff0c;不管童年已经离我们多遥远&#xff0c;见朋友或同事就来上一句“节日快乐”&#xf…