怎样在小程序里实现标题的更改
1088
2022-10-14
一个简单的JNI程序
NdkSoDemo
写一个简单的JNI程序
一、写在前面的话
1、AndroidStudio环境:
Android Studio 3.1.4Build #AI-173.4907809, built on July 24, 2018JRE: 1.8.0_152-release-1024-b01 x86_64JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.oMac OS X 10.13.6
2、-并配置好NDK (1)-NDK: 进入AndroidStudio的Preference的Android SDK的SDK tools, 勾选并-CMake、LLDB、NDK。 (2)在local.properties文件配置: ndk.dir=/Users/wanggang/Library/Android/sdk/ndk-bundle sdk.dir=/Users/wanggang/Library/Android/sdk
二、开始写一个简单的JNI程序
1、新建一个类JNIUtils
2、在主module的build.gradle文件里defaultConfig中配置ndk。
defaultConfig { //... ndk { moduleName "jniutil"//编译出so的名字 abiFilters 'x86', 'armeabi-v7a', 'x86_64' //输出指定abi体系结构下的so库。 } }
3、针对步骤1中的类JNIUtils,我们再执行Build-Make Project命令,完成后便生成字节码文件JNIUtils.class。 在NdkSoDemo/app/build/intermediates/classes/debug/com/wanggang/www/ndksodemo/JNIUtils.class中。
4、根据JNIUtils.class生成.h文件 (1)方法一 在AndroidStudio的terminal中执行:cd app/src/main/, 然后执行javah -d jni -classpath 编译后的class文件的绝对路径: javah -d jni -classpath /Users/wanggang/now/code/eclipse-workspace/NdkSoDemo/app/build/intermediates/classes/debug com.wanggang.ndksodemo.JNIUtils 结果在app/src/main/jni/目录下生成.h文件: com_wanggang_www_ndksodemo_JNIUtils.h (2)方法二 在AndroidStudio的terminal中执行:cd app/build/intermediates/classes/debug/, 然后执行javah com.wanggang.ndksodemo.JNIUtils, 结果在app/build/intermediates/classes/debug/目录下生成.h文件: com_wanggang_www_ndksodemo_JNIUtils.h 最后将该.h文件copy到app/src/main/jni/目录下。
5、编写.c文件(jniutil.c) 在app/src/main/jni/目录下创建jniutil.c文件,并实现其方法:
#include "com_wanggang_www_ndksodemo_JNIUtils.h"JNIEXPORT jstring JNICALL Java_com_wanggang_www_ndksodemo_JNIUtils_test (JNIEnv *env, jobject obj) { return (*env)->NewStringUTF(env, "jni调用成功");}
6、在MainActivity中调用
public class MainActivity extends AppCompatActivity { private TextView ndk_txt; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ndk_txt = findViewById(R.id.ndk_txt); ndk_txt.setText(new JNIUtils().test()); }}
7、创建编译文件Android.mk
在app/src/main/jni/目录下创建Android.mk文件:LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := jniutilLOCAL_SRC_FILES := jniutil.cinclude $(BUILD_SHARED_LIBRARY)
8、在主module的build.gradle文件里android中配置ndkBuild路径:
externalNativeBuild{ ndkBuild{ path file("src/main/jni/Android.mk") } }
三、如何在AndroidStudio中输出JNI log?
1、在app/build.gradle中添加ldLibs "log"
android { defaultConfig { ndk { ldLibs "log" moduleName "jniutil"//编译出so的名字 abiFilters 'x86', 'armeabi-v7a', 'x86_64' //输出指定abi体系结构下的so库。 } }}
2、在Android.mk中添加:
LOCAL_LDLIBS += -L$(SYSROOT)/usr/lib -llog
3、添加头文件iqiyi_child_log.h
//// Created by wanggang on 2018/9/8.//#ifndef NDKSODEMO_IQIYI_CHILD_LOG_H#define NDKSODEMO_IQIYI_CHILD_LOG_H#ifdef __cplusplusextern "C" {#endif#include
4、使用JNI LOG
#include "com_wanggang_www_ndksodemo_JNIUtils.h"#include "iqiyi_child_log.h"JNIEXPORT jstring JNICALL Java_com_wanggang_www_ndksodemo_JNIUtils_test (JNIEnv *env, jobject obj) { LOGI("jni log"); return (*env)->NewStringUTF(env, "jni demo --- invoke success");}
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~