ラベル Android の投稿を表示しています。 すべての投稿を表示
ラベル Android の投稿を表示しています。 すべての投稿を表示

2012年2月20日月曜日

インテントの使用


インテントの使用例です。

下記はTestIntentActivity.javaです。


import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;

public class TestIntentActivity extends Activity implements OnClickListener {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
     
        LinearLayout linearLayout = new LinearLayout(this);
     
        TextView textView = new TextView(this);
        textView.setText("トップアクティビティ");
     
        Button button = new Button(this);
        button.setWidth(200);
        button.setHeight(200);
        button.setText("2つ目のアクティビティへ");
        button.setOnClickListener(this);
     
        linearLayout.addView(textView);
        linearLayout.addView(button);
        setContentView(linearLayout);
    }

@Override
public void onClick(View v) {
Intent intent = new Intent(this, Activity01.class);
startActivity(intent);
}
}



下記はActivity01.javaです。



import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;

public class Activity01 extends Activity implements OnClickListener{

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

LinearLayout linearLayout = new LinearLayout(this);
        
        TextView textView = new TextView(this);
        textView.setText("2つ目のアクティビティ");
        
        Button button = new Button(this);
        button.setWidth(200);
        button.setHeight(200);
        button.setText("トップアクティビティへ");
        button.setOnClickListener(this);
        
        linearLayout.addView(textView);
        linearLayout.addView(button);
        setContentView(linearLayout);
}

@Override
public void onClick(View v) {
Intent intent = new Intent(this, TestIntentActivity.class);
startActivity(intent);
}
}


下記はAndroidManifest.xmlです。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.sample.intent"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="7" />

    <application
        android:icon="@drawable/icon"
        android:label="@string/app_name" >
        <activity
            android:label="@string/app_name"
            android:name=".TestIntentActivity"
android:launchMode="singleInstance">


            <intent-filter >
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
        </activity>
        
        <activity android:name="Activity01"  android:launchMode="singleInstance"> </activity>


            
    </application>

</manifest>


2012年2月16日木曜日

SurfaceViewを使ったアニメーション


package com.sample.surface.test;

import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class SurfaceViewTest01Activity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

AnimationSurfaceView surfaceView;
surfaceView = new AnimationSurfaceView(this);
setContentView(surfaceView);

}


/**
*
* SurfaceViewクラス
* アニメーションを実行する。
*/
public class AnimationSurfaceView extends SurfaceView
implements Runnable, SurfaceHolder.Callback {

static final int SIZE_X = 30;
static final int SIZE_Y = 30;

int positionX = 0;
int positionY = 0;

int screenWidth;
int screenHeight;

SurfaceHolder surfaceHolder;
Thread thread;

public AnimationSurfaceView(Context context) {
super(context);
surfaceHolder = getHolder();
surfaceHolder.addCallback(this);
}

@Override
public void run() {

Canvas canvas = null;
Paint paintBlue  = new Paint();
Paint paintWhite = new Paint();

paintWhite.setStyle(Style.FILL);
paintWhite.setColor(Color.WHITE);

paintBlue.setStyle(Style.FILL);
paintBlue.setColor(Color.BLUE);


while(thread != null){

try{
canvas = surfaceHolder.lockCanvas();

canvas.drawRect(//背景
0,
0,
screenWidth, screenHeight,
paintWhite);

canvas.drawRect(//平行移動する四角形
positionX,
positionY,
positionX + SIZE_X,
positionY + SIZE_Y,
paintBlue);

positionX += 1;//x移動
positionY += 1;//y移動

surfaceHolder.unlockCanvasAndPost(canvas);

}
catch(Exception e){}
}
}

@Override
public void surfaceChanged(
SurfaceHolder holder,
int format,
int width,
int height) {
screenWidth = width;
screenHeight = height;
}

@Override
public void surfaceCreated(SurfaceHolder holder) {
thread = new Thread(this);
thread.start();
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
thread = null;
}
}
}

Androidで簡易アニメーション


OpenGLやSurfaceViewを使わずに、簡単にアニメーションさせるにはTranslateAnimationやRotateAnimationを使います。
ここから下はサンプルソースです。


package com.sample.animation;//ここは各自変更して下さい

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.animation.RotateAnimation;
import android.view.animation.TranslateAnimation;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.TextView;

public class AnimationTestActivity extends Activity {//ここも各自変更して下さい
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
     
        //背景になる緑色のレイアウト
        LinearLayout greenLinearLayout = new LinearLayout(this);
        //緑色に設定
        greenLinearLayout.setBackgroundColor(Color.GREEN);
     

        //平行移動するレイアウト
        LinearLayout redLinearLayout = new LinearLayout(this);
        //赤色に設定
        redLinearLayout.setBackgroundColor(Color.RED);
        //横幅、縦幅
        redLinearLayout.setLayoutParams(new LayoutParams(300, 300));


        //アニメーションを設定
        TranslateAnimation redAnimation =
            new TranslateAnimation(100, 100, 0, 330);//x始点、x終点、y始点、y終点
        //アニメーションする時間 4000ミリ秒 = 4秒間アニメーションする
        redAnimation.setDuration(4000);
        //レイアウトにアニメーションを設定
        redLinearLayout.setAnimation(redAnimation);

     
        //回転するビュー
        TextView blueView = new TextView(this);
        //横幅、縦幅
        blueView.setLayoutParams(new LayoutParams(150, 150));
        //青色に設定
        blueView.setBackgroundColor(Color.BLUE);
        blueView.setText("回転移動");
     
        //開始角度、終了角度、中心点x、中心点y
        RotateAnimation blueAnimation = new RotateAnimation(0, 360, 150, 150);
        //アニメーションする時間 4000ミリ秒 = 4秒間アニメーションする
        blueAnimation.setDuration(4000);
        //ビューにアニメーションを設定
        blueView.setAnimation(blueAnimation);

        //ビューの親子関係を設定。
        //アクティビティに親の緑色レイアウトを設定
        setContentView(greenLinearLayout);
        //緑色レイアウトに子の赤色レイアウトを設定
        greenLinearLayout.addView(redLinearLayout);
        //赤色レイアウトに孫青色ビューを設定
        redLinearLayout.addView(blueView);
    }
}




2011年5月18日水曜日

OpenGLES入門 その3 テクスチャの表示

今回はテクスチャを表示させます。
今回は表示させる画像にこのimage.pngを使用します。


そしてOpenGL入門その2で使用したソースコードを流用します。

MyApplication.javaはそのままで、Renderer.javaとScene.javaの中身を少し変更します。

■Renderer.java■
package test.sample;

import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;

import android.app.Activity;
import android.opengl.GLSurfaceView;
import android.view.Display;

public class GLRenderer implements GLSurfaceView.Renderer {

 private Scene mScene;
 private boolean mOnce = true;
 private Activity mActivity;
 public GLRenderer(Activity activity, Display display) {
  mScene = new Scene(display);
  mActivity = activity;
 }

 @Override
 public void onDrawFrame(GL10 gl) {//毎フレーム呼ばれるメインループ

  if (mOnce) {
   mScene.setTexture(gl, mActivity.getResources().openRawResource(R.drawable.image));
   mOnce = false;
  }
  mScene.draw(gl);
 }

 @Override
 public void onSurfaceChanged(GL10 arg0, int arg1, int arg2) {
 }

 @Override
 public void onSurfaceCreated(GL10 gl, EGLConfig config) {
 }
}

■Scene.java■
package test.sample;

import java.io.IOException;
import java.io.InputStream;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;

import javax.microedition.khronos.opengles.GL10;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.opengl.GLU;
import android.opengl.GLUtils;
import android.view.Display;
import android.view.MotionEvent;
import android.view.View;

public class Scene implements View.OnTouchListener{

 private FloatBuffer vertexBuffer;
 private FloatBuffer textureBuffer;


 private int mTextureNumber;
 private int mWidth;
 private int mHeight;

 public Scene(Display display) {
  mWidth = display.getWidth();
  mHeight = display.getHeight();

  float x = 0.0f;
  float y = 0.0f;
  float z = 0.0f;
  float sizeX = 10.0f;
  float sizeY = 10.0f;
  float sizeZ = 0.0f;
  float[] vertex = {
    //左側の三角形
    x + sizeX, y + sizeY, z + sizeZ,//右下
    x - sizeX, y - sizeY, z + sizeZ,//左上
    x - sizeX, y + sizeY, z + sizeZ,//左下
    //右側の三角形
    x + sizeX, y + sizeY, z + sizeZ,//右下
    x + sizeX, y - sizeY, z + sizeZ,//右上
    x - sizeX, y - sizeY, z + sizeZ,//左上
  };
  ByteBuffer vb = ByteBuffer.allocateDirect(6 * 3 * 4);
  vb.order(ByteOrder.nativeOrder()); //ビッグエンディアンかリトルエンディアンにあわせてくれる
  vertexBuffer = vb.asFloatBuffer();
  vertexBuffer.put(vertex);
  vertexBuffer.position(0);

  float[] texture = {
    1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, //左側の三角形に貼る
    1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f //右側の三角形に貼る
  };
  ByteBuffer tb = ByteBuffer.allocateDirect(2 * 3 * 2 * 4);
  tb.order(ByteOrder.nativeOrder()); //ビッグエンディアンかリトルエンディアンにあわせてくれる
  textureBuffer = tb.asFloatBuffer();
  textureBuffer.put(texture);
  textureBuffer.position(0);

 }


    public void setTexture(GL10 gl, InputStream is)
    {
     Bitmap bitmap;
     try {
      bitmap = BitmapFactory.decodeStream(is);
     } finally {
      try {
       is.close();
      } catch(IOException e) {}
     }
     int[] textureNumber = new int[1];
     gl.glGenTextures(1, textureNumber, 0);
     mTextureNumber = textureNumber[0];
     gl.glBindTexture(GL10.GL_TEXTURE_2D, mTextureNumber);
     GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);

     gl.glTexParameterx( GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_REPEAT );
     gl.glTexParameterx( GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_REPEAT );
     gl.glTexParameterx( GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR );
     gl.glTexParameterx( GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR );

    }

 public void draw(GL10 gl) {
  gl.glClearColor(1.0f, 0.0f, 0.0f, 1.0f);

     gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);

  //ビューポート行列(ウィンドウへの出力領域)設定
  gl.glViewport(0,0,mWidth,mHeight);

  //射影行列設定
  gl.glMatrixMode(GL10.GL_PROJECTION);
  gl.glLoadIdentity();
  //視界(視野角、画面のアスペクト、比近視点、遠視点)の設定
  float aspect = (float)mWidth / (float)mHeight;
  GLU.gluPerspective(gl, 45.0f, aspect, 0.1f, 3000.0f);

     GLU.gluLookAt(
              gl,
        0.0f, 0.0f, 100.0f,  //位置(視点)
       0.0f, 0.0f, 0.0f,  //見つめているところ
       0.0f, 1.0f, 0.0f //水平
     );
     gl.glMatrixMode(GL10.GL_MODELVIEW);
     gl.glLoadIdentity();

  gl.glEnable(GL10.GL_TEXTURE_2D);
  gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
  gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);

  gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
  gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, textureBuffer);

  int triangleNum = 2;
  gl.glDrawArrays(GL10.GL_TRIANGLES, 0, triangleNum * 3);
 }

 @Override
 public boolean onTouch(View arg0, MotionEvent arg1) {
  // TODO 自動生成されたメソッド・スタブ
  return false;
 }

}


画像をdrawable-hdpiに登録してから実行すると下のように表示されます。






2011年3月28日月曜日

OpenGLES入門 その2

今回は三角ポリゴンを2枚表示させます。
下のような青と緑のポリゴンが表示できると思います。

■MyApplication.java■

import android.app.Activity; import android.opengl.GLSurfaceView; import android.os.Bundle; import android.view.WindowManager; 
public class MyApplication extends Activity {
private GLSurfaceView mGLSurfaceView; private GLRenderer mGLRenderer; @Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); mGLSurfaceView = new GLSurfaceView(this); setContentView(mGLSurfaceView); WindowManager windowmanager = (WindowManager)getSystemService(WINDOW_SERVICE); mGLRenderer = new GLRenderer(this, windowmanager.getDefaultDisplay()); mGLSurfaceView.setRenderer(mGLRenderer);
}
/** * */ public void onPause() {
mGLSurfaceView.onPause(); super.onPause();
}
/** * */ public void onResume() {
super.onResume(); mGLSurfaceView.onResume();
}
}


 ■GLRenderer.java■

import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.opengles.GL10; import android.app.Activity; import android.opengl.GLSurfaceView; import android.opengl.GLU; import android.view.Display; 
public class GLRenderer implements GLSurfaceView.Renderer { private Scene mScene; public GLRenderer(Activity activity, Display display) { mScene = new Scene(display); } @Override public void onDrawFrame(GL10 gl) {//毎フレーム呼ばれるメインループ mScene.draw(gl); } @Override public void onSurfaceChanged(GL10 arg0, int arg1, int arg2) { } @Override public void onSurfaceCreated(GL10 gl, EGLConfig config) { } }
 ■Scene.java■

import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.FloatBuffer; import javax.microedition.khronos.opengles.GL10; import android.opengl.GLU; import android.view.Display; import android.view.MotionEvent; import android.view.View; public class Scene implements View.OnTouchListener{ private FloatBuffer vertexBuffer; private FloatBuffer colorBuffer; private int mWidth; private int mHeight; public Scene(Display display) { mWidth = display.getWidth(); mHeight = display.getHeight(); float x = 0.0f; float y = 0.0f; float z = 0.0f; float sizeX = 10.0f; float sizeY = 10.0f; float sizeZ = 0.0f; float[] vertex = { //左側の三角形 x + sizeX, y - sizeY, z + sizeZ, x - sizeX, y - sizeY, z + sizeZ, x - sizeX, y + sizeY, z + sizeZ, //右側の三角形 x - sizeX, y + sizeY, z + sizeZ, x + sizeX, y + sizeY, z + sizeZ, x + sizeX, y - sizeY, z + sizeZ, }; ByteBuffer vb = ByteBuffer.allocateDirect(6 * 3 * 4); vb.order(ByteOrder.nativeOrder()); //ビッグエンディアンかリトルエンディアンにあわせてくれる vertexBuffer = vb.asFloatBuffer(); vertexBuffer.put(vertex); vertexBuffer.position(0); float[] color = { //左側の三角形(青) 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, //右側の三角形(緑) 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f }; ByteBuffer vbc = ByteBuffer.allocateDirect(6 * 4 * 4); vbc.order(ByteOrder.nativeOrder()); //ビッグエンディアンかリトルエンディアンにあわせてくれる colorBuffer = vbc.asFloatBuffer(); colorBuffer.put(color); colorBuffer.position(0); } public void draw(GL10 gl) { gl.glClearColor(1.0f, 0.0f, 0.0f, 1.0f); gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
//ビューポート行列(ウィンドウへの出力領域)設定 gl.glViewport(0,0,mWidth,mHeight); //射影行列設定 gl.glMatrixMode(GL10.GL_PROJECTION); gl.glLoadIdentity(); //視界(視野角、画面のアスペクト、比近視点、遠視点)の設定 float aspect = (float)mWidth / (float)mHeight; GLU.gluPerspective(gl, 45.0f, aspect, 0.1f, 3000.0f); GLU.gluLookAt(
            gl,       0.0f, 0.0f, 100.0f, //位置(視点)     0.0f, 0.0f, 0.0f, //見つめているところ            0.0f, 1.0f, 0.0f //水平 );
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); gl.glEnableClientState(GL10.GL_COLOR_ARRAY); gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer); gl.glColorPointer(4, GL10.GL_FLOAT, 0, colorBuffer); int triangleNum = 2; gl.glDrawArrays(GL10.GL_TRIANGLES, 0, triangleNum * 3); } @Override public boolean onTouch(View arg0, MotionEvent arg1) { return false; } }



PR » 看板
PR » 名刺 作成

2011年3月23日水曜日

Androidアプリ公開

「ポリゴンワールド」をマーケットに公開しました。
無料です。
https://market.android.com/developer?pub=minmin0530

初めて作ったAndroidアプリです。
Android持ってる方は是非ダウンロードしてみて下さい。








2011年1月26日水曜日

Androidで音を鳴らす

resフォルダの中にrawフォルダを作って、その中に音声ファイルを保存。
mediaPlayer=MediaPlayer.create(getContext(),R.raw.test_bgm);
javaファイルの中にこんな感じで音声ファイルを登録処理を書くが、eclipseはエラーを出しています。しかしそのまま保存。
そしてR.javaファイルにrawクラスとtest_bgm定数が自動で書き込まれるのを待つ。ここの自動的に書き込まれるっていう部分がまだよくわからないが、とにかくR.javaに自動的に書き込まれるようにする。自分で書き込むとビルドできなかったりした。
あとは簡単。

private MediaPlayer mediaPlayer; //プレーヤー

//サウンドの再生
public void playSound() {
  try {
    mediaPlayer=MediaPlayer.create(getContext(),R.raw.test_bgm3);
    mediaPlayer.start();
    mediaPlayer.setOnCompletionListener(this);
  } catch (Exception e) {
  }
}

//サウンドの停止
public void stopSound() {
  try {
    mediaPlayer.stop();
    mediaPlayer.setOnCompletionListener(null);
    mediaPlayer.release();
    mediaPlayer=null;
  } catch (Exception e) {
  }
}

@Override//サウンド再生終了時に呼ばれる
public void onCompletion(MediaPlayer arg0) {}

ViewとMediaPlayer.OnCompletionListenerを継承する。
コンストラクタの中で
super(context);
を書いておいて、後は音を鳴らしたいところでplaySound()を呼んでやる。stopSound()で音の終了。





2011年1月25日火曜日

Androidでキーリピート

アンドロイドでボタンを押しているあいだ(タッチしているあいだ)毎回呼ばれる処理を実装する話です。
ゲーム作るときには必須の処理だと思います。

onTouch(View v, MotionEvent me)の中でボタンが押されたら(DOWN)リピートフラグをtrueにする。ボタンが離されたら(UP)リピートフラグをfalseにする。
メインループであるonDrawFrame(GL10 gl)の中でキーリピートしているときにコールバックされるオブジェクトを登録する。
private Runnable mLongPressAction = new Runnable() {
  public void run() {//コールバックされる
  //ここにキーリピートされたときの処理を書く
  }
};

private boolean repeat = false;
public boolean onTouch(View v, MotionEvent me) {
  if(me.getAction() == me.ACTION_DOWN) {
    repeat = true;
  }
  if(me.getAction() == me.ACTION_UP) {
    repeat = false;
  }
  return false;
}

private int LONG_PRESS_DELAY = 1;//ミリ秒
private Handler mHandler = new Handler();
public void onDrawFrame(GL10 gl) {//毎回呼ばれる
  if(repeat)
  {//キーリピートされているあいだは毎回コールバックされるオブジェクトを登録
    mHandler.postDelayed(mLongPressAction, LONG_PRESS_DELAY);
  }
}





2011年1月22日土曜日

cocos2d-x Android C++

C++でAndroidとiPhoneのアプリが開発できるものがあるというのをstachibanaさんに紹介してもらいました。cocos2d-xというものです。






2011年1月20日木曜日

Android 画面サイズ取得

yossi'sさんの記事で紹介されてましたが、画面サイズを取得するには

Activity継承クラスの場合
WindowManager windowmanager = (WindowManager)getSystemService(WINDOW_SERVICE);
Display disp = windowmanager.getDefaultDisplay();
int width = disp.getWidth();
int height = disp.getHeight();
というふうにします。

このサイズから好きな割合でボタンやテキストの大きさを作ると、どのAndroidでも統一したレイアウトが作れるんじゃないかと思います。





2011年1月18日火曜日

Android OpenGLES テクスチャ

Androidでテクスチャが表示できない状態になっちゃって、おっかしーなー、コード間違ってないような気がするのになー、と思っていたら.gif画像がダメだったみたいです。.jpgとか.pngの画像なら表示されました。






2011年1月17日月曜日

GLSurfaceView

今までGLSurfaceViewを使わないでOpenGLESの描画を行っていたけど、GLSurfaceViewを使った設計にしてみた。




2011年1月14日金曜日

android-NDK-r5

cygwinをインストールした後、android-NDK-r5のサンプルをビルドしようとしました。
しかし、わからないところがあって色々調べたら解決したことがあったので書いておきます。


bashの.bashrcに、ndkのインストール場所の設定を以下のようにexportしました。
export ANDROID_NDK_ROOT=C:/android-ndk-r5
export PATH=$PATH:/cygdrive/c/minao/android-ndk-r5


そしてネットの記事http://monoist.atmarkit.co.jp/fembedded/articles/android/02/android02b.htmlを参考に、C-Nativeライブラリをコンパイルするための環境設定シェルスクリプト「host-setup.sh」をコマンドで実行しようとしました。
しかし「host-setup.sh」がC:/android-ndk-r5/build/のフォルダの中に無かったので、環境設定シェルスクリプトは後回しにしました。


続いて、サンプルとして提供されているC-Nativeライブラリ「hello-jni」を以下のコマンドでコンパイルしようとしました。
$ make APP=hello-jni


しかし、以下のようなエラーが出ました。
Android NDK: APP variable defined to unknown appllications: hell-jni
Android NDK: You might want to use one of the following: 
build/core/main.mk:81: *** Android NDK: Aborting . Stop.


これは環境設定シェルスクリプト「host-setup.sh」を実行してないからいけないのかと思っていたのですが、そうではなくて、android-ndk-r3からandroid-ndk-r4になるときにmake APP=appnameとやっていたのが、Application.xml がある場所で ndk-build を実行する、 に変わってたようです。
そして、android-ndk-r4からandroid-ndk-r5になるときにApplication.xmlのなまえがAndroidManifest.xmlに変わったようです。


なので、cygwin を起動して、アプリの Application.xml があるところで、
ndk-build
をしてやるとビルドができました。