您现在的位置是:主页 > news > 兴义市住房城乡建设局网站/关键词快速排名怎么做
兴义市住房城乡建设局网站/关键词快速排名怎么做
admin2025/5/17 17:30:42【news】
简介兴义市住房城乡建设局网站,关键词快速排名怎么做,中国网站的建设,做免费漫画网站有风险吗文章目录0 背景1 导入Android文件3 进行自动更新功能编写3.1 调用方法3.2 注意事项4 附赠单元测试文件0 背景 因为项目涉及到使用Qt进行自动跟新,在网上的谷歌、百度、360搜索一番后,并且尝试了里面的各种方法,最后为没有成功。在同事的帮助…
文章目录
- 0 背景
- 1 导入Android文件
- 3 进行自动更新功能编写
- 3.1 调用方法
- 3.2 注意事项
- 4 附赠单元测试文件
0 背景
因为项目涉及到使用Qt进行自动跟新,在网上的谷歌、百度、360搜索一番后,并且尝试了里面的各种方法,最后为没有成功。在同事的帮助下,完成了Android自动更新的功能,实现的答题思路为:使用Qt的JNI调用Android的java更新代码实现自动更新。最后成功实现了更新,这里提供给需要帮助的同学们。
效果:
1 导入Android文件
- 1, 打开项目,在里面选择
Create Templates
- 2,勾选Copy the Gradle files to Android directory
然后就会自动引入Android的项目文件夹,此时.pro中会自动加入下面的代码:(意思就是把android文件夹下的所有文件都打包进Android)
DISTFILES += \android/AndroidManifest.xml \android/build.gradle \android/gradle.properties \android/gradle/wrapper/gradle-wrapper.jar \android/gradle/wrapper/gradle-wrapper.properties \android/gradlew \android/gradlew.bat \android/res/values/libs.xmlANDROID_PACKAGE_SOURCE_DIR = $$PWD/android
此时我们把下载资源文件中的Android文件夹替换当前项目下的Android文件夹,以此来达到引入编写好的java文件、包、配置的信息。
- 3 在.pro文件中更改信息
把自动添加的的代码换成下面的代码:(意思是仅在Android编译下,引入文件,并且添加androidextras库,为调用JNI作准备)
android {
QT += androidextrasDISTFILES += \android/AndroidManifest.xml \android/build.gradle \android/gradle.properties \android/gradle/wrapper/gradle-wrapper.jar \android/gradle/wrapper/gradle-wrapper.properties \android/gradlew \android/gradlew.bat \android/res/values/libs.xmlANDROID_PACKAGE_SOURCE_DIR = $$PWD/android
}
3 进行自动更新功能编写
3.1 调用方法
在Qt中需要调用的地方加入下面的代码
引入头文件
#ifdef Q_OS_ANDROID
#include<QAndroidJniEnvironment>
#include<QAndroidJniObject>
#include<QtAndroid>
#endif
使用方法调用
// Android自动更新的方法
#ifdef Q_OS_ANDROID
//用于检查异常QAndroidJniEnvironment env;QAndroidJniObject m_activity;m_activity = QtAndroid::androidActivity();m_activity.callMethod<void>("updateSoftware");//调用跟新方法if(env->ExceptionCheck()){env->ExceptionDescribe();//异常描述env->ExceptionClear();//清除异常}
#endif
为了调用上面的非静态方法(需要对象创建才能调用),已对AndroidManifest.xml文件进行修改,修改如下:
将第十四行的android:name改为我们调用java文件:
<application android:hardwareAccelerated="true" android:networkSecurityConfig="@xml/network_security_config" android:name="com.janyee.xu.XUpdateApp" android:label="-- %%INSERT_APP_NAME%% --" android:extractNativeLibs="true">
为了能进行网路权限的访问,AndroidManifest.xml文件进行修改,修改如下:
在第十四行加入:
android:networkSecurityConfig="@xml/network_security_config"
3.2 注意事项
- 1, 更新方法在UpdateAty.java中,如果需要开启程序自动调用更新(不需要在Qt主程序中调用更新方法),则把文件中方法改为:(updateSoftware方法可以删除)
public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);Log.d("====","更新测试");XUpdateInit.checkUpdate(getApplicationContext(),true);Log.d("====","更新测试2");}
- 2,如果Qt默认的包名被更改了,则需要进行相应的修改,把XUpdateInit.java中第二十六行改为app的包名:
原始的引入包名:
import org.qtproject.example.BuildConfig;
- 3,apk下载基地址修改,在XupdateApp.java文件中
XHttpSDK.setBaseUrl()
填写更新的基地址。 - 4,修改接受的json数据,在XUpdateInit.java文件中更改接受的json数据
下面的原始的解析json方法,解析的json数据为:
@Override
public UpdateEntity parseJson(String json) throws Exception {Log.d("====","获取到版本信息,尝试解析:"+json);Log.d("===","本地版本是:"+BuildConfig.VERSION_CODE);Gson gson=new Gson();CodeMsg cm= gson.fromJson(json, CodeMsg.class);UpdateEntity entity=new UpdateEntity();if(cm.getCode()==200){entity.setDownloadUrl(cm.getResult().getDownloadUrl());//下载地址entity.setVersionCode(cm.getResult().getClientVersionNumber());//版本号entity.setVersionName(cm.getResult().getVersionName());//版本名字entity.setUpdateContent(cm.getResult().getPromptInfo());//更新内容entity.setIsIgnorable(cm.getResult().getClientVersionNumber()<BuildConfig.VERSION_CODE);//忽律entity.setHasUpdate(cm.getResult().getClientVersionNumber() > BuildConfig.VERSION_CODE);//更新}return entity;}
如果需要编写自己的json数据,则自己修改java方法即可。
注意⚠️:此自动更新的方法,参考了xuexiangjys的开源更新库。
4 附赠单元测试文件
码云地址
github
csdn下载