当前位置: 首页 > 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的方法

相关文章:

  • 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)
  • 来伊份发布关于消费者反映蜜枣粽问题处理的情况说明:与消费者达成和解
  • 影子调查丨三名“淘金客”殒命雪峰山:千余废弃金矿洞的监管难题
  • 2025年上海好护士揭晓,上海护士五年增近两成达12.31万人
  • 巴防空系统击落印度无人机,印称巴方违反停火协议
  • 祝贺!苏翊鸣成功解锁“2160”
  • 巴总理召开国家指挥当局紧急会议