android jni使用

1、配置添加ndk,然后配置一下环境变量



2、配置build.gradle,在defaultConfig中添加
//配置ndk信息
ndk{
    moduleName  "JniTest"
    abiFilters  "armeabi" , "armeabi-v7a" , "x86"
}
//配置so文件存放位置
sourceSets. main  {
    jni.srcDirs = []
    jniLibs.srcDir  'src/main/libs'
}

3、main下面添加jni文件

配置Application.mk文件:APP_ABP是指要添加那些,现在全部添加
APP_CFLAGS += -Wno-error=format-security
APP_ABI := armeabi arm64-v8a armeabi-v7a mips mips64 x86 x86_64

配置Android.mk:LOCAL_MODULE的名字要跟代码里写的一样
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE    := JniTest
LOCAL_SRC_FILES := main.c

include $(BUILD_SHARED_LIBRARY)

写main.c
#include  "com_example_a550211_myapplication_MainActivity.h"
JNIEXPORT jstring JNICALL  Java_com_example_a550211_myapplication_MainActivity_getStringFromNative (JNIEnv * env jobject obj){
  return  (*env)->NewStringUTF(env , "ffffffff" ) ;
}

com_example_a550211_myapplication_MainActivity.h  这里的名字需要跟包名一样,然后加上在哪个activity用
#include <jni.h>
#ifndef  _Included_com_example_a550211_myapplication_MainActivity
#define  _Included_com_example_a550211_myapplication_MainActivity
#ifdef  _cplusplus

extern  "C"  {
#endif
/*com.example.a550211.myapplication

 * Class:     com_example_jnic_MainActivity
 * Method:    getStringFromNative
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL  java_com_example_a550211_myapplication_MainActivity_getStringFromNative (JNIEnv * env jobject* obj){
  return  (*env)->NewStringUTF(env , "fffffff!" ) ;
}
#ifdef  __cplusplus
}
#endif
#endif
java_com_example_a550211_myapplication_MainActivity_getStringFromNative ,包名+activity+方法名
还需要注意的是如果这里的内容修改了,一定要重新生成libs文件否则不会生效

4、so包生成,先进到main目录下,然后执行ndk-build命令就可以更新或者自动生成了



5、代码中调用,然后就可以实现了
public class  MainActivity  extends  AppCompatActivity {

    static  {
        System. loadLibrary ( "JniTest" ) ;
    }
    public native  String  getStringFromNative () ;

    private  EditText  etTest ;

    @Override
    protected void  onCreate (Bundle savedInstanceState) {
        super .onCreate(savedInstanceState) ;
        setContentView(R.layout. activity_main ) ;

        initView() ;
        Log. e ( "nsc" , "getStringFromNative()=" +getStringFromNative()) ;
    }






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值