2012年6月29日金曜日

NDK & OpenCV

Android NDK をc¥にインストール
cgwin をインストール
(最近はcgwinはいらないようだ)
  make,gccを指定
/home/(user)/.bashrcの最後に
export ANDROID_NDK_ROOT=/cygdrive/c/android-ndk
   export PATH=$PATH:$ANDROID_NDK_ROOT

OpenCV(バイナリ)とAndroid projectは同じフォルダ、かつスペースの無いフォルダ名。すなわちMy Documentの下はだめ。

プロジェクトのjni/Andorid.mk修正
 
include ../OpenCV/share/openCV/OpenCV.mk <<下をこれに変える
#include ../includeOpenCV.mk
#ifeq ("$(wildcard $(OPENCV_MK_PATH))","")
#    #try to load OpenCV.mk from default install location
#    include $(TOOLCHAIN_PREBUILT_ROOT)/user/share/OpenCV/OpenCV.mk
#else
#    include $(OPENCV_MK_PATH)
#endif

cygwinウィンドウ またはコマンドウインドウでもよい
プロジェクトのTOPフォルダへ移動
C:\android-ndk\ndk-build

  /obj/local/armeabi-v7a/libgnustl_static.a: No such file: Permission denied
 このエラーが出たら
  chmod 777 obj/local/armeabi-v7a/libgnustl_static.a
   で再度ndk-build

\OpenCV-2.3.1\libs\armeabi-v7a内のライブラリはbuild時に参照するが、
apkインストール時には重複エラーになるので、名前を変えておく。
必ずbuild前には戻すこと。

注意)
cソースのJNIEXPORT void JNICALL文の関数名にプロジェクト名とクラス名が含まれているので、これらを変更したときは、ndk-buildをし直す必要がある。

例)
JNIEXPORT void JNICALL Java_com_androidgroup_nyartoolkit_ARToolkitDrawer_decodeYUV420SP(JNIEnv * env, jobject obj, jintArray rgb, jbyteArray yuv420sp, jint width, jint height, jint type)

2012年6月11日月曜日

他のアプリを起動する


アプリを起動するとき

            Intent intent1 = new Intent();
            intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            // パッケージ名, クラス名をセット
            intent1.setClassName(pac,clas);
            startActivity(intent1);

pac : パッケージ名
clas : クラス名
(GetIntentCalssNameというアプリで調べる)

標準の設定アプリの場合はこれだけ

           Intent intent1 = new Intent("android.settings.SETTINGS");
           startActivity(intent1);

パワーオンでアプリ起動


レシーバークラス StartReceiver.java

public class StartReceiver extends BroadcastReceiver {
  @Override
  public void onReceive(Context arg0, Intent arg1) {

 Toast toast=Toast.makeText(arg0,"Boot...",Toast.LENGTH_LONG);
      toast.show();
     
     Intent i = new Intent(arg0, Activity.class);  //起動するアクティビティ指定
     i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
     arg0.startActivity(i);
   
   
  }
}

Manifest設定

・ユーザパーミッション

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>

・レシーバー設定

        <receiver android:name="com.widebright.tabmanager.StartReceiver"
        android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
             <intent-filter>
                 <action android:name="android.intent.action.BOOT_COMPLETED"/>
             </intent-filter>
       </receiver>





2012年6月8日金曜日

リリース前確認事項


apk 証明書取得

Google MAP APIキー取得

ソース難読化

MACアドレス認証ルーチン

Home/Backボタン処理確認

ライセンス条項添付




ソース難読化

逆コンパイルでソースを盗まれないように難読化する

ADT18以前
project.propetiesに追加 
   proguard.config=proguard.cfg

ADT18以降
project.propetiesに追加 

   proguard.config=android-sdk/tools/proguard/proguard-android.txt:proguard-project.txt
         (proguard.cfgは無く、共用ファイルと個別ファイルに分かれた)



Dalvik format faild with error1 が出る場合は、SDKのバグを修正

       \android-sdk\tools\proguard\bin\proguard.bat
       最後の行を以下のようにする(%1 %2 %3 %4 %5 %6 %7 %8 %9の部分)
       call %java_exe% -jar "%PROGUARD_HOME%"\lib\proguard.jar %1 %2 %3 %4 %5 %6 %7 %8 %9

2014/5/12追記
apacheのライブラリを使うときは以下を、proguard.project.txtに追加する

# Ignore warning
-dontwarn org.apache.**

リリース用証明書とパッケージ作成

証明書発行とパッケージ作成

   eclipseで対象プロジェクト、右クリック
   Android Tools - Export Signed Application Package

 証明書は新規作成か、既存のものを使用 xxxx.keystoreができる

 証明書付パッケージ xxxx.apkができる

 (Google MAP APIを使っている場合は、この証明書を先に作って、APIキーを入手してソースに埋め込む必要がある)


インストール

 コマンドツール  adb install -r xxxxx.apk
 Batファイルにしておくとクリックでインストールできる  install.bat等





画面キャプチャ

AndroidをUSBケーブルでPCに接続

コマンドツールの場合

   ddmsと入力

  Deviceメニュー、Screen captureをクリック


eclipseの場合

  DDMSのDeviceタグの、Screen captureアイコンをクリック


リアルタイム表示

   java -jara asm.jar

   Android Screen Monitor (asm.jar)は以下からダウンロード
   http://code.google.com/p/android-screen-monitor/