android studio jni so,Android studio JNI 制做SO文件,在其余项目中调用

本文讲述了在Android应用中加载和调用本地库(so文件)时遇到的问题及解决方法。开发者遇到 UnsatisfiedLinkError 错误,原因是Java代码中的方法名必须与C代码中的方法名完全匹配。解决方案包括调整包名和类名以匹配方法名,并在正确的位置加载库。此外,代码中的native方法虽然报红但不影响编译和运行。
摘要由CSDN通过智能技术生成

f88f64cb6c9eb92a41370906a0a3b77f.png

这些目录下,每一个下面都会有so文件。区别在于不一样设备,会调用不一样包下面的文件。(这点我也不清楚,不浅学误人)

2、新建项目,将armeabi连同下面的so文件,放入项目的libs下。

java代码中调用。你能够把代码写成这样:

package com.example.administrator.myapplication;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.widget.TextView;

public class MainActivity2 extends AppCompatActivity {

private TextView tv;

static {

System.loadLibrary("native-lib");

}

public native String stringFromJNI();

public native int getNum();

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

tv =(TextView)findViewById(R.id.textView);

// MainActivity mc = new MainActivity();

// mc.put();

tv.setText(""+getNum());

}

}运行看看,结果发现:

1af479fbff37829a72beef84216014ba.png

java.lang.UnsatisfiedLinkError: No implementation found for....

我完了一早上看这是个啥问题,最后才得出结论,

调用这个方法,包名、类名必需要和C代码中方法一致,不然调不到。

因此,我新建了个包,建了个类。在另一个类中调用。

package com.example.administrator.myapplication;

/**

* Created by fireMorning on 2017/3/2 0002.

*/

public class MainActivity {

public native String stringFromJNI();

public native int getNum();

public void put(){

System.out.println("firefox++++++++++++"+getNum());

}

public String get(){

return stringFromJNI();

}

}固然,别好奇我这个命名,只是为了说明问题。这不是activity,而是普通类。而在activity中,

package com.example.administrator.myapplication;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.widget.TextView;

public class MainActivity2 extends AppCompatActivity {

private TextView tv;

static {

System.loadLibrary("native-lib");

}

public native String stringFromJNI();

public native int getNum();

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

tv =(TextView)findViewById(R.id.textView);

MainActivity mc = new MainActivity();

mc.put();

tv.setText(""+mc.get());

}

}

另外,public native  String stringFromJNI();

public native int getNum();

这两句代码报红,别理他。只要你本身确认无误就能够直接编译了。

附上代码:点击下载

(真很差意思,这么个东西,竟然要1分,由于我实在没下载币了)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值