当前位置: 首页 > news >正文

【002】renPy android端启动流程分析

 接上篇分析

org.renpy.android.PythonSDLActivity#onCreate

 它先调用了

org.libsdl.app.SDLActivity#onCreate
源码如下:
@Override  // android.app.Activity
protected void onCreate(Bundle bundle0) {//1. 日志记录String s;Log.v("SDL", "Device: " + Build.DEVICE);Log.v("SDL", "Model: " + Build.MODEL);Log.v("SDL", "onCreate()");super.onCreate(bundle0);try {// 2. 设置线程名称Thread.currentThread().setName("SDLActivity");}catch(Exception exception0) {Log.v("SDL", "modify thread properties failed " + exception0.toString());}
//3. 加载本地库try {this.loadLibraries();SDLActivity.mBrokenLibraries = false;s = "";}catch(UnsatisfiedLinkError unsatisfiedLinkError0) {System.err.println(unsatisfiedLinkError0.getMessage());SDLActivity.mBrokenLibraries = true;s = unsatisfiedLinkError0.getMessage();}catch(Exception exception1) {System.err.println(exception1.getMessage());SDLActivity.mBrokenLibraries = true;s = exception1.getMessage();}if(SDLActivity.mBrokenLibraries) {SDLActivity.mSingleton = this;AlertDialog.Builder alertDialog$Builder0 = new AlertDialog.Builder(this);alertDialog$Builder0.setMessage("An error occurred while trying to start the application. Please try again and/or reinstall.\n\nError: " + s);alertDialog$Builder0.setTitle("SDL Error");alertDialog$Builder0.setPositiveButton("Exit", new DialogInterface.OnClickListener() {@Override  // android.content.DialogInterface$OnClickListenerpublic void onClick(DialogInterface dialogInterface0, int v) {SDLActivity.mSingleton.finish();}});alertDialog$Builder0.setCancelable(false);alertDialog$Builder0.create().show();return;}//5. 初始化 SDL JNI 接口SDL.setupJNI();// 6. 全局状态初始化SDL.initialize();SDLActivity.mSingleton = this;SDL.setContext(this);SDLActivity.mClipboardHandler = new SDLClipboardHandler();SDLActivity.mSurface = new SDLSurface(this.getApplication());RelativeLayout relativeLayout0 = new RelativeLayout(this);SDLActivity.mLayout = relativeLayout0;relativeLayout0.addView(SDLActivity.mSurface);int v = SDLActivity.getCurrentOrientation();SDLActivity.mCurrentOrientation = v;SDLActivity.onNativeOrientationChanged(v);try {SDLActivity.mCurrentLocale = Build.VERSION.SDK_INT < 24 ? SDLActivity.getContext().getResources().getConfiguration().locale : SDLActivity.getContext().getResources().getConfiguration().getLocales().get(0);}catch(Exception unused_ex) {}//7. 设置内容视图this.setContentView(SDLActivity.mLayout);//8. 窗口样式与 UI 设置SDLActivity.setWindowStyle(false);this.getWindow().getDecorView().setOnSystemUiVisibilityChangeListener(this);//9. 处理 Intent 数据(如文件路径)Intent intent0 = this.getIntent();if(intent0 != null && intent0.getData() != null) {String s1 = intent0.getData().getPath();if(s1 != null) {Log.v("SDL", "Got filename: " + s1);SDLActivity.onNativeDropFile(s1);}}
}


功能
描述
日志输出
输出设备信息和生命周期状态,便于调试
本地库加载
加载 SDL 核心库和游戏逻辑库
异常处理
处理加载失败的情况并提示用户
JNI 初始化
设置 Java 与 C/C++ 交互的基础环境
UI 初始化
创建 SDLSurface 并设置为内容视图
全局状态管理
初始化 SDL 相关的全局状态和事件处理器
Intent 支持
支持通过 Intent 传入外部数据(如文件路径)

实际加载的是

@Override  // org.libsdl.app.SDLActivity
protected String[] getLibraries() {return new String[]{"renpython"};
}

里面有一堆native的方法

http://www.dtcms.com/a/186309.html

相关文章:

  • Docker从0到1:入门指南
  • 破解 Qt QProcess 在 Release 模式下的“卡死”之谜
  • Linux基础命令之目录管理——了解各种操作文件目录的命令,万字教学,超详细!!!(1)
  • windows防火墙
  • 特伦斯折叠重锤V70:实现专业演奏,从这里开始
  • 【Vue3】使用vite创建Vue3工程、Vue3基本语法讲解
  • JavaScript中的数字谜题:为何0.3的二进制不精确,浏览器却显示正确?
  • 07_SpringBoot2集成Redis连接失败
  • Git日志信息
  • nginx-整合modsecurity做waf
  • 【高并发架构设计】-1:高并发通用设计思想
  • 外出充电不发愁,倍思便携式移动电源成出行新宠
  • 【日撸 Java 三百行】Day 12(顺序表(二))
  • Linux笔记---信号(上)
  • I/O多路复用(select/poll/epoll)
  • 一.Gitee基本操作
  • K8S中构建双架构镜像-从零到成功
  • 反弹shell再入门
  • 计算机网络:CPU与时钟的关系
  • 动手学深度学习12.3.自动并行-笔记练习(PyTorch)
  • 【TVM 教程】microTVM PyTorch 教程
  • @Component 注解:Spring 组件扫描与管理的基石
  • istringstream的简化源码详解
  • django之视图
  • 构建DEEPPOLAR ——Architecture for DEEPPOLAR (256,37)
  • 一文读懂如何使用MCP创建服务器
  • LWIP传输层协议笔记
  • C++ asio网络编程(5)简单异步echo服务器
  • 【】东方财务的Choice数据量化接口,在linux上安装python 版本,需要联系客户经理审核通过后就可以使用了。使用接口更加稳定和全面。
  • 智能指针入门:深入理解 C++ 的 shared_ptr