AndroidStudio调用第三方so库函数

前言

我在一个工程中生成了so文件,在另外一个工程中调用该so文件中的函数。
环境 :androidstudio4+ubuntu20+ida
借鉴文章:https://blog.csdn.net/u013347784/article/details/97106072


生成so文件

在androidstudio中生成默认的NDK并添加一个自己的方法
AndroidStudio调用第三方so库函数_第1张图片
生成apk文件,用apktool解压出so文件

用ida打开发现其中的函数
AndroidStudio调用第三方so库函数_第2张图片


调用so函数

  1. 创建一个不包含ndk工程的项目
  2. 创建jniibs文件,将so库拷贝进去如图所示
    AndroidStudio调用第三方so库函数_第3张图片
    3.创建一个同名的activity,该名已经在ida中暴露出来比如 Java_com_example_nativetest_MainActivity_myJNI,创建的包名就是 com.example.nativetest。activity的名字就是MainActivity,在新建的activity下加载so文件,并声明native方法如图所示
    AndroidStudio调用第三方so库函数_第4张图片
    mainactivity的代码
package com.example.nativetest;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;

import com.example.jnitest.R;

public class MainActivity  extends AppCompatActivity {
    static {
        System.load("libnative-lib.so");
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        TextView tv = findViewById(R.id.tv);
        Button jni_btn =findViewById(R.id.jni_btn);
        jni_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                tv.setText(myJNI());
            }
        });

    }
    public native String myJNI();
}

就可以了。

你可能感兴趣的:(安卓)