AS运用NDK编译及调用
2016-01-06 16:44
246 查看
环境
android studio 2.0安装
File>Other Settings>Default Project Structure…注意,这里有可能你会发现你的路经不能点击,那是因为被墙了,破墙下载
配置
build.gradlebuildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle-experimental:0.4.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { jcenter() } }
app/build.gradle
注意自己写时,要添加
=、
.apiLevel,写法不一样
apply plugin: 'com.android.model.application' model { android { compileSdkVersion = 23 buildToolsVersion = "23.0.2" defaultConfig.with { applicationId = "com.xuie.jnidemo" minSdkVersion.apiLevel = 15 targetSdkVersion.apiLevel = 23 versionCode = 1 versionName = "1.0" } } compileOptions.with { sourceCompatibility=JavaVersion.VERSION_1_7 targetCompatibility=JavaVersion.VERSION_1_7 } /* * native build settings */ android.ndk { moduleName = "hello-jni" /* * Other ndk flags configurable here are * cppFlags.add("-fno-rtti") * cppFlags.add("-fno-exceptions") * ldLibs.addAll(["android", "log"]) * stl = "system" */ } android.buildTypes { release { minifyEnabled = false proguardFiles.add(file('proguard-rules.txt')) } } android.productFlavors { // for detailed abiFilter descriptions, refer to "Supported ABIs" @ // https://developer.android.com/ndk/guides/abis.html#sa create("arm") { ndk.abiFilters.add("armeabi") } create("arm7") { ndk.abiFilters.add("armeabi-v7a") } create("arm8") { ndk.abiFilters.add("arm64-v8a") } create("x86") { ndk.abiFilters.add("x86") } create("x86-64") { ndk.abiFilters.add("x86_64") } create("mips") { ndk.abiFilters.add("mips") } create("mips-64") { ndk.abiFilters.add("mips64") } // To include all cpu architectures, leaves abiFilters empty create("all") } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.1.1' }
编译
新建JniInterface.java这里直接写出函数添加了
native关键字,用补全,就会在
hello-jni.c里自动生成函数名称,比以前用javah有质有飞跃。。。
public class JniInterface { public native String stringFromJNI(); static { System.loadLibrary("hello-jni"); } }
自身调用
JniInterface jniInterface = new JniInterface(); ((TextView)findViewById(R.id.tv)).setText(jniInterface.stringFromJNI());
他人调用
我们本身NDK调用,是不希望自己的工程里出现C/C++,那就直接可以调用
.so,我以
armeabi-v7a架构为例进行调用(因为我手机是这个架构),拷贝目录
build/intermediates/binaries/debug/all/lib/armeabi-v7a/下的
libhello-jni.so到所用工程
main/jniLibs/armeabi-v7a下,调用时java目录下同样需要添加
JniInterface.java,注意包名要根原来一模一样,然后再调用,实际项目中要将所有架构下的
.so都拷贝进去
JniInterface jniInterface = new JniInterface(); ((TextView)findViewById(R.id.tv)).setText("[Use]" + jniInterface.stringFromJNI());
参考
https://github.com/googlesamples/android-ndk源码下载
相关文章推荐
- 查看磁盘使用情况 -- df
- 要读的社科书籍
- sencha touch的开源插件和例子
- APP切图详细规范终极指南
- 杂题集合
- cJSON学习
- Centos设置程序开机自启的方法
- PUTTY无法远程连接服务器故障解决
- hdu--5605
- 云计算
- halcon学习备忘一(循环读图、多窗口显图、读写硬盘里图)
- linux wheel组
- Fresco 图片加载帮助类
- html5 canvas 详细使用教程
- Python下opencv使用笔记系列
- 做过的DP集合
- StringUtil
- java中反射机制的演示
- MySQL SQL优化案例:相关子查询(dependent subquery)优化
- UML中关联,聚合,组合的区别及C++实现