zoukankan      html  css  js  c++  java
  • Qt for Android 部署流程分析

    原地址:http://blog.csdn.net/foruok/article/details/17796017

    今天为了测试使用 Qt Creator 3.0.0 开发的纯 C 工程,利用了 Windows 下 Qt 5.2 for Android 开发入门里创建的 HelloAndroid 工程,想把纯 C 工程生成的 so 库加到 HelloAndroid 工程中。结果加入进去了,但不会自动拷贝到生成目录打包进 APK 。

        研究了一个小时,大体搞明白了 Qt Creator 生成 APK 的流程。

        首先 Qt Creator 会编译时会生成一个 json 文件,就在工程目录下,我的是 android-libhelloAndroid.so-deployment-settings.json 。内容如下:

    1. {  
    2.    "description""This file is generated by qmake to be read by androiddeployqt and should not be modified by hand.",  
    3.    "qt""C:\Qt\Qt5.2.0\5.2.0\android_armv7",  
    4.    "sdk""E:/android-sdk-windows",  
    5.    "ndk""E:\Android\android-ndk-r8d",  
    6.    "toolchain-prefix""arm-linux-androideabi",  
    7.    "tool-prefix""arm-linux-androideabi",  
    8.    "toolchain-version""4.7",  
    9.    "ndk-host""windows",  
    10.    "target-architecture""armeabi-v7a",  
    11.    "android-extra-libs""libhttpclient_test.so",  
    12.    "application-binary""E:/qt/helloAndroid/libhelloAndroid.so"  
    13. }  
    {
       "description": "This file is generated by qmake to be read by androiddeployqt and should not be modified by hand.",
       "qt": "C:\Qt\Qt5.2.0\5.2.0\android_armv7",
       "sdk": "E:/android-sdk-windows",
       "ndk": "E:\Android\android-ndk-r8d",
       "toolchain-prefix": "arm-linux-androideabi",
       "tool-prefix": "arm-linux-androideabi",
       "toolchain-version": "4.7",
       "ndk-host": "windows",
       "target-architecture": "armeabi-v7a",
       "android-extra-libs": "libhttpclient_test.so",
       "application-binary": "E:/qt/helloAndroid/libhelloAndroid.so"
    }
    

       上面文件里的 application-binary ,实际上是一个 so 文件,在我这里是 libhelloAndroid.so 。

       要说明的是,编译阶段只会生成 so 文件,什么事情不干。当你运行时,选择了 Android 设备,Qt Creator 才开始执行一系列动作来生成 APK ,并 push 到设备上运行。大概步骤是这样的:

    1.     创建构建目录
    2.     拷贝 application-binary 
    3.     拷贝 Qt 自己的库和依赖的库,如 libgnustl_shared.so 等。
    4.     根据模板拷贝 java 文件、生成 AndroidManifest.xml 、资源文件等等
    5.     调用 ant 编译、打包、签名、对齐
    6.     连接设备,install APK 并运行

        这些动作都是由一个名为 androiddeployqt.exe 的程序完成的,感兴趣的可以看它的源码,Qt SDK 里有,同时也可以在 Qt Creator 的输出 panel 中看到 这个部署程序的输出信息。更详细的过程可以参考 Qt 官方文档 Deploying Applications to Android Devices,那里面说得很详细。

        说说我遇到的问题。我在 pro 文件里使用 LIBS += -lxxx 加入了我的 C 库,编译通过,可是 androiddeployqt 没有拷贝 libxxx.so ,APK 运行时找不到依赖的 libxxx.so 直接挂掉了。这个问题的解决,只要添加一个额外的依赖库就可以了,Qt Creator 会传递参数给 androiddeployqt ,后者就会正确打包。

        在 Qt Creator 中,选则 Projects > Run > Deploy configurations > Details ,可以看到下面的界面:


        看图片上画蓝线、篮圈的地方,就是这里,添加你依赖的库即可。

        好啦,到这里我们可以在纯粹 C++ 的 IDE 当中进行 Android 的开发了,带界面的、不带界面的,都可以完成。不过貌似 service 还不行,这个我还没有研究。

  • 相关阅读:
    mysql语句删除重复数据,保留一条;查询所有重复数据;查询重复数据的一条,
    使用pycharm 运行python的django项目时报错“Quit the server with CTRL-BREAK.”
    检查python以及django是否安装配置成功
    使用Pycharm开发python下django框架项目生成的文件解释
    XML序列化与反序列化
    前台异步传过来的URL中获取token/获取string链接中的token
    字符串json转成json对象
    MySql查询语句中解决“该列没有包含在聚合函数或者groupby子句中”的相关问题方法
    图形验证码的生成(数字和英文大小写)和提交验证
    JQuery使用正则表达式验证手机号,邮箱,身份证(含有港澳台),网址
  • 原文地址:https://www.cnblogs.com/lanye/p/3534037.html
Copyright © 2011-2022 走看看