这些目录下,每一个下面都会有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());
}
}运行看看,结果发现:
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分,由于我实在没下载币了)