❶ linux下NDK编译出的SO库能在WIndows下的android工程直接使用么
可以使用的。
解析:首先Android就是Linux内核。
android应用程序开发环境: 包括eclipse、java、 android sdk、 adt等。
安装android-ndk开发包,这个开发包可以在google android 官网下载: 通过这个开发包的工具才能将android jni 的C/C++的代码编译成库
android的NDK开发需要在linux下进行: 因为需要把C/C++编写的代码生成能在arm上运行的.so文件,这就需要用到交叉编译环境,而交叉编译需要在linux系统下才能完成。
备注:NDK编译步骤:
1.选择 ndk 自带的例子 hello-jni ,位于E:android-ndk-r5sampleshello-jni( 根据具体的安装位置而定 ) 。
2.运行 cygwin ,输入命令 cd /cygdrive/e/android-ndk-r5/samples/hello-jni ,进入到 E:android-ndk-r5sampleshello-jni 目录。
3.输入 $NDK/ndk-build ,执行成功后,它会自动生成一个 libs 目录,把编译生成的 .so 文件放在里面。 ($NDK是调用我们之前配置好的环境变量, ndk-build 是调用 ndk 的编译程序 )
4.此时去 hello-jni 的 libs 目录下看有没有生成的 .so 文件,如果有,ndk 就运行正常了。
❷ android ndk zip 怎么使用
解压啊!在工具中设置下ndk路径就行了!
❸ 如何在android app中使用STL库
方法:
1.在jni目录下新建Application.mk; 加入 APP_STL := stlport_static右边的值还可以换成下面几个:
system - 使用默认最小的C++运行库,这样生成的应用体积小,内存占用小,但部分功能将无法支持
stlport_static - 使用STLport作为静态库,这项是Android开发网极力推荐的
stlport_shared - STLport作为动态库,这个可能产生兼容性和部分低版本的Android固件,目前不推荐使用。
gnustl_static - 使用 GNU libstdc++ 作为静态库
默认情况下STLPORT是不支持C++异常处理和RTTI,所以不要出现 -fexceptions 或-frtti;如果真的需要,可以使用gnustl_static来支持标准C++的特性,但生成的文件体积会偏大,运行效率会低一些。
支持C++异常处理,在Application.mk中加入 LOCAL_CPPFLAGS +=-fexceptions这句,同理支持RTTI,则加入LOCAL_CPPFLAGS +=-frtti,这里再次提醒大家,第二条说的使用gnustl静态库,而不是stlport。
强制重新编译 STLPort ,在Application.mk中加入STLPORT_FORCE_REBUILD := true可以强制重新编译STLPort源码,由于一些原因可能自己需要修改下STLPort库,一般普通的开发者无需使用此项
2. 在要使用STL的cpp文件中包含相关的头文件,并且使用using namespace std;
❹ 如何用Android NDK编译FFmpeg
1、android的NDK开发需要在linux下进行: 因为需要把C/C++编写的代码生成能在arm上运行的.so文件,这就需要用到交叉编译环境,而交叉编译需要在linux系统下才能完成。
2、安装android-ndk开发包,这个开发包可以在google android 官网下载: 通过这个开发包的工具才能将android jni 的C/C++的代码编译成库
android应用程序开发环境: 包括eclipse、java、 android sdk、 adt等。
NDK编译步骤:
a.选择 ndk 自带的例子 hello-jni ,我的位于E:\android-ndk-r5\samples\hello-jni( 根据具体的安装位置而定 ) 。
b.运行 cygwin ,输入命令 cd /cygdrive/e/android-ndk-r5/samples/hello-jni ,进入到 E:\android-ndk-r5\samples\hello-jni 目录。
c.输入 $NDK/ndk-build ,执行成功后,它会自动生成一个 libs 目录,把编译生成的 .so 文件放在里面。 ($NDK是调用我们之前配置好的环境变量, ndk-build 是调用 ndk 的编译程序 )
d.此时去 hello-jni 的 libs 目录下看有没有生成的 .so 文件,如果有,ndk 就运行正常啦。
❺ Qt for Android生成的so库,在Java for Android中被调用,请问有什么思路吗
可以调用,但是不能直接调用,要通过代码目的JNI去调用,在JNI中导入头文件,通过NDK编译成功后即可。
NDK编译步骤:
1.选择 ndk 自带的例子 hello-jni ,我的位于E:\android-ndk-r5\samples\hello-jni( 根据具体的安装位置而定 ) 。
2.运行 cygwin ,输入命令 cd /cygdrive/e/android-ndk-r5/samples/hello-jni ,进入到 E:\android-ndk-r5\samples\hello-jni 目录。
3.输入 $NDK/ndk-build ,执行成功后,它会自动生成一个 libs 目录,把编译生成的 .so 文件放在里面。 ($NDK是调用我们之前配置好的环境变量, ndk-build 是调用 ndk 的编译程序 )
4.此时去 hello-jni 的 libs 目录下看有没有生成的 .so 文件,如果有,ndk 就运行正常啦。
❻ Android NDK中对STL的两种支持gnustl和stlport有什么区别
Android NDK从r5b版本开始有官方支持的STL了,有一个crystax版本早已经支持。官方的支持有两个版本一个是gnu的,一个是stlport。如果你需要在你的NDK程序中使用STL,那么需要在Application.mk文件中添加一个选项,就是APP_STL := stlport_static。 其中APP_STL的取值有以下四种: system -- 系统默认的最小支持的C++运行时库 stlport_static -- 以静态链接的方式使用stlport版本的STL stlport_shared -- 以动态链接的方式使用stlport版本的STL gnustl_static -- 以静态链接的方式使用gnu版本的STL如果你和我一样并没有使用Android.mk和Application.mk,而是使用Code::Blocks或者Visual studio 2010,那么在配置环境时,如果需要STL的支持,那么就需要注意自己要指定stl的包含路径。链接就根据需要自己链接不同的版本。请注意,stlport有静态链接和动态链接两种方式,而gnu的仅有静态链接方法。另外一个需要注意的就是官方提供的这个stlport版本不支持RTTI和异常,换言之,如果你使用了stlport版本的STL,则不能使用-fexceptions和-frtti这两个编译选项。
❼ android studio怎么设置用32位ndk
使用多少位的NDK不是由Android Studio决定的,是本身操作系统决定的。毕竟启动AS的时候,就要选择是启动studio或者studio64。
❽ android 编译好的ndk库应该放在哪个目录
可以使用的。 解析:首先Android就是Linux内核。 android应用程序开发环境: 包括eclipse、java、 android sdk、 adt等。 安装android-ndk开发包,这个开发包可以在google android 官网下载: 通过这个开发包的工具才能将android jni 的C/C++的代码编译成库 android的NDK开发需要在linux下进行: 因为需要把C/C++编写的代码生成能在arm上运行的.so文件,这就需要用到交叉编译环境,而交叉编译需要在linux系统下才能完成。 备注:NDK编译步骤: 1.选择 ndk 自带的例子 hello-jni ,位于E:\android-ndk-r5\samples\hello-jni( 根据具体的安装位置而定 ) 。 2.运行 cygwin ,输入命令 cd /cygdrive/e/android-ndk-r5/samples/hello-jni ,进入到 E:\android-ndk-r5\samples\hello-jni 目录。 3.输入 $NDK/ndk-build ,执行成功后,它会自动生成一个 libs 目录,把编译生成的 .so 文件放在里面。 ($NDK是调用我们之前配置好的环境变量, ndk-build 是调用 ndk 的编译程序 ) 4.此时去 hello-jni 的 libs 目录下看有没有生成的 .so 文件,如果有,ndk 就运行正常了。
❾ sequoyah插件后,为android配置ndk路径 怎么配置不成功
阅读前请确保你已经下载和安装了:
1、Eclipse
2、Eclipse-adt插件;Android-SDK
3、Android-NDK;cygwin
还需要进行一些准备工作:
1、下载和安装cdt插件。
可以在eclipse中使用Help->Install New Software直接 安装
插件比较大,可以只选择C/C++ Development Tools这一项安装。
2、下载和安装sequoyah插件。
注意:需要将Group Items By Category前的勾去掉,然后选择全部
现在可以进行配置了。(以下使用的android-ndk版本为r7b)
1、配置C语言的INCLUDE路径和LIB路径。
打开window菜单下的preference选项。选择C/C++,Build,environment,向其中添加:
C_INCLUDE_PATH=(Cygwin目录)\user\include;(ndk目录)\platforms\(你使用的平台)\(CPU)\usr\include
CPLUS_INCLUDE_PATH=(Cygwin目录)\user\include;(ndk目录)\platforms\(你使用的平台)\(CPU)\usr\include
LIBRARY_PATH=(Cygwin目录)\user\lib;(ndk目录)\platforms\(你使用的平台)\(CPU)\usr\lib
2、配置Android NDK路径
注意:在sequoyah插件安装后才会有这一项。
打开window菜单下的preference选项。选择Android,Native Development(本地开发)
选择你的NDK安装目录。
但是,这个插件目前仅支持ndk的r4和r5版本,更高版本会提示这个路径无效。
其实,插件只是需要这个参数向PATH中添加这个路径,但是不设置这个路径会导致插件工作不正常。
我的解决方法是,手动创建以下文件:
(NDK目录)\toolchains\arm-eabi-4.4.0\prebuilt\windows\arm-eabi-4.4.0\bin\gcc.exe
从第二级目录开始可能就是不存在的,最后的gcc.exe可以是0字节。
这样插件就配置完成了。
3、注意:需要将cygwin的bin目录添加到windows 的PATH中
现在,差不多就可以正常使用了。
新建Android工程后,右键选择Android Tools-->Add Native Support...
插件会自动创建jni文件夹一个cpp文件和Android.mk文件。
写好你的代码后,就可以直接通过Run As-->Android Application运行了。
最后,你很可能遇到如下错误信息:
Error: Cannot run program "ndk-build": Launching failed解决方法是打开工程属性,选择C/C++ Build
设置Build command为 bash (ndk目录)\ndk-build
转载
❿ android studio ndk怎么调用
android studio ndk调用过程如下:
通过jniaes案例说明调用NDK层配置过程
而我们通过底层来判断签名是否正确,如果正确则继续执行核心代码,否则退出程序,这样就可以防止别人恶意反编译,并进行二次打包。
首先去官网下载一个最新的NDK,随便放到哪都行,像我放在D:DevAndroidandroid-ndk-r10d.
(1) 新建一个项目:名称JniAes
首先在java类中添加native接口,注意写好native接口和System.loadLibrary()即可。代码如下:
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工程的如下目录:
aesapp
(2)接下来跟class文件生成相应的.h头文件,执行如下命令即可
点击"View->Tool Windows->Terminal" 即在Studio中进行终端命令行工具.执行如下命令生成c语言头文件.
javah -d jni -classpath c:
android-16android.jar;....uildintermediatesclassesdebug com.aes.jniaes.MainActivity
(3)然后将刚才的 .h文件剪切过来。在jni目录下新建一个c文件,随意取名,我的叫strk.c 。
strk.c文件,用于实现核心代码逻辑,判断包名.哈希值是否合法,如果返回1,为合法。反之,则不合法。入口方法为:
jint Java_com_aes_jniaes_MainActivity_jniCheckAPP(JNIEnv* env, jobject context,
jobject thiz)
接下来在工程的local.properties文件中添加NDK路径(上面下载好的那个NDK),类似其中的SDK路径一样,我的添加后如下:
sdk.dir=D:\Dev\Android\android-sdk-windows
ndk.dir=D:\Dev\Android\android-ndk-r10d
(4)接下来在app mole目录下的build.gradle中设置库文件名(生成的so文件名)。找到gradle文件的defaultConfig这项,在里面添加如下内容:
defaultConfig {
applicationId "com.aes.jniaes"
minSdkVersion 15
targetSdkVersion 22
versionCode 1
versionName "1.0"
ndk {
moleName "checkapp-jni" //生成的so名字
abiFilters "armeabi", "armeabi-v7a", "x86" //输出指定三种abi体系结构下的so库。目前可有可无。
}
}
(5)最后就是添加静态初始化loadLibrary代码,添加如下:
static {
System.loadLibrary("checkapp-jni"); //so文件的名字
}
编译出来的so文件在aesappuildintermediates dkdebuglib目录下
那么如何将编译好的so文件进行使用,可以通过如下方式:
二 .引用so文件
(1).在“src/main”目录中新建名为“jniLibs”的目录;
(2).将so文件复制、粘贴到“jniLibs”目录内。