質問編集履歴

3 見やすくした

giant

giant score -4

2017/09/15 17:35  投稿

androidで、camera2で顔認識をしたいのにできません。助けてください。
```java
 
 
package com.google.android.exoplayer2.demo;  
 
public class PlayerActivity extends Activity implements OnClickListener, ExoPlayer.EventListener
{
 //canvassは、画面にfacelineを書き込むためのやつ
 Canvas canvass;
 private AutoFitTextureView mTextureView;
 private CameraFaceLineTextureView mCameraTextureView;
 private TextureView.SurfaceTextureListener mSurfaceTextureListener
         = new TextureView.SurfaceTextureListener() {
   @Override
   public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture,
                                         int width, int height) {
   }
   @Override
   public void onSurfaceTextureSizeChanged(SurfaceTexture surfaceTexture,
                                           int width, int height) {
     configureTransform(width, height);
   }
   @Override
   public boolean onSurfaceTextureDestroyed(SurfaceTexture surfaceTexture) {
     return true;
   }
   @Override
   public void onSurfaceTextureUpdated(SurfaceTexture surfaceTexture) {
   }
 };
 
 private TextureView.SurfaceTextureListener mCameraSurfaceTextureListener
         = new TextureView.SurfaceTextureListener() {
   @Override
   public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture,
                                         int width, int height) {
   }
   @Override
   public void onSurfaceTextureSizeChanged(SurfaceTexture surfaceTexture,
                                           int width, int height) {
     configureTransform(width, height);
     canvass=mCameraTextureView.lockCanvas();
   }
   @Override
   public boolean onSurfaceTextureDestroyed(SurfaceTexture surfaceTexture) {
     return true;
   }
   @Override
   public void onSurfaceTextureUpdated(SurfaceTexture surfaceTexture) {
   }
 };
 private CameraDevice.StateCallback mStateCallback = new CameraDevice.StateCallback() {
   @Override
   public void onOpened(@NonNull CameraDevice cameraDevice) {
     
   }
 };
 private CaptureRequest.Builder mPreviewBuilder;
 public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.player_activity);
   mTextureView = (AutoFitTextureView) findViewById(R.id.texture);
   mCameraTextureView = (CameraFaceLineTextureView) findViewById(R.id.texture2);
   @Override
   public void onResume() {
     super.onResume();
       mTextureView.setSurfaceTextureListener(mSurfaceTextureListener);
       mCameraTextureView.setSurfaceTextureListener(mCameraSurfaceTextureListener);
   }
 private void startPreview() {
 
 //多分ここの作業が足りてなかった  
   try {
     SurfaceTexture texture = mTextureView.getSurfaceTexture();
     assert texture != null;
     texture.setDefaultBufferSize(mPreviewSize.getWidth(), mPreviewSize.getHeight());
     mPreviewBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
     Surface previewSurface = new Surface(texture);
     mPreviewBuilder.addTarget(previewSurface);
     mCameraDevice.createCaptureSession(Collections.singletonList(previewSurface),
             new CameraCaptureSession.StateCallback() {
               @Override
               public void onClosed(CameraCaptureSession session) {
               }
               @Override
               public void onReady(CameraCaptureSession session) {
               }
               @Override
               public void onConfigured(@NonNull CameraCaptureSession session) {
                 mPreviewSession = session;
               }
             }, mBackgroundHandler);
   } catch (CameraAccessException e) {
   }
 }
 private void startPreview2() {  
 
   //多分ここの作業が足りてなかった  
   try {  
     SurfaceTexture texture = mCameraTextureView.getSurfaceTexture();  
     assert texture != null;  
     texture2.setDefaultBufferSize(mPreviewSize.getWidth(), mPreviewSize.getHeight());  
     mCameraPreviewBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);  
     Surface previewCameraSurface = new Surface(texture2);  
     mCameraPreviewBuilder.addTarget(previewCameraSurface);  
 
     mCameraDevice.createCaptureSession(Collections.singletonList(previewCameraSurface),  
             new CameraCaptureSession.StateCallback() {  
 
               @Override  
               public void onClosed(CameraCaptureSession session) {  
               }  
 
               @Override  
               public void onReady(CameraCaptureSession session) {  
               }  
 
               @Override  
               public void onConfigured(@NonNull CameraCaptureSession session) {  
                 mCameraPreviewSession = session;  
               }  
 
             }, mBackgroundHandler);  
   } catch (CameraAccessException e) {  
   }  
 }  
 
 private void startRecordingVideo() {
   if (null == mCameraDevice || !mTextureView.isAvailable() || null == mPreviewSize) {
     return;
   }
   try {
     SurfaceTexture texture = mTextureView.getSurfaceTexture();
     assert texture != null;
     texture.setDefaultBufferSize(mPreviewSize.getWidth(), mPreviewSize.getHeight());
     mPreviewBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_RECORD);
     List<Surface> surfaces = new ArrayList<>();
     // Set up Surface for the camera preview
     Surface previewSurface = new Surface(texture);
     surfaces.add(previewSurface);
     mPreviewBuilder.addTarget(previewSurface);
     // Set up Surface for the MediaRecorder
     Surface recorderSurface = mMediaRecorder.getSurface();
     surfaces.add(recorderSurface);
     mPreviewBuilder.addTarget(recorderSurface);
     // Start a capture session
     // Once the session starts, we can update the UI and start recording
     mCameraDevice.createCaptureSession(surfaces, new CameraCaptureSession.StateCallback() {
       @Override
       public void onConfigured(@NonNull CameraCaptureSession cameraCaptureSession) {
         mPreviewSession = cameraCaptureSession;
       }
     }, mBackgroundHandler);
   } catch (CameraAccessException | IOException e) {
   }
 }
 private CameraCaptureSession.CaptureCallback mCaptureCallback
         = new CameraCaptureSession.CaptureCallback() {
   private void process(CaptureResult result) {
     Integer mode = result.get(CaptureResult.STATISTICS_FACE_DETECT_MODE);
     Face[] faces = result.get(CaptureResult.STATISTICS_FACES);
     if (faces != null && mode != null)
       
       for(Face face: faces) {
         Rect r=faceRect2PixelRect(face);
         drawFace(r,Color.argb(255, 255, 0, 255));
       }
     Log.e("tag", "faces : " + faces.length + " , mode : " + mode);
   }
   @Override
   public void onCaptureProgressed(CameraCaptureSession session, CaptureRequest request,
                                   CaptureResult partialResult) {
     process(partialResult);
   }
   @Override
   public void onCaptureCompleted(CameraCaptureSession session, CaptureRequest request,
                                  TotalCaptureResult result) {
     process(result);
   }
 };
 private Paint paint = new Paint();
 public void drawFace(Rect rect1, int color) {
   try {
     if (canvass != null) {
       try {
         canvass.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
         paint.setColor(color);
         canvass.drawRect(rect1,paint);
       } finally {
         mCameraTextureView.unlockCanvasAndPost(canvass);
       }
     }
   } catch (IllegalArgumentException e) {
   }
 }
 private Rect faceRect2PixelRect(Face face) {
   int w = mCameraTextureView.getWidth();
   int h = mCameraTextureView.getHeight();
   Rect r=face.getBounds();
   r.left = w * (-r.top + 1000) / 2000;
   r.right = w * (-r.bottom + 1000) / 2000;
   r.top = h * (-r.left + 1000) / 2000;
   r.bottom = h * (-r.right + 1000) / 2000;
   return r;
 }
}
 
```
  • Java

    17789 questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Android

    8025 questions

    Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

  • Android Studio

    4830 questions

    Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

2 コードの編集

giant

giant score -4

2017/09/15 17:24  投稿

androidで、camera2で顔認識をしたいのにできません。助けてください。
```java  
 
 
package com.google.android.exoplayer2.demo;  
 
 
 
public class PlayerActivity extends Activity implements OnClickListener, ExoPlayer.EventListener
{
 //canvassは、画面にfacelineを書き込むためのやつ
 Canvas canvass;
 private AutoFitTextureView mTextureView;
 private CameraFaceLineTextureView mCameraTextureView;
 private TextureView.SurfaceTextureListener mSurfaceTextureListener
         = new TextureView.SurfaceTextureListener() {
   @Override
   public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture,
                                         int width, int height) {
   }
   @Override
   public void onSurfaceTextureSizeChanged(SurfaceTexture surfaceTexture,
                                           int width, int height) {
     configureTransform(width, height);
   }
   @Override
   public boolean onSurfaceTextureDestroyed(SurfaceTexture surfaceTexture) {
     return true;
   }
   @Override
   public void onSurfaceTextureUpdated(SurfaceTexture surfaceTexture) {
   }
 };
 
 private TextureView.SurfaceTextureListener mCameraSurfaceTextureListener
         = new TextureView.SurfaceTextureListener() {
   @Override
   public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture,
                                         int width, int height) {
   }
   @Override
   public void onSurfaceTextureSizeChanged(SurfaceTexture surfaceTexture,
                                           int width, int height) {
     configureTransform(width, height);
     canvass=mCameraTextureView.lockCanvas();
   }
   @Override
   public boolean onSurfaceTextureDestroyed(SurfaceTexture surfaceTexture) {
     return true;
   }
   @Override
   public void onSurfaceTextureUpdated(SurfaceTexture surfaceTexture) {
   }
 };
 private CameraDevice.StateCallback mStateCallback = new CameraDevice.StateCallback() {
   @Override
   public void onOpened(@NonNull CameraDevice cameraDevice) {
     
   }
 };
 private CaptureRequest.Builder mPreviewBuilder;
 public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.player_activity);
   mTextureView = (AutoFitTextureView) findViewById(R.id.texture);
   mCameraTextureView = (CameraFaceLineTextureView) findViewById(R.id.texture2);
   @Override
   public void onResume() {
     super.onResume();
       mTextureView.setSurfaceTextureListener(mSurfaceTextureListener);
       mCameraTextureView.setSurfaceTextureListener(mCameraSurfaceTextureListener);
   }
 private void startPreview() {
   try {
     SurfaceTexture texture = mTextureView.getSurfaceTexture();
     assert texture != null;
     texture.setDefaultBufferSize(mPreviewSize.getWidth(), mPreviewSize.getHeight());
     mPreviewBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
     Surface previewSurface = new Surface(texture);
     mPreviewBuilder.addTarget(previewSurface);
     mCameraDevice.createCaptureSession(Collections.singletonList(previewSurface),
             new CameraCaptureSession.StateCallback() {
               @Override
               public void onClosed(CameraCaptureSession session) {
               }
               @Override
               public void onReady(CameraCaptureSession session) {
               }
               @Override
               public void onConfigured(@NonNull CameraCaptureSession session) {
                 mPreviewSession = session;
               }
             }, mBackgroundHandler);
   } catch (CameraAccessException e) {
   }
 }
 private void startRecordingVideo() {
   if (null == mCameraDevice || !mTextureView.isAvailable() || null == mPreviewSize) {
     return;
   }
   try {
     SurfaceTexture texture = mTextureView.getSurfaceTexture();
     assert texture != null;
     texture.setDefaultBufferSize(mPreviewSize.getWidth(), mPreviewSize.getHeight());
     mPreviewBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_RECORD);
     List<Surface> surfaces = new ArrayList<>();
     // Set up Surface for the camera preview
     Surface previewSurface = new Surface(texture);
     surfaces.add(previewSurface);
     mPreviewBuilder.addTarget(previewSurface);
     // Set up Surface for the MediaRecorder
     Surface recorderSurface = mMediaRecorder.getSurface();
     surfaces.add(recorderSurface);
     mPreviewBuilder.addTarget(recorderSurface);
     // Start a capture session
     // Once the session starts, we can update the UI and start recording
     mCameraDevice.createCaptureSession(surfaces, new CameraCaptureSession.StateCallback() {
       @Override
       public void onConfigured(@NonNull CameraCaptureSession cameraCaptureSession) {
         mPreviewSession = cameraCaptureSession;
       }
     }, mBackgroundHandler);
   } catch (CameraAccessException | IOException e) {
   }
 }
 private CameraCaptureSession.CaptureCallback mCaptureCallback
         = new CameraCaptureSession.CaptureCallback() {
   private void process(CaptureResult result) {
     Integer mode = result.get(CaptureResult.STATISTICS_FACE_DETECT_MODE);
     Face[] faces = result.get(CaptureResult.STATISTICS_FACES);
     if (faces != null && mode != null)
       
       for(Face face: faces) {
         Rect r=faceRect2PixelRect(face);
         drawFace(r,Color.argb(255, 255, 0, 255));
       }
     Log.e("tag", "faces : " + faces.length + " , mode : " + mode);
   }
   @Override
   public void onCaptureProgressed(CameraCaptureSession session, CaptureRequest request,
                                   CaptureResult partialResult) {
     process(partialResult);
   }
   @Override
   public void onCaptureCompleted(CameraCaptureSession session, CaptureRequest request,
                                  TotalCaptureResult result) {
     process(result);
   }
 };
 private Paint paint = new Paint();
 public void drawFace(Rect rect1, int color) {
   try {
     if (canvass != null) {
       try {
         canvass.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
         paint.setColor(color);
         canvass.drawRect(rect1,paint);
       } finally {
         mCameraTextureView.unlockCanvasAndPost(canvass);
       }
     }
   } catch (IllegalArgumentException e) {
   }
 }
 private Rect faceRect2PixelRect(Face face) {
   int w = mCameraTextureView.getWidth();
   int h = mCameraTextureView.getHeight();
   Rect r=face.getBounds();
   r.left = w * (-r.top + 1000) / 2000;
   r.right = w * (-r.bottom + 1000) / 2000;
   r.top = h * (-r.left + 1000) / 2000;
   r.bottom = h * (-r.right + 1000) / 2000;
   return r;
 }
}
}
```
  • Java

    17789 questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Android

    8025 questions

    Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

  • Android Studio

    4830 questions

    Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

1 コードをコンパクトにしました。

giant

giant score -4

2017/09/15 17:20  投稿

androidで、camera2で顔認識をしたいのにできません。助けてください。
```java  
 
public class PlayerActivity extends Activity implements OnClickListener, ExoPlayer.EventListener
{
 //canvassは、画面にfacelineを書き込むためのやつ
 Canvas canvass;
 private AutoFitTextureView mTextureView;
 private CameraFaceLineTextureView mCameraTextureView;
 private TextureView.SurfaceTextureListener mSurfaceTextureListener
         = new TextureView.SurfaceTextureListener() {
   @Override
   public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture,
                                         int width, int height) {
     openCamera(width, height);  
   }
   @Override
   public void onSurfaceTextureSizeChanged(SurfaceTexture surfaceTexture,
                                           int width, int height) {
     configureTransform(width, height);
   }
   @Override
   public boolean onSurfaceTextureDestroyed(SurfaceTexture surfaceTexture) {
     return true;
   }
   @Override
   public void onSurfaceTextureUpdated(SurfaceTexture surfaceTexture) {
   }
 };
   
 private TextureView.SurfaceTextureListener mCameraSurfaceTextureListener
         = new TextureView.SurfaceTextureListener() {
   @Override
   public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture,
                                         int width, int height) {
   }
   @Override
   public void onSurfaceTextureSizeChanged(SurfaceTexture surfaceTexture,
                                           int width, int height) {
     configureTransform(width, height);
 
     canvass=mCameraTextureView.lockCanvas();
   }
   @Override
   public boolean onSurfaceTextureDestroyed(SurfaceTexture surfaceTexture) {
     return true;
   }
   @Override
   public void onSurfaceTextureUpdated(SurfaceTexture surfaceTexture) {
   }
 };
 
 private CameraDevice.StateCallback mStateCallback = new CameraDevice.StateCallback() {
   @Override
   public void onOpened(@NonNull CameraDevice cameraDevice) {
 
     
     if (cameraDevice == null) {
     
     } else {
   
       if (null != mTextureView) {
         configureTransform(mTextureView.getWidth(), mTextureView.getHeight());
       }
     }
   }
 };
 
 
   }
 };
 private CaptureRequest.Builder mPreviewBuilder;
 
 public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.player_activity);
   //撮影に使うViewを取得  
   mTextureView = (AutoFitTextureView) findViewById(R.id.texture);
   mCameraTextureView = (CameraFaceLineTextureView) findViewById(R.id.texture2);
   @Override
   public void onResume() {
     super.onResume();
 
     if (mTextureView.isAvailable()) {  
       openCamera(mTextureView.getWidth(), mTextureView.getHeight());  
     } else {  
       mTextureView.setSurfaceTextureListener(mSurfaceTextureListener);
       mCameraTextureView.setSurfaceTextureListener(mCameraSurfaceTextureListener);
     }  
   }
 private void startPreview() {
   if (null == mCameraDevice || !mTextureView.isAvailable() || null == mPreviewSize) {  
     return;  
   }  
   try {
     SurfaceTexture texture = mTextureView.getSurfaceTexture();
     assert texture != null;
     texture.setDefaultBufferSize(mPreviewSize.getWidth(), mPreviewSize.getHeight());
     mPreviewBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
     Surface previewSurface = new Surface(texture);
     mPreviewBuilder.addTarget(previewSurface);
     mCameraDevice.createCaptureSession(Collections.singletonList(previewSurface),
             new CameraCaptureSession.StateCallback() {
               @Override
               public void onClosed(CameraCaptureSession session) {
               }
               @Override
               public void onReady(CameraCaptureSession session) {
               }
               @Override
               public void onConfigured(@NonNull CameraCaptureSession session) {
                 mPreviewSession = session;
               }
             }, mBackgroundHandler);
   } catch (CameraAccessException e) {
     e.printStackTrace();  
   }
 }
 private void startRecordingVideo() {
   if (null == mCameraDevice || !mTextureView.isAvailable() || null == mPreviewSize) {
     return;
   }
   try {
     SurfaceTexture texture = mTextureView.getSurfaceTexture();
     assert texture != null;
     texture.setDefaultBufferSize(mPreviewSize.getWidth(), mPreviewSize.getHeight());
     mPreviewBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_RECORD);
     List<Surface> surfaces = new ArrayList<>();
     // Set up Surface for the camera preview
     Surface previewSurface = new Surface(texture);
     surfaces.add(previewSurface);
     mPreviewBuilder.addTarget(previewSurface);
     // Set up Surface for the MediaRecorder
     Surface recorderSurface = mMediaRecorder.getSurface();
     surfaces.add(recorderSurface);
     mPreviewBuilder.addTarget(recorderSurface);
     // Start a capture session
     // Once the session starts, we can update the UI and start recording
     mCameraDevice.createCaptureSession(surfaces, new CameraCaptureSession.StateCallback() {
       @Override
       public void onConfigured(@NonNull CameraCaptureSession cameraCaptureSession) {
         mPreviewSession = cameraCaptureSession;
 
       }
     }, mBackgroundHandler);
   } catch (CameraAccessException | IOException e) {
     e.printStackTrace();  
   }
 }
 private CameraCaptureSession.CaptureCallback mCaptureCallback
         = new CameraCaptureSession.CaptureCallback() {
   private void process(CaptureResult result) {
     Integer mode = result.get(CaptureResult.STATISTICS_FACE_DETECT_MODE);
     Face[] faces = result.get(CaptureResult.STATISTICS_FACES);
     if (faces != null && mode != null)
       
       for(Face face: faces) {
         Rect r=faceRect2PixelRect(face);
         drawFace(r,Color.argb(255, 255, 0, 255));
       }
     Log.e("tag", "faces : " + faces.length + " , mode : " + mode);
   }
   @Override
   public void onCaptureProgressed(CameraCaptureSession session, CaptureRequest request,
                                   CaptureResult partialResult) {
     process(partialResult);
   }
   @Override
   public void onCaptureCompleted(CameraCaptureSession session, CaptureRequest request,
                                  TotalCaptureResult result) {
     process(result);
   }
 };
 private Paint paint = new Paint();
 public void drawFace(Rect rect1, int color) {
   try {
     if (mCameraTextureView != null) {  
     } else if (mCameraTextureView == null) {  
     }  
     //直接canvassを試すからこの下のコードはいらない  
     //Canvas canvas = mTextureView.lockCanvas();  
     if (canvass != null) {
       try {
         canvass.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
         paint.setColor(color);
         canvass.drawRect(rect1,paint);
       } finally {
         //一応mTextureViewでやっておく  
         mCameraTextureView.unlockCanvasAndPost(canvass);
       }
     }
   } catch (IllegalArgumentException e) {
   }
 }
 private Rect faceRect2PixelRect(Face face) {
   int w = mCameraTextureView.getWidth();
   int h = mCameraTextureView.getHeight();
   Rect r=face.getBounds();
   r.left = w * (-r.top + 1000) / 2000;
   r.right = w * (-r.bottom + 1000) / 2000;
   r.top = h * (-r.left + 1000) / 2000;
   r.bottom = h * (-r.right + 1000) / 2000;
   return r;
 }
}
```
  • Java

    17789 questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Android

    8025 questions

    Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

  • Android Studio

    4830 questions

    Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る