Я хочу создать приложение для Android, которое выполняет арифметические функции, такие как сложение, вычитание, умножение, деление.
Я знаю, что это простое приложение, но чтобы сделать его немного сложным, я написал его на C, оно называется "ArithmeticOperations.c".
Теперь, когда я хотел бы включить этот файл .c в качестве библиотеки в мой проект Android.
Я пытался:
- с помощью Android NDK, это сработало, но я должен предоставить код пользователю
- Я создал файл .so с помощью Android NDK отдельно и включил в папку libs / armeabi тестового приложения; и он показал Unsatisfiedlinkerror Exception
- используя android NDK, я создал простой проект android и преобразовал его в jar, чтобы его можно было импортировать в другое приложение, и он тоже не работал.
Как я могу предоставить этот файл .c в качестве библиотеки для проекта Android?
first.c
int add(int x, int y)
{
return x+y;
}
int sub(int x, int y)
{
return x-y;
}
int mul(int x, int y)
{
return x*y;
}
int div(int x, int y)
{
return x/y;
}
**second.c**
#include "first.h"
#include <jni.h>
jint
Java_bri_ndk_sample_ArithmeticOperations_add( JNIEnv* env,
jobject this,
jint x,
jint y )
{
return add(x, y);
}
jint
Java_bri_ndk_sample_ArithmeticOperations_sub( JNIEnv* env,
jobject this,
jint x,
jint y )
{
return sub(x, y);
}
jint
Java_bri_ndk_sample_ArithmeticOperations_mul( JNIEnv* env,
jobject this,
jint x,
jint y )
{
return mul(x, y);
}
jint
Java_bri_ndk_sample_ArithmeticOperations_div( JNIEnv* env,
jobject this,
jint x,
jint y )
{
return div(x, y);
}
first.h
extern int add(int x, int y);
extern int mul(int x, int y);
extern int sub(int x, int y);
extern int div(int x, int y);
Активность Android
package bri.sample;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class SampleTestActivity extends Activity {
/** Called when the activity is first created. */
static{
try{
System.loadLibrary("twolib-second");
}catch (Exception e){
e.printStackTrace();
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final EditText xVal = (EditText)findViewById(R.id.editText1);
final EditText yVal = (EditText)findViewById(R.id.editText2);
final TextView result = (TextView)findViewById(R.id.textView1);
//final Arithmetic al = new Arithmetic();
Button b1 = (Button) findViewById(R.id.button1);
b1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
int x = Integer.parseInt(xVal.getText().toString());
int y = Integer.parseInt(yVal.getText().toString());
Integer z = add(x, y);
result.setText(z.toString());
}
});
Button sub = (Button) findViewById(R.id.button2);
sub.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
int x = Integer.parseInt(xVal.getText().toString());
int y = Integer.parseInt(yVal.getText().toString());
Integer z = sub(x, y);
result.setText(z.toString());
}
});
Button mul = (Button) findViewById(R.id.button3);
mul.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
int x = Integer.parseInt(xVal.getText().toString());
int y = Integer.parseInt(yVal.getText().toString());
Integer z = mul(x, y);
result.setText(z.toString());
}
});
Button div = (Button) findViewById(R.id.button4);
div.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
int x = Integer.parseInt(xVal.getText().toString());
int y = Integer.parseInt(yVal.getText().toString());
Integer z = div(x, y);
result.setText(z.toString());
}
});
}
public native int add(int x, int y);
public native int sub(int x, int y);
public native int mul(int x, int y);
public native int div(int x, int y);
}
Теперь, когда я хочу этот файл C как библиотеку для Android
Это также можно рассматривать как
- добавление .so файла в проект Android
- добавление jar-файла, содержащего .so-файл, в проект Android