2011-10-27 105 views
1

我正在按照Android NDK初學者的指南。錯誤:無法訪問android.view.SurfaceView

而我有點卡住了。恢復的問題是:我有一個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"); 
} 

}

回答

2

你需要調用JAVAH時指定-classpath參數,請參閱該文檔here

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添加到你的類路徑。

還有一個類似的問題與答案here