我要創建一個Android應用程序,執行加法,減法,乘法,除法等算術函數。Android庫/添加一個本地C文件作爲庫到Android項目
我知道它的一個簡單的應用程序,但要使它有點複雜,我在C. (IE)ArithmeticOperations.c寫它現在
,我想包括這個.c文件作爲庫到我的android項目。
我試圖
- 採用了android NDK,它的工作,但我必須提供的代碼
- 我分別使用的Android NDK創建的.so文件的用戶,並列入庫/ armeabi測試應用程序的文件夾;它顯示Unsatisfiedlinkerror異常
- 使用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 Activity**
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
這也可以被看作爲 1.將.so文件添加到Android項目 2.將包含.so文件的jar文件添加到Android項目中
您是否嘗試過查看Android NDK附帶的samples/hello-jni示例? – 2012-03-28 14:57:21
@MārtiņšMožeiko,提供樣品+1,他們真的有幫助... – aProgrammer 2012-03-29 05:37:57
@MārtiņšMožeiko我已經嘗試過提到的樣品。有效。事情是我想分發我的圖書館,而不是我的來源。 NDk要求源碼分發。 – Britto 2012-03-29 05:48:29