衡阳微信网站开发,丽水房产网站建设,个人艺术作品网站建设策划书,wordpress主题文章列表的最近回头复习了一下android 的jni调用#xff0c;却发现按以前的方法调用失败#xff0c;一怒之下就重新摸索#xff0c;碰了几次壁#xff0c;发现网上好多教程都不能成功调用#xff0c;于是记录一下现在AS版本成功好用的调用方法。 这里设定你的ndk已经下载并且设置没问…最近回头复习了一下android 的jni调用却发现按以前的方法调用失败一怒之下就重新摸索碰了几次壁发现网上好多教程都不能成功调用于是记录一下现在AS版本成功好用的调用方法。 这里设定你的ndk已经下载并且设置没问题.源码链接http://download.csdn.net/download/yeyuehei/10149844 当前android studio 版本3.0.1步骤如下 1.设置jni -h 和ndk -build的快捷方式 2.java代码写c回调的方法及grade的配置 3.快捷键jni -h生成头文件.h 4.建立c资源文件和mk文件及c函数的调用 5.快捷键ndk-build生成三种.so库文件 以上是步骤具体如下 1.置jni -h 和ndk -build的快捷方式 新建项目成功后点击File,然后找到Settings...点击找到External Tools,然后如下图添加java -jni快捷键 Tool settings中三行可以直接copy上去$JDKPath$\bin\javah.exe-classpath . -jni -d $ModuleFileDir$/src/main/jni $FileClass$$ModuleFileDir$\src\main\java 添加ndk-build快捷键如下图 Tool settings 的两行 F:\software\androidstudio\sdk\ndk-bundle\ndk-build.cmd根据自己的ndk目录设置这个路径 $ModuleFileDir$\src\main直接copy 添加成功后随便右键点击一个文件找到External Tools就会发现刚才添加的快捷键 2.java代码写c回调的方法及grade的配置 新建一个class 名称随便这里是JniKet,如下 打开build.gradle 添加ndk和 sourceSets如下图 注意 1.ndk中的moduleName要和上图中的libName一致 2.sourceSets中的两行都要加上缺一不可 3.图中红框的代码会在图下面出现。。。 ndk {moduleName JniDemoabiFilters armeabi, armeabi-v7a, x86//cpu的类型
}sourceSets {main {jniLibs.srcDirs src/main/libsjni.srcDirs []}
} 以上配置就够了其他都不需要 3.快捷键jni -h生成头文件.h建立c资源文件和mk文件及c函数的调用 选中刚才建的class(这里是JniKet),右键找到External Tools选中jni -h,然后会在main下成jni文件夹里面包含生成的头文件名称格式包名类名.h 打开.h文件如下图 右键-new-c/c source file-type选.c(名称随便,这里是TestJni)然后copy上图红框中的两个函数到新建的.c文件 为了验证 能调用c方法再建立一个c方法的头文件和资源文件同一个文件夹下 test.h: #include string.h#include jni.hint addValue(int x, int y); test.c #include test.h
int addValue(int x, int y){return x*10y*10;
}最后将test.c引入刚才建立的jni资源文件中这里是TestJni)最后TestJni如下 #include lifaair_edifier_com_myjni_JniKet.h
#include test.cJNIEXPORT jstring JNICALL Java_lifaair_edifier_com_myjni_JniKet_testJni(JNIEnv *env, jclass jc){return (*env)-NewStringUTF(env,fuck your father,langfei laozis time);}
JNIEXPORT jint JNICALL Java_lifaair_edifier_com_myjni_JniKet_getValue(JNIEnv *env, jclass js ){return addValue(10, 8);} 当然别忘了mk文件两个 名称Android.mk 内容 LOCAL_PATH : $(call my-dir)
include $(CLEAR_VARS) LOCAL_MODULE : JniDemo
LOCAL_C_INCLUDES : lifaair_edifier_com_myjni_JniKet.h
LOCAL_SRC_FILES : TestJni.cLOCAL_LDLIBS : -llog include $(BUILD_SHARED_LIBRARY) 名称Application.mk 内容 APP_ABI : armeabi armeabi-v7a x86 5.快捷键ndk-build生成三种.so库文件 右键点击Jniket步骤2中生成的 java class,右键找到External Tools选中ndk-build,就会生成三种.so文件如下图 当然还有最重要的调用 public class MainActivity extends AppCompatActivity {Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);TextView tv_hello findViewById(R.id.tv_hello);tv_hello.setText(this message from jni,its value is:\nJniKet.testJni()\n getValue():JniKet.getValue()); }} 编译运行成功运行如下图 转自https://blog.csdn.net/yeyuehei/article/details/78741753