使用QT编写安卓手机程序,需要调用NDK吗

使用QT编写安卓手机程序,需要调用NDK吗,第1张

Googlecn上介绍NDK的说明如下;

原生开发工具包 (NDK) 是一组可让您在 Android 应用中利用 C 和 C++ 代码的工具。 可用以从您自己的源代码构建,或者利用现有的预构建库。

NDK 不适用于大多数初学的 Android 编程者,对许多类型的 Android 应用没什么价值。 因为它不可避免地会增加开发过程的复杂性,所以通常不值得使用。 但如果您需要执行以下 *** 作,它可能很有用:

从设备获取卓越性能以用于计算密集型应用,例如游戏或物理模拟。

重复使用您自己或其他开发者的 C 或 C++ 库。

照这样说,你不用c/c++就不需要,但是你用qt那肯定是用c++来开发

解压后里面有三项 :eclipse(自带的,专业版,可以直接使用,如果自己下载eclipse需要配置),sdk和一个SDK Manager的应用程序,双击ke运行,用于sdk的升级。

1直接删除iTunesMetadataplist文件2修改iTunesMetadataplist文件的访问权限,将用户的“读娶写入”全部取消。注意:如果这时直接退出程序,所做的修改并没有被确认。所以访问权限修改后必须退回到上一级目录,然后再退出程序。3重新打开

Android NDK从r5b版本开始有官方支持的STL了,有一个crystax版本早已经支持。官方的支持有两个版本一个是gnu的,一个是stlport。如果你需要在你的NDK程序中使用STL,那么需要在Applicationmk文件中添加一个选项,就是APP_STL := stlport_static。 其中APP_STL的取值有以下四种: system -- 系统默认的最小支持的C++运行时库 stlport_static -- 以静态链接的方式使用stlport版本的STL stlport_shared -- 以动态链接的方式使用stlport版本的STL gnustl_static -- 以静态链接的方式使用gnu版本的STL如果你和我一样并没有使用Androidmk和Applicationmk,而是使用Code::Blocks或者Visual studio 2010,那么在配置环境时,如果需要STL的支持,那么就需要注意自己要指定stl的包含路径。链接就根据需要自己链接不同的版本。请注意,stlport有静态链接和动态链接两种方式,而gnu的仅有静态链接方法。另外一个需要注意的就是官方提供的这个stlport版本不支持RTTI和异常,换言之,如果你使用了stlport版本的STL,则不能使用-fexceptions和-frtti这两个编译选项。

android studio ndk调用过程如下:

通过jniaes案例说明调用NDK层配置过程

而我们通过底层来判断签名是否正确,如果正确则继续执行核心代码,否则退出程序,这样就可以防止别人恶意反编译,并进行二次打包。

首先去官网下载一个最新的NDK,随便放到哪都行,像我放在D:\Dev\Android\android-ndk-r10d

(1) 新建一个项目:名称JniAes

首先在java类中添加native接口,注意写好native接口和SystemloadLibrary()即可。代码如下:

1 public synchronized static native String getFromNativeIv();

2 public synchronized static native String getStringFromNative();

3 public synchronized static native int jniCheckAPP(Context context);

4

然后build project得到其中中间文件,我们关注的是class文件。编译OK以后生成的class文件在AS工程的如下目录:

aes\app\build\intermediates\classes\debug\android\

(2)接下来跟class文件生成相应的h头文件,执行如下命令即可

点击"View->Tool Windows->Terminal" 即在Studio中进行终端命令行工具执行如下命令生成c语言头文件

javah -d jni -classpath c:\Users\sodinochen\AppData\Local\Android\sdk\platforms

\android-16\androidjar;\\build\intermediates\classes\debug comaesjniaesMainActivity

(3)然后将刚才的 h文件剪切过来。在jni目录下新建一个c文件,随意取名,我的叫strkc 。

strkc文件,用于实现核心代码逻辑,判断包名哈希值是否合法,如果返回1,为合法。反之,则不合法。入口方法为:

jint Java_com_aes_jniaes_MainActivity_jniCheckAPP(JNIEnv env, jobject context,

jobject thiz)

接下来在工程的localproperties文件中添加NDK路径(上面下载好的那个NDK),类似其中的SDK路径一样,我的添加后如下:

sdkdir=D\:\\Dev\\Android\\android-sdk-windows

ndkdir=D\:\\Dev\\Android\\android-ndk-r10d

(4)接下来在app module目录下的buildgradle中设置库文件名(生成的so文件名)。找到gradle文件的defaultConfig这项,在里面添加如下内容:

defaultConfig {

applicationId "comaesjniaes"

minSdkVersion 15

targetSdkVersion 22

versionCode 1

versionName "10"

ndk {

moduleName "checkapp-jni" //生成的so名字

abiFilters "armeabi", "armeabi-v7a", "x86" //输出指定三种abi体系结构下的so库。目前可有可无。

}

}

(5)最后就是添加静态初始化loadLibrary代码,添加如下:

static {

SystemloadLibrary("checkapp-jni"); //so文件的名字

}

编译出来的so文件在aes\app\build\intermediates\ndk\debug\lib目录下

那么如何将编译好的so文件进行使用,可以通过如下方式:

二 引用so文件

(1)在“src/main”目录中新建名为“jniLibs”的目录;

(2)将so文件复制、粘贴到“jniLibs”目录内。

你的环境配置方法已经很老了,我在“百度经验”上有一篇文章“android ndk环境配置”,是关于高版本的ndk r10的环境配置,不需要cgywin,而且很简单,希望对你有用;如果还有疑问可以在我的百度经验留言,谢谢!

命令输入错误引起的。IPC是指进程间通信,一般和ndk程序网络发送失败的具有原因是命令输入错误引起的,需要进行更改后重试。网络是由若干元件组成的使电信号按一定要求传输的电路或这种电路的部分。

以上就是关于使用QT编写安卓手机程序,需要调用NDK吗全部的内容,包括:使用QT编写安卓手机程序,需要调用NDK吗、如何在vs中配置ndk开发环境、求助编译android应用时NDK报错的解决办法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9845067.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存