Ich bin eine Android-Anwendung erstellen, die die arithmetischen Funktionen wie Addition, Subtraktion, Multiplikation, Division durchführt.Android-Bibliothek/Hinzufügen einer nativen C-Datei als Bibliothek zu Android-Projekt
ich seine eine einfache Anwendung kennen, aber es ein wenig kompliziert zu machen, ich habe es in C geschrieben (dh) ArithmeticOperations.c
Nun, da ich diese C-Datei als ein einschließen möchte Bibliothek zu meinem Android-Projekt.
versuchte ich
- mit Android NDK, seine gearbeitet, aber ich habe den Code für den Benutzer zur Verfügung zu stellen
- i eine .so-Datei separat Android NDK mit erstellt und in den libs/armeabi enthalten Ordner der Testanwendung; und es zeigte Unatiefiedlinkerror Ausnahme
- mit Android NDK, baute ich ein einfaches Android-Projekt und in Jar, so dass es in andere Anwendung importiert werden kann, und es hat nicht funktioniert auch.
Bitte helfen Sie mir, dass ich diese C-Datei als Bibliothek zu einem Android-Projekt zur Verfügung stellen kann
**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);
}
Nun, da ich diese c-Datei als Bibliothek will auch
kann dies auf Android betrachtet werden, in wie 1. Hinzufügen .so Datei zu android Projekt 2. eine jAR-Datei hinzufügen, die eine .so-Datei auf einem android-Projekt enthält
Haben Sie versucht, Proben/Hallo-jni Beispiel, das mit Android NDK kommt? –
@ MārtiņšMožeiko, +1 für die Nennung von Proben, sie sind wirklich hilfreich ... – aProgrammer
@ MārtiņšMožeiko Ich habe das erwähnte Beispiel ausprobiert. es funktionierte. Sache ist, dass ich meine Bibliothek und nicht meine Quelle verteilen möchte. NDk erfordert, dass die Quelle verteilt wird. – Britto