足し算、引き算、掛け算、割り算などの算術関数を実行する Android アプリケーションを作成します。
これが単純なアプリケーションであることはわかっていますが、少し複雑にするために、「ArithmeticOperations.c」と呼ばれる C で記述しました。
この .c ファイルをライブラリとして Android プロジェクトに含めたいと思います。
私は試した:
- Android NDKを使用するとうまくいきましたが、ユーザーにコードを提供する必要があります
- Android NDK を使用して .so ファイルを個別に作成し、テスト アプリケーションの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);
}
最初の.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 プロジェクトに追加する
- .so ファイルを含む jar ファイルを Android プロジェクトに追加する