吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 8507|回复: 17
收起左侧

[Android 原创] 《教我..》系列编写so -- 使用AndroidStudio 3.X编写so

  [复制链接]
JiaYangA 发表于 2019-9-16 16:01

最近在跟随 会飞的小丑鸭 的《教我兄弟学逆向..》系列贴学习逆向,在《教我兄弟学Android逆向06 用AndroidStudio编写第一个so》 一帖中,按照帖子所教内容成功编译出so文件,但在 "课后作业" 时,编译时缺出现了一系列问题,导致最后没有成功,查看下面大家的一些评论,看到了一些为了跟随学习,又选择了低版本的AS,也看到了一些评论说gradle3.0以上放弃了帖中的生成方法,于是,我开始了解决AS3.X 以上版本编写so的问题,最后终于成功,现将中间解决时出现的问题写出来希望能够帮助大家

此帖是在 《教我兄弟学Android逆向06 用AndroidStudio编写第一个so》基础上编写,一些简单配置地方可能会省略,尽可能的做到详细说明

NDK
  • 下载好NDK,并配置好环境变量,AndroidStudio中并也配置好。(此处无需使用教学帖中 NDK-r10版本,使用这个r10低版本会有问题,并提示需要"rxx"版本以上,此处本人以最新的r20版本为例进行编写)
    NDK配置
AndroidStudio编写so
  • 编写JNI接口类

    JNI接口类

  • 找到JNI接口类文件路径,在此处调用cmd窗口(个人习惯,亦可在AS的命令行窗口进行,不过需要在当前类的路径下)生成 .class文件

    JNI接口类路径
    生成class文件

  • 返回到"java"目录下,调用cmd窗口,使用命令 "javah -jni 包名.类名" 生成.h文件。注意一定要在java层目录下输入命令,不然不会报错:找不到xxx类

    生成.h文件

  • 创建 jni 文件夹,并将.h文件移动到此文件夹下。然后创建一个空的c文件,并对其编写。编写内容:将.h文件中 两个方法相关的代码复制到c文件中,头部引用.h文件

    生成jni文件夹
    编写c文件

  • 下载CMake和LLDB。(需要注意:CMake 不可下载 3.10.版本 需要下载3.6.版本,不然会报错,具体 查看/下载 ‘点击AS-SDKManager - 右下角 showPackageDetails -查看CMake’)

    下载CMake和LLDB

  • 下载好后 在项目的build.gradle下进行相关配置

    配置build.gradle

    // 使用Cmake工具
            externalNativeBuild {
                cmake {
                    cppFlags ""
                    //生成多个版本的so文件
                    abiFilters 'arm64-v8a','armeabi-v7a','x86','x86_64'
                }
            }
    
    // 配置CMakeLists.txt路径
        externalNativeBuild {
            cmake {
                path "CMakeLists.txt"   // 设置所要编写的c源码位置,以及编译后so文件的名字
            }
        }
    • 关于 CMakeLists.txt 如何得来的,可以自己在新建项目的时候 勾选“Include c/c++” 生成的项目就有此文件。
  • 修改 CMakeLists.txt 内容

    编写CMake

  • 编译 点击"Build - Rebuild Project",编译后在 "app - build - intermediates - cmake - debug - obj "下查看so库

    编译-查看so库

  • 项目创建jniLibs并调用so库方法

    创建文件夹并调用so库方法

    • 如果想指定jniLibs文件路径可以在app - build.gradle 下配置:
    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }
最后
  • 需要注意:
    • .h文件要移动到 jni文件夹下
    • CMake下载注意版本

免费评分

参与人数 5吾爱币 +11 热心值 +5 收起 理由
修罗本灭世 + 1 + 1 谢谢@Thanks!
自由之心 + 2 + 1 热心回复!
qtfreet00 + 6 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
liyonghaod + 1 + 1 我很赞同!
stars-one + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| JiaYangA 发表于 2019-9-18 11:34
starlancer 发表于 2019-9-18 11:24
这个编写了有什么用处?

引用 “会飞的丑小鸭” 《教我..》第六帖编写so 中的介绍:
Android开发中,我们经常会用到.so文件。原因有很多,比如部分方法不想暴露,如加密规则。比如部分秘钥需要存储,哪怕最简单的一个String我们使用.so调用获取这个String,也比直接明文写在代码中要来的安全。
 楼主| JiaYangA 发表于 2020-4-13 14:36
cmputer 发表于 2020-4-10 16:40
这里javac MyJNI.java才对吧

是的是的,我的失误,流程顺序 可看 https://www.52pojie.cn/thread-706568-1-1.html 这篇,写此篇初衷只是为了说明AS 3.X版本 如何编写So库
Airmour 发表于 2019-9-17 10:23
soha1018 发表于 2019-9-17 10:59
整挺好的
soulmutou 发表于 2019-9-17 16:21
辛苦楼主了哈~
xixicoco 发表于 2019-9-17 21:07
so cool,man
小夫哥 发表于 2019-9-17 23:43
不错,挺好的教材。
majia4075669072 发表于 2019-9-18 00:10
什么时候能教教怎么写安卓的HAL和驱动
xinxinsoar 发表于 2019-9-18 09:10
膜拜大佬
starlancer 发表于 2019-9-18 11:24
这个编写了有什么用处?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 16:24

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表