Qt on Android开发环境搭建与性能优化指南 1. Qt on Android开发环境搭建1.1 基础组件安装要开始Qt on Android开发首先需要准备以下核心组件Qt Creator建议5.15 LTS或更新版本Android SDK包含Platform ToolsAndroid NDK推荐r21e以上版本Java JDKOpenJDK 11或Oracle JDK 8安装顺序建议先安装Java JDK并配置JAVA_HOME环境变量安装Android Studio获取SDK/NDK最后安装Qt Creator并配置工具链注意Android SDK路径不要包含中文或空格否则可能导致构建失败1.2 Qt Creator配置详解在Qt Creator中配置Android环境需要关注以下关键点工具链配置进入工具-选项-设备-Android指定JDK、SDK和NDK的安装路径验证配置是否成功会显示API级别和ABI支持情况构建套件设置Android ARMv7 (GCC 4.9) Qt版本: Qt 5.15.2 for Android 编译器: Android GCC Debugger: 自动检测 Android设置: 指定API级别(建议21)1.3 常见环境问题解决中文乱码问题在pro文件中添加QMAKE_CXXFLAGS -fexec-charsetUTF-8 QMAKE_CXXFLAGS -finput-charsetUTF-8平台插件缺失错误将以下文件打包到APK中android_armv7/libqtforandroid.so plugins/platforms/libandroid.so2. Qt与Android原生交互2.1 JNI调用机制Qt通过QAndroidJniObject类实现Java原生调用// 调用静态方法 QAndroidJniObject::callStaticMethodjstring( com/example/MyClass, getDeviceInfo, ()Ljava/lang/String;); // 调用实例方法 QAndroidJniObject activity QtAndroid::androidActivity(); activity.callMethodvoid( showToast, (Ljava/lang/String;)V, QAndroidJniObject::fromString(Hello).object());2.2 混合开发实践AndroidManifest.xml定制activity android:nameorg.qtproject.qt5.android.bindings.QtActivity android:configChangesorientation|screenSize android:screenOrientationsensor intent-filter action android:nameandroid.intent.action.MAIN/ category android:nameandroid.intent.category.LAUNCHER/ /intent-filter meta-data android:nameandroid.app.lib_name android:valuemyapp/ /activity2.3 权限管理系统动态权限申请示例QtAndroid::PermissionResultMap result QtAndroid::requestPermissionsSync( QStringList({ android.permission.CAMERA, android.permission.ACCESS_FINE_LOCATION })); if(result[android.permission.CAMERA] QtAndroid::PermissionResult::Denied){ // 处理权限拒绝情况 }3. 性能优化技巧3.1 渲染性能提升OpenGL ES优化Item { layer.enabled: true layer.textureSize: Qt.size(1024, 1024) layer.smooth: false transform: Rotation { origin.x: 50; origin.y: 50 axis { x: 0; y: 1; z: 0 } angle: 45 } }3.2 内存管理策略关键实践使用QSharedPointer管理Java对象引用及时释放JNI局部引用避免在QML中创建大量动态对象内存检测命令adb shell dumpsys meminfo package_name3.3 多线程模型Android UI线程与Qt事件循环整合class AndroidRunnable : public QRunnable { void run() override { QAndroidJniObject::callStaticMethodvoid( com/example/Worker, doBackgroundWork, ()V); } }; QtAndroid::runOnAndroidThread([](){ // 这段代码会在Android UI线程执行 });4. 高级功能实现4.1 蓝牙通信模块低功耗蓝牙(BLE)实现流程在AndroidManifest中添加权限uses-permission android:nameandroid.permission.BLUETOOTH/ uses-permission android:nameandroid.permission.BLUETOOTH_ADMIN/ uses-permission android:nameandroid.permission.ACCESS_FINE_LOCATION/Qt端封装JNI调用QAndroidJniObject bluetoothAdapter QAndroidJniObject::callStaticObjectMethod( android/bluetooth/BluetoothAdapter, getDefaultAdapter, ()Landroid/bluetooth/BluetoothAdapter;);4.2 通知系统集成创建带图标的通知// 在Java端实现 NotificationCompat.Builder builder new NotificationCompat.Builder(context, channelId) .setSmallIcon(R.drawable.ic_notification) .setContentTitle(Qt Notification) .setContentText(message) .setPriority(NotificationCompat.PRIORITY_DEFAULT);4.3 传感器数据获取加速度传感器实现示例QAndroidJniObject sensorManager QtAndroid::androidActivity() .callObjectMethod(getSystemService, (Ljava/lang/String;)Ljava/lang/Object;, QAndroidJniObject::fromString(sensor).object()); QAndroidJniObject accelerometer sensorManager .callObjectMethod(getDefaultSensor, (I)Landroid/hardware/Sensor;, 1); // TYPE_ACCELEROMETER5. 调试与发布5.1 日志系统配置分级日志输出qSetMessagePattern([%{time yyyy-MM-dd hh:mm:ss.zzz} %{if-debug}D%{endif}%{if-info}I%{endif}%{if-warning}W%{endif}%{if-critical}C%{endif}%{if-fatal}F%{endif}] %{file}:%{line} - %{message}); // 在Java层捕获日志 QtAndroid::androidActivity() .callMethodvoid(redirectQtLogs, (Z)V, true);5.2 签名打包流程生成签名密钥keytool -genkey -v -keystore myapp.keystore -alias mykey -keyalg RSA -keysize 2048 -validity 10000构建发布APKandroid { deployqt: { arguments: [--release, --sign, myapp.keystore, mykey, --storepass, password] } }5.3 性能分析工具常用ADB命令# CPU使用率 adb shell top -n 1 | grep package # GPU渲染分析 adb shell dumpsys gfxinfo package # 电池消耗统计 adb shell dumpsys batterystats --reset adb shell dumpsys batterystats --enable full-wake-history