热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

(七)编写具有.so文件的AndroidAPK

适用于Androidstudio3.5以上的版本1.环境搭建准备确定安装了NDK和CMake,3.5版本还要下载LLDB,3.6版本默认有࿰

适用于Android studio 3.5以上的版本


1. 环境搭建准备

确定安装了NDK和CMake,3.5版本还要下载LLDB,3.6版本默认有,不需要安装。
在这里插入图片描述

2. 新建项目,并完成配置

在这里插入图片描述
拉到最下面,选择Native c++
在这里插入图片描述
打开夜神模拟器执行下面操作
在这里插入图片描述

填写项目信息。在添加SDK的时候,不要超出上面的SDK版本,这里也就是不能超过22,需要注意,不过新建之后还可以修改
在这里插入图片描述
在这里插入图片描述
构建过程中报错了,所以要构建
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
确定NDK安装位置
如果是离线包形式的ndk,选择离线包目录,如果是我们Android studio 中下载的,去这个目录下寻找,可能找不到,默认隐藏了,可以直接到SDK目录找ndk
在这里插入图片描述
点击ok后,等待构建完成
在这里插入图片描述
在这里插入图片描述

3. 声明native方法,即编写c或c++方法

就是去创建 c 或 c++ 方法

首先先切换项目到project
在这里插入图片描述
新建一个class(注意位置)
在这里插入图片描述
输入名称
在这里插入图片描述
输入下面代码(注意:灰色部分是自动生成的,不要手动输入)
在这里插入图片描述

4. 生成头文件,即使用javac去编译,生成.class文件

在这里插入图片描述
在当前目录下打开cmd
在这里插入图片描述
使用javac 编译该class
在这里插入图片描述

然后进入到java目录内
在这里插入图片描述
使用 javah 命令生成生成c\c++头文件(jni开发第一步)
在这里插入图片描述
将生成的文件,剪贴到cpp目录下
在这里插入图片描述
然后删除cpp目录下的该文件
在这里插入图片描述

5. 编写头文件函数

在 CPP 目录内新建文件 main.c
在这里插入图片描述
在这里插入图片描述
编写文件,将头文件包含进来,并实现sayHello方法

#include "com_example_mytest_myJNI.h"JNIEXPORT jstring JNICALL Java_com_example_mytest_myJNI_sayHello(JNIEnv *env,jclass jobj){return (*env) ->NewStringUTF(env,"hello c++");
}

(有红色报错,不着急)
在这里插入图片描述

使用CMake生成so文件,去修改CmakeLists.txt
在这里插入图片描述
在这里插入图片描述

6. 生成so库并在项目中调用

1-----重构项目
在这里插入图片描述
2----查看so文件
在这里插入图片描述

3—将so文件放入项目中

新建一个目录
在这里插入图片描述
在这里插入图片描述
找到含有so文件的目录
在这里插入图片描述
将上面的文件复制到新建的目录下
在这里插入图片描述
3----调用

进入 MainActivity,注释掉下面内容
在这里插入图片描述
修改和添加新内容
在这里插入图片描述
运行 app 到模拟器 查看效果
在这里插入图片描述

7. 对刚刚生成的apk进行逆向分析

1----将 apk 拖入 Androd Killer

2----找 hello c++ 文本哪里来的
可以找到函数调用,但是函数没有逻辑内容。

3----分析可能在 so 文件中,我们使用 IDA-Pro 进行 so文件分析

4----查看该文件中的字符串
在这里插入图片描述
就会多出来一个这个窗口
在这里插入图片描述
该窗口有我们所有的该apk使用到的字符串
在这里插入图片描述
双击该字符串,就会跳转到指定位置,进行修改或者查看

修改和保存的两个方法:

  • 可以通过 F2 进行修改和保存(需要注意鼠标放置的位置),第一次可以进行修改,再按F2进行保存
  • 也可以直接通过 patch 修改
    在这里插入图片描述
    需要将hello c++!改为 hello world!
    百度 http://www.asciima.com/。通过字母进行查看ascll码

然后将修改写入文件:(一定要保存到文件)
在这里插入图片描述
在这里插入图片描述
然后需要关闭 IDA-Pro 。否则会占用文件,无法打包。


推荐阅读
  • 本文详细介绍了如何在现有的Android Studio项目中集成JNI(Java Native Interface),包括下载必要的NDK和构建工具,配置CMakeLists.txt文件,以及编写和调用JNI函数的具体步骤。 ... [详细]
  • 本文总结了在使用Ionic 5进行Android平台APK打包时遇到的问题,特别是针对QRScanner插件的改造。通过详细分析和提供具体的解决方法,帮助开发者顺利打包并优化应用性能。 ... [详细]
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
  • 本文介绍如何通过Windows批处理脚本定期检查并重启Java应用程序,确保其持续稳定运行。脚本每30分钟检查一次,并在需要时重启Java程序。同时,它会将任务结果发送到Redis。 ... [详细]
  • RecyclerView初步学习(一)
    RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
  • 本文深入探讨了 Java 编程语言的基础,特别是其跨平台特性和 JVM 的工作原理。通过介绍 Java 的发展历史和生态系统,帮助初学者理解如何编写并运行第一个 Java 程序。 ... [详细]
  • 高效解决应用崩溃问题!友盟新版错误分析工具全面升级
    友盟推出的最新版错误分析工具,专为移动开发者设计,提供强大的Crash收集与分析功能。该工具能够实时监控App运行状态,快速发现并修复错误,显著提升应用的稳定性和用户体验。 ... [详细]
  • 本文详细介绍了如何准备和安装 Eclipse 开发环境及其相关插件,包括 JDK、Tomcat、Struts 等组件的安装步骤及配置方法。 ... [详细]
  • 在创建新的Android项目时,您可能会遇到aapt错误,提示无法打开libstdc++.so.6共享对象文件。本文将探讨该问题的原因及解决方案。 ... [详细]
  • 本文介绍如何使用 Android 的 Canvas 和 View 组件创建一个简单的绘图板应用程序,支持触摸绘画和保存图片功能。 ... [详细]
  • 深入理解ExtJS:从入门到精通
    本文详细介绍了ExtJS的功能及其在大型企业前端开发中的应用。通过实例和详细的文件结构解析,帮助初学者快速掌握ExtJS的核心概念,并提供实用技巧和最佳实践。 ... [详细]
  • 本文详细介绍了 Android 开发中 layout_gravity 属性的使用方法及其在不同布局下的效果,旨在帮助开发者更好地理解和利用这一属性来精确控制视图的布局。 ... [详细]
  • 本文详细介绍了ActivityManagerService (AMS) 的工作原理及其在Android系统中的重要角色。AMS作为system_server进程的一部分,在系统启动时加载,负责管理和协调应用程序中的Activity和服务(Service)。文章将通过具体的接口图和通信流程,帮助读者更好地理解AMS的工作机制。 ... [详细]
  • LCUI 2.1.0 版本现已推出,这是一个用 C 语言编写的图形用户界面开发库,适合创建轻量级的桌面应用程序。此次更新包括多项修复和功能增强,并正式宣布将启动 Android 支持的开发计划。 ... [详细]
  • 本文介绍了在Android项目中实现时间轴效果的方法,通过自定义ListView的Item布局和适配器逻辑,实现了动态显示和隐藏时间标签的功能。文中详细描述了布局文件、适配器代码以及时间格式化工具类的具体实现。 ... [详细]
author-avatar
鱼鱼de眼泪2012
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有