2012年2月7日火曜日

難読化されているか確認する

作成されたファイルで確認する場合
デバッグビルドの場合の通常のビルドの時のファイルサイズと
難読化後のファイルサイズを確認して、小さくなっているか確認する。
ルートディレクトリににproguardフォルダが出来ているか確認して、
proguardフォルダの中に
dump.txt
mapping.txt
seeds.txt
usage.txt
の四つのファイルが作成されているか確認する。


中身を見て確認する場合
1.必要なファイルをダウンロードしてくる。
apktool-install-windows-r04-brut1.tar.bz2
apktool1.4.3.tar.bz2
ダウンロードはこちらから

2.ダウンロードしたファイルを解凍する。
aapt.exe
apktool.bat
apktool.jar
解凍後パスの通っているディレクトリにコピーする

3.デコンパイルの実行
プロジェクト名:AnProject
apkファイルの場所:E:\workspace\AnProject\bin
コマンドプロンプトでコマンドを実行

C:\Users\yamto>cd /d e:

E:\>cd workspace\AnProject\bin

E:\workspace\AnProject\bin>apktool d AnProject.apk
I: Baksmaling...
I: Loading resource table...
I: Loaded.
I: Loading resource table from file: C:\Users\yamto\apktool\framework\1.apk
I: Loaded.
I: Decoding file-resources...
I: Decoding values*/* XMLs...
I: Done.
I: Copying assets and libs...

E:\workspace\AnProject\bin>
----------------------------------------
E:\workspace\AnProject\bin に
AnProject フォルダが作成されている。

4.smaliディレクトリの比較
smaliディレクトリを見ることでProGuardを適用しない場合と適用した場合を確認することができる。

2012年2月6日月曜日

Eclipseで証明書の作成、著名、難読化

準備編
Windowsで開発(他の環境は文字コードに注意)
Eclipse Indigo でAndroidプロジェクトを作成してる。
Android SDK は android-sdk_r16-windows.zip を使用

難読化の為に、プロジェクトのルートフォルダのproject.properties に
proguard.config=proguard.cfg
と追記する。

SDKのツールに入っているProGuardに難があるようなので修正する。
\Android\android-sdk\tools\proguard\bin\proguard.bat の一部を書き換える。
修正前
call %java_exe% -jar "%PROGUARD_HOME%"\lib\proguard.jar %*
修正後
call %java_exe% -jar "%PROGUARD_HOME%"\lib\proguard.jar %1 %2 %3 %4 %5 %6 %7 %8 %9

パッケージエクスプローラからプロジェクトを選択して右クリックで、
Android ツール から export signed application package... を選択する。

後は指示に従って進めていく。


2012年1月29日日曜日

AVDのモニタサイズ

QVGA 240 x 320
WQVGA400 240 X 400
WQVGA432 240 X 432
HVGA 320 X 480
WVGA800 480 X 800
WVGA854 480 X 854
WXGA 1280 X 800

2012年1月28日土曜日

XML読み込み

XML読み込み部分
XmlPullParserFactory factory;
factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xpp = factory.newPullParser();
 
xpp.setInput( new StringReader ( "Hello World!" ) );
int eventType = xpp.getEventType();

res/raw フォルダにあるファイルを読み込む
XmlPullParserFactory factory;
factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xpp = factory.newPullParser();
  
InputStream inputStream = getResources().openRawResource(R.raw.filename);
xpp.setInput(inputStream ,"UTF-8");
   
int eventType = xpp.getEventType();


表示部分

while (eventType != XmlPullParser.END_DOCUMENT) {
    if(eventType == XmlPullParser.START_DOCUMENT) {
        System.out.println("Start document");
    } else if(eventType == XmlPullParser.START_TAG) {
        System.out.println("Start tag "+xpp.getName());
    } else if(eventType == XmlPullParser.END_TAG) {
        System.out.println("End tag "+xpp.getName());
    } else if(eventType == XmlPullParser.TEXT) {
      System.out.println("Text "+xpp.getText());
    }
  eventType = xpp.next();
}

System.out.println("End document");

2012年1月6日金曜日

フロントカメラと背面カメラの同時表示

二つのカメラを同時に利用できるか、試してみました。
AVDでは利用できるようです。実機では試していません。


別に特別な事は必要ありませんでした。
以外に簡単でした。

package com.android.camera2;

import java.util.List;

import android.app.Activity;
import android.hardware.Camera;
import android.os.Bundle;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class Android2CameraActivity extends Activity {
 private Camera camera;

 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

  SurfaceView mySurfaceView = (SurfaceView) findViewById(R.id.surfaceView1);
  SurfaceHolder holder = mySurfaceView.getHolder();
  holder.addCallback(mSurfaceListener);
  holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

  SurfaceView mySurfaceView2 = (SurfaceView) findViewById(R.id.surfaceView2);
  SurfaceHolder holder2 = mySurfaceView2.getHolder();
  holder2.addCallback(mSurfaceListener2);
  holder2.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
  
  // カメラの総数
  int numberOfCameras = Camera.getNumberOfCameras();
  Log.d("個数", String.valueOf(numberOfCameras));

 }

 private SurfaceHolder.Callback mSurfaceListener = new SurfaceHolder.Callback() {
  public void surfaceCreated(SurfaceHolder holder) {
   // TODO Auto-generated method stub
   camera = Camera.open(0);
   try {
    camera.setPreviewDisplay(holder);
   } catch (Exception e) {
    e.printStackTrace();
    Log.d("エラー", "001" );
   }
  }

  public void surfaceDestroyed(SurfaceHolder holder) {
   // TODO Auto-generated method stub
   camera.release();
   camera = null;
  }

  public void surfaceChanged(SurfaceHolder holder, int format, int width,
    int height) {
   // TODO Auto-generated method stub
   Log.d("サーフェイスサイズ", "w=" + String.valueOf(width) + "h=" + height);// 320x180

   camera.stopPreview();

   // camera.setDisplayOrientation(90);// カメラを回転
   Camera.Parameters parameters = camera.getParameters();
   List<Camera.Size> size = parameters.getSupportedPreviewSizes();

   Log.d("カメラのサイズ", "w=" + String.valueOf(size.get(0).width) + "h="
     + String.valueOf(size.get(0).height));// 
   parameters.setPreviewSize(size.get(0).width, size.get(0).height);
   camera.setParameters(parameters);
   camera.startPreview();
  }
 };

 /*
  * 
  */
 private SurfaceHolder.Callback mSurfaceListener2 = new SurfaceHolder.Callback() {
  public void surfaceCreated(SurfaceHolder holder) {
   // TODO Auto-generated method stub
   camera = Camera.open(1);
   try {
    camera.setPreviewDisplay(holder);
   } catch (Exception e) {
    e.printStackTrace();
    Log.d("エラー", "001" );
   }
  }

  public void surfaceDestroyed(SurfaceHolder holder) {
   // TODO Auto-generated method stub
   camera.release();
   camera = null;
  }

  public void surfaceChanged(SurfaceHolder holder, int format, int width,
    int height) {
   // TODO Auto-generated method stub
   Log.d("サーフェイスサイズ", "w=" + String.valueOf(width) + "h=" + height);

   camera.stopPreview();

   // camera.setDisplayOrientation(90);// カメラを回転
   Camera.Parameters parameters = camera.getParameters();
   List<Camera.Size> size = parameters.getSupportedPreviewSizes();

   Log.d("カメラのサイズ", "w=" + String.valueOf(size.get(0).width) + "h="
     + String.valueOf(size.get(0).height));// 
   parameters.setPreviewSize(size.get(0).width, size.get(0).height);
   camera.setParameters(parameters);
   camera.startPreview();
  }
 };


}