上一篇笔记参照 NDK 示例 samples/native-activity ,验证了用C写纯 native apk 确实是可行的。
native-activity 示例中的C代码,创建了一个使用 EGL 渲染的 ANativeWindow (EGL是opengl 桥接层代码),apk运行后, 只要有屏幕上点一下,就会不断的用egl函数刷窗体背景色。
这篇是参照 samples/native-plasma示例的小笔记,
代码里面不用 egl 的,找出 ANativeWindow 的绘图内存,
然后直接在这个内存区域填充像素数据来刷窗体背景——即 FrameBuffer 直接绘图。
顺便测试了下在 native apk 中集成一个 mini http server——完全没有问题。
编译出来的 apk 超级小巧。
在自用的oppo手机上验证成功。
关键代码:
static void engine_draw_frame(struct engine* engine) {
if (engine->app->window == NULL) {
// No window.
return;
}
ANativeWindow_Buffer buffer;
if (ANativeWindow_lock(engine->app->window, &buffer, NULL) < 0) {
LOGW("Unable to lock window buffer");
return;
}
fill_fb(&buffer);
ANativeWindow_unlockAndPost(engine->app->window);
}
对于不想沾java的来人,很不错。
也可以验证很多东西,比如类 aidlux 的 "跨生态融合" linux环境(原 aid learning)
再比如通过一个 apk 来在1024以上的端口上实现ssh连接安卓等等。。。
代码仓库:
build-apk-with-c: 纯C语言开发无java、无dex的安卓apk应用
里面的 no_EGL.zip



