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

posted @ 2020-09-29 16:00  YenKoc  阅读(414)  评论(1编辑  收藏  举报