jni学習

1509 ワード

1.EclipseでHellJniプロジェクトを作成します.
2.ローカルメソッドを作成します.
 package com.demo;
 public class AESEncrypt {

	
	public native void encryp_data(byte[] key, byte[] buff, byte[] out);
	public native String decryp_data(byte[] key, byte[] buff);
	
	static
	{
		System.loadLibrary("AES");
	}

}

3.demo root$javac AESEncryptを実行します.java 
srcディレクトリsrc root$javah-classpath.-jni com.demo.AESEncrypt、その後生産com_demo_AESEncrypt.hファイル.
4. 
注意:
1. fatal error: string: No such file or directory compilation terminated.
1.jniディレクトリの下にアプリケーションを新規作成する.mk; APPに参加するSTL :=  stlport_staticの右側の値は、次のように変更できます.
System-デフォルトの最小C++を使用してライブラリを実行します.これにより、生成されるアプリケーションの体積が小さく、メモリの消費量が小さくなりますが、一部の機能はサポートされません.
stlport_static-STLportを静的ライブラリとして使用しており、Android開発網が極力推奨している
stlport_shared-STLportはダイナミックライブラリとして、互換性と一部の低バージョンのAndroidファームウェアを生成する可能性がありますが、現在は推奨されていません.
gnustl_static-GNU libstdc++を静的ライブラリとして使用
STLPORTはデフォルトではC++例外処理やRTTIはサポートされていませんので、-fexceptionsや-frttiは表示されません.本当に必要ならgnustl_を使用してください.staticは標準C++の特性をサポートしますが、生成されるファイルの体積が大きくなり、実行効率が低下します.
C++異常処理をサポートし、Application.mkにLOCAL_を入れるCPPFLAGS+=-fexceptionsという文は、同じようにRTTIをサポートするならLOCAL_を加えるCPPFLAGS+=-frttiは、stlportではなくgnustl静的ライブラリを使用することを改めて注意します.
強制的にSTLPortを再コンパイルし、Application.mkにSTLPORT_を入れるFORCE_REBUILD:=trueは、STLPortソースコードの再コンパイルを強制することができます.いくつかの理由で、STLPortライブラリを自分で変更する必要がある場合があります.一般的な一般的な開発者はこれを使用する必要はありません.
2.STLを使用するcppファイルに関連するヘッダファイルを含み、using namespace stdを使用する.