Android中NativeActivity开发APP原理以及参考代码实现开发过程

一,NativeActivity的原理

NativeActivity 是 Android 框架中的一个类,它允许开发者用原生代码(如 C 或 C++)来编写 Android 应用程序的主要部分。这个类提供了一个简化的方法来创建和管理一个不包含任何 Android UI 组件的原生活动。NativeActivity 主要用于游戏和需要高性能图形处理的应用程序,因为原生代码可以直接访问硬件,从而提供更好的性能。

以下是 NativeActivity 的一些基本原理和关键概念:

1,生命周期管理:NativeActivity 的生命周期与标准的 Android Activity 类似。当 NativeActivity 被创建、暂停、恢复或销毁时,会调用相应的原生方法(如 onCreate, onPause, onResume, onDestroy 等)。这些方法在原生代码中实现,允许开发者控制原生应用程序的生命周期。
2,窗口管理:NativeActivity 创建一个 Android 窗口,并在其中呈现原生内容。这个窗口由 Android 系统管理,但内容是由原生代码渲染的。NativeActivity 提供了一个 ANativeWindow 实例,开发者可以用它来渲染图形内容。
3,输入处理:NativeActivity 还负责处理来自用户的输入事件(如按键、触摸和传感器数据)。这些事件通过 AInputEvent 结构体传递给原生代码,允许开发者以最适合其应用程序的方式处理它们。
4,线程管理:NativeActivity 在其内部维护了一个渲染线程,用于在窗口上呈现内容。开发者需要在原生代码中管理这个线程,确保它以适当的频率和效率渲染内容。
5,资源访问:尽管 NativeActivity 主要用于原生开发,但它仍然可以访问 Android 的资源系统。这意味着开发者可以在原生代码中加载和使用 Android 资源(如字符串、图像和音频文件)。

所以,我们可以用Java开发app,或者结合使用Java和C|C++开发app,NativeActivity则为单独使用C|C++开发app提供支持。从开发者的角度看,我们是在单独用C++开发app,但从底层看还是离不开Java。

在android源码中,已经使用java开发好了一个中间类,这个中间类就是NativeActivity类。我们使用C++开发的Native库之所以能运行,就是因为被这个中间类使用JNI的方式调用了。

所以,当我们逆向分析一个NativeActivity开发的app时,发现Native库里导出了android_main函数,表明这是使用android_native_app_glue.h开发的。基本就可以确定android_main就是Native库的主函数,从这里入手分析即可。(如CTF题目 easy-dex)

如果在Native库里没有找到android_main函数,就表明这个NativeActivity是使用native_activity.h开发的,这时就会看到导出了ANativeActivityCallbacks结构里的诸多回调函数,这些回调函数对应app运行过程中的不同事件,我们就需要在这些回调函数中找逆向分析的入手点。

二,NativeActivity开发的实现过程分析

我们使用C++开发app的两种方式:

1, native_activity.h

2,android_native_app_glue.h

第一种:native_activity.h其中定义了一个ANativeActivity类,这个类中又包含一个ANativeActivityCallbacks结构的指针:

typedef struct ANativeActivity {
   
    struct ANativeActivityCallbacks* callbacks;
    ... ...
}

这个ANativeActivityCallbacks结构里面就是Native库需要导出的所有函数:

typedef struct ANativeActivityCallbacks {
   
    void (*onStart)(ANativeActivity* activity);
    void (*onResume)(ANativeActivity* activity);
    void* (*onSaveInstanceState)(ANativeActivity* activity, size_t* outSize);
    void (*onPause)(ANativeActivity* activity);
    void (*onStop)(ANativeActivity* activity);
    void (*onDestroy)(ANativeActivity* activity);
    void (*onWindowFocusChanged)(ANativeActivity* activity, int hasFocus);
    void (*onNativeWindowCreated)(ANativeActivity* activity, ANativeWindow* window);
    void (*onNativeWindowResized)(ANativeActivity* activity
  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孤舟簔笠翁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值