Ошибка: невозможно получить доступ к android.view.SurfaceView - PullRequest
1 голос
/ 27 октября 2011

Я следую руководству для начинающих с Android NDK.

И я немного застрял.Возобновленная проблема: у меня есть класс Java с некоторыми нативными методами.Когда я пытаюсь создать файл заголовка C, используя javah, введите:

javah -jni com.droidonfire.DroidOnFire

И он возвращает

Error: cannot access android.view.SurfaceView
class file for android.view.SurfaceView not found

В чем проблема?

Класс DroidOnFire:

public class DroidOnFire extends SurfaceView implements SurfaceHolder.Callback{

private boolean mEnabled;
private Paint mTextPaint;
private Paint mTextOffPaint;
private Paint mCanvasPaint;
private Bitmap  mEffect;
private Canvas mEffectCanvas;

public DroidOnFire(Context context, AttributeSet attrs) {
    super(context, attrs);
    getHolder().addCallback(this);
    mEnabled= false;
    initialize();
}

public void surfaceChanged(SurfaceHolder holder, int format, int width,
        int height) {
    mEffect= Bitmap.createBitmap(width,200,Bitmap.Config.ARGB_8888);
    mEffectCanvas= new Canvas(mEffect);
}

public void surfaceCreated(SurfaceHolder holder) {

    setKeepScreenOn(true);
    setWillNotDraw(false);
    mTextPaint= new Paint();
    mTextPaint.setTextSize(32.0f);
    mTextPaint.setColor(Color.WHITE);
    mTextOffPaint = new Paint();
    mTextOffPaint.setColor(Color.BLACK);
    mTextOffPaint.setTextSize(32.0f);
    mCanvasPaint= new Paint();
    mEnabled= true;

}

public void surfaceDestroyed(SurfaceHolder holder) {
    mEnabled= false;
    mEffect.recycle();
    mEffect=null;
    mEffectCanvas=null;

}

@Override
public void draw(Canvas canvas) {
    if (mEnabled){
        String lMessage=getMessage();
        mEffectCanvas.drawText(lMessage, 0, 32, mTextOffPaint);
        updateFire(mEffect);
        canvas.drawBitmap(mEffect, 0, 0,mCanvasPaint);
        canvas.drawText(lMessage, 0, 32, mTextPaint);
        initialize();
    }
}

private native void initialize();
private native String getMessage();
private native void updateFire(Bitmap pBitmap);
static {
    System.loadLibrary("fire");
}

}

1 Ответ

2 голосов
/ 30 октября 2011

Вам нужно указать аргумент -classpath при вызове javah, см. Документы здесь .

classpath path
    Specifies the path javah uses to look up classes. Overrides the default or the CLASSPATH environment variable if it is set. Directories are separated by semi-colons. Thus the general format for path is:
       .;<your_path>
    For example:
       .;C:\users\dac\classes;C:\tools\java\classes

В вашем случае вам нужно добавить android.jar в ваш путь к классам.

Есть похожий вопрос с ответом здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...