androidstudio创建第一个so文件
前言:之前看安卓软件安全与逆向分析这书,看到ndk开发这节,发现自己连so文件都没编译操作过233,所以就直接上手试试,
感觉挺好玩的,把关键的加密流程都放进so中去实现,这周先写个demo试试,感觉出题还是得和安卓的运行机制结合,然后
再一个点到一个点来玩,比较有条理,之后放到github上,之后作为招新赛的题目来搞
直接切入主题了,就不放图了,要看图的直接看我放的链接吧,里面图文并茂,这里主要是我的个人记录
1.androidstudio直接新建一个项目,往下划,然后选择c++
2.然后这里先去配置好ndk的路径,因为编译的工具都在ndk中,这里我是mac,所以找ndk的路径一开始有点懵逼
然后百度了一波,才找到,

然后自己查看自己的ndk路径在哪,点进去,相应路径输入好就行了,不知道为啥,我ndk默认配好了,233,不过配置文件local.properties里面没加,所以我又加了这句话
## This file is automatically generated by Android Studio.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file should *NOT* be checked into Version Control Systems,
# as it contains information specific to your local configuration.
#
# Location of the SDK. This is only used by Gradle.
# For customization when using a Version Control System, please read the
# header note.
sdk.dir=/Users/mac/Library/Android/sdk
ndk.dir=/Users/mac/Library/Android/sdk/ndk/21.3.6528147
3.新建一个Myjni.java文件,然后javac和javah,然后把后缀.h文件拖到cpp文件夹下面,全程终端操作,这里还是看我放的那个链接去搞,我懒得放图了。。。

4.然后在cpp文件夹下面新建main.c文件,里面内容就是实现之前定义到Myjni.java文件中的native方法,
//
// Created by mac on 2020/9/29.
//
#include "com_example_firstso_Myjni.h"
#include "../../../../../../Library/Android/sdk/ndk/21.3.6528147/toolchains/llvm/prebuilt/darwin-x86_64/sysroot/usr/include/jni.h"
#include <jni.h>
JNIEXPORT jstring JNICALL Java_com_example_firstso_Myjni_sayHello(JNIEnv * env, jclass jobj) {
// TODO: implement sayHello()
return (*env)->NewStringUTF(env,"hello world");
}
5.然后synow以下,build一波,已经在对应目录app/build/merged_native_libs/debug/out/lib下生成了不同平台架构的so文件了,我感觉蛮骚的,直接四个平台都生成了,是我没想到的,
当然还是得切换一个project的视角,用安卓是看不到这玩意的。
6.然后把lib的整个目录,复制到src/main下,记得把lib名字改成jniLIB,就可以正常运行了
整篇写的贼水,mac的截图键实在鸡肋,服了)
参考链接:
https://www.jianshu.com/p/25008b219fa6
androidstudio创建第一个so文件的更多相关文章
- vue环境搭建与创建第一个vuejs文件
我们在前端学习中,学会了HTML.CSS.JS之后一般会选择学习一些框架,比如Jquery.AngularJs等.这个系列的博文是针对于学习Vue.js的同学展开的. 1.如何简单地使用Vue.js ...
- 创建第一个HTML文件
首先右键新建文本文档,然后打开新建的文档,文本内容写上: <html> <head> <title>我的HTML标题</title> </head ...
- C语言 创建一个 txt 文件 bin输入字符 保存文件在工作文件夹里
int main(void) { char s[70]; FILE *fp; fp=fopen("123.txt","r"); if((fp=fopen(&qu ...
- logback 指定每隔一段时间创建一个日志文件
我使用的logback版本是1.2.3 目前logback支持根据时间来配置产生日志文件,但是只支持每周,每天,每个小时,每分钟等创建一个文件,配置如下: <appender name=&quo ...
- 使用SQL语句创建数据库1——创建一个数据库文件和一个日志文件的数据库
目的:创建一个数据库文件和一个日志文件的数据库 在matser数据库下新建查询,输入的命令如下: USE master——指向当前使用的数据库.创建数据库实际上是向master数据库中增加一条数据库信 ...
- HTML 5 应用程序缓存(Application Cache)cache manifest 文件使用 html5 中创建manifest缓存以及更新方法 一个manifest文件会创建一份缓存,不同的manifest文件其缓存的内容是互不干扰的
HTML5 离线缓存-manifest简介 HTML 5 应用程序缓存 使用 HTML5,通过创建 cache manifest 文件,可以轻松地创建 web 应用的离线版本. 什么是应用程序缓存(A ...
- Eclipse创建第一个Servlet(Dynamic Web Project方式)、第一个Web Fragment Project(web容器向jar中寻找class文件)
创建第一个Servlet(Dynamic Web Project方式) 注意:无论是以注解的方式还是xml的方式配置一个servlet,servlet的url-pattern一定要以一个"/ ...
- 如何在Qt Creator 创建一个.pri文件
如何在Qt Creator 创建一个.pri文件 2013年10月09日 ⁄ 综合 ⁄ 共 254字 ⁄ 字号 小 中 大 ⁄ 评论关闭 这个问题很少人写,因为比较简单,但是让却让我花了好大功夫才 ...
- 判断本地系统目录下是否存在XML文件,如果不存在就创建一个XMl文件,若存在就在里面执行添加数据
这是我为项目中写的一个测试的例子, 假如,您需要这样一个xml文件, <?xml version="1.0" encoding="utf-8"?> ...
随机推荐
- 统信UOS - 扩展系统盘
一.开root权限,开终端 二.执行lsblk指令,查看磁盘情况 可以发现 / 路径 对应的是loop0,查阅可知loop设备就是一个文件,挂载为一个路径操作的,这就尴尬了,好好的分区不用,你干嘛这么 ...
- .NET平台系列12 .NET未来之开源.NET Core
系列目录 [已更新最新开发文章,点击查看详细] 微软于2014年11月推出了.NET Core 1.0..NET Core的目标是从我们在过去12年中对.NET Framework的构建.交付 ...
- unity editor模式下读取文件夹资源
string path = EditorUtility.OpenFolderPanel("Load png Textures", "", "" ...
- 查看mysql的数据库物理存放位置
1.查看mysql的数据库物理存放位置: show global variables like "%datadir%";
- 上传靶机实战之upload-labs解题
前言 我们知道对靶机的渗透可以提高自己对知识的掌握能力,这篇文章就对上传靶机upload-labs做一个全面的思路分析,一共21个关卡.让我们开始吧,之前也写过关于上传的专题,分别为浅谈文件上传漏洞( ...
- redis中AOF和RDB的关闭方法
redis中AOF和RDB的关闭方法 问题:当往redis中导入数据时,有时会出现redis server went away的情况: 原因: 导入的数据量太大,而内存不够(即内存1G,但数据有2 ...
- GO学习-(8) Go语言基础之数组
Go语言基础之数组 Array(数组) 数组是同一种数据类型元素的集合. 在Go语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变化. 基本语法: // 定义一个长度为3元素类型为 ...
- 多级中间表示概述MLIR
多级中间表示概述MLIR MLIR项目是一种构建可重用和可扩展的编译器基础结构的新颖方法.MLIR旨在解决软件碎片,改善异构硬件的编译,显着降低构建特定于域的编译器的成本以及帮助将现有编译器连接在一起 ...
- 记录第一次完整的uni-app开发经验
由于我是做后端的,一直没有做过前端的页面,以前在学校图书馆看的都是jsp技术,几乎是把java代码嵌套在前端界面.后面出来实习了才发现,jsp是真的落后了.现在的大学和实际工作所需偏差太大了,没办法. ...
- python+selenium基础篇,句柄操作(多个页面切换)
1.我们打开网页有时候会开出多个页面,导致我们常常定位不到我们需要的元素,这种情况可能就是句柄的因素,如下图所示: 2.句柄切换代码如下: from selenium import webdriver ...