|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
$ m$ E# i2 q4 L3 i
Cygwin是一个在windows平台上运行的类UNIX模拟环境,是cygnussolutions公司开发的自由软件。Cygwin是许多自由软件的集合,Cygwin的主要目的是通过重新编译,将POSIX系统上的软件移植到Windows上。Cygwin包括了一套库,该库在win32系统上实现了POSIX系统调用的API,还有一套GNU开发工具集(比如GCC,GDB),这样可以进行简单的软件开发,还有一些UNIX系统下的常见程序。Cygwin不支持Unicode,实际上,除了当前windows系统以及OEM codepages,Cygwin对其它字符集都不支持。
, I( @* i' D4 p; K! k
# \4 W/ o- w! H1 v1、 从 http://cygwin.com/install.html下载setup-x86_64.exe ;% z& t9 v( G3 H3 e6 A
, b* P! z( S. X. }4 ?
2、 将其存放到D:/soft/Cygwin文件夹下,运行setup-x86_64.exe,->下一步->Install from Internet, 下一步->RootDirectory: D:\ProgramFiles\cygwin64,下一步->Local PackageDirectory,下一步->Direct Connection,下一步->http://mirrors.kernel.org,下一步->DevelDefault点成Devel Install(根据需要选择安装,也可全部安装),下一步->下一步(时间较长)->完成;
* ]$ J. i5 p9 o
/ x) u1 u- y3 z% O3、 验证Cygwin是否安装成功:打开Cygwin,输入相关命令如,gcc -v,make –v;
/ N) f; d2 {' [, H: i6 j) X4 Z P+ u4 @3 h6 G' a$ f, n C# B
4、 从https://developer.android.com/tools/sdk/ndk/index.html下载Android NDK,解压缩后将其存放到D:\ProgramFiles\Android\android-sdk\android-ndk-r9下;9 t8 }# Y# F1 k/ ?& D
. q) f$ o5 |: B) a4 a I% ~2 _5、 打开D:\ProgramFiles\cygwin64\home\Spring文件夹下的.bash_profile文件,在其末尾加入:ANDROID_NDK_ROOT=/cygdrive/d/ProgramFiles/Android/android-sdk/android-ndk-r9
* h R' H, L7 i9 ^2 |& N% c6 }9 P
) {/ O! ^! Z# i; HPATH=/cygdrive/d/ProgramFiles/Android/android-sdk/android-ndk-r9:/cygdrive/d/ProgramFiles/Android/android-sdk/android-ndk-r9/toolchains/ARM-linux-androideabi-4.8/prebuilt/windows-x86_64/bin:/cygdrive/d/soft/Java/eclipse/plugins/org.apache.ant_1.8.2.v20110505-1300/bin:$PATH" G4 h2 ]. ^" _5 c
# t z/ v7 S( a3 [
export ANDROID_NDK_ROOT PATH
5 V7 C/ Q* v: S6 e: e
2 ]3 L% U+ p4 v( O: C6、 打开Cygwin,输入命令cd $ANDROID_NDK_ROOT,如果显示/cygdrive/d/ProgramFiles/Android/android-sdk/android-ndk-r9 ,说明配置成功;
0 {& J* H7 ~9 |8 K8 {) Q
# T. h' J! [' E; D7、 新建一个AndroidApplication Project:$ W3 k! V, ~: J! v3 l: L, `" R
2 \) O2 p0 v0 O$ }MainActivity.java:" w) j) e/ S4 ?% n( n C4 T
/ z+ z- A7 J$ N: vpackage com.cygwinjni.android;
( s, M& t+ L) ]$ \. [ $ B* l2 S4 o! o' B
import android.os.Bundle;" r, z, q9 q9 B2 T, a
import android.app.Activity;, |. i; J/ O0 b+ [$ n8 K( R
import android.view.Menu;
) u4 F* m( E% K& D, wimport android.widget.TextView;
F2 @; J, v. C# B, H% U ' M# h2 Y: F. d' h! V1 S( [6 q; c
, r7 ` d- n/ a9 i( j* E
public class MainActivity extends Activity { z$ C( d, F! \" c8 _* S! g& a
2 h" V J' l. W0 |( y- }! k9 B @Override% s1 n6 B+ r) h. M% z+ j ?4 L$ R
protected void onCreate(Bundle savedInstanceState) {* I( @: m" s) P% O8 V* V2 K
super.onCreate(savedInstanceState);
- e! N, f, \1 ^5 @; D1 ` TextView tv = new TextView(this);
" B1 a& u( P3 u: a tv.setText(StringFromJni()); $ F. k0 O0 i+ V/ j0 V7 G
setContentView(tv);
E0 c2 Z2 [- k" z8 B2 f }3 ^5 L/ {. V% D/ `( g3 S
3 T6 T" i0 P4 y0 ]% _6 U' L
public native String StringFromJni();/ }3 r' z: v! |0 a& C; x, l1 ]& d
q& O+ J$ M5 C! e5 g; K, K
static{8 V! x+ ^* W# z; G0 L& x
System.loadLibrary("hello-jni");
+ x" h$ I8 D3 I4 d; x) L }0 u% N4 M7 M9 b9 T
}& @# L. c6 d J4 P2 w; O
% F8 p2 g& @4 k1 |# n# tAndroid.mk:
( J# f/ R$ p8 f" ]LOCAL_PATH := $(call my-dir)
G0 K, O6 W& n- D: dinclude $(CLEAR_VARS)/ [8 @& u8 H e# k
LOCAL_MODULE := hello-jni% v \2 h3 `# n$ _
* F' ?1 A% ~# p4 s
LOCAL_SRC_FILES := com_cygwinjni_android_MainActivity.cpp, a+ L; V. D8 r4 F: w
0 F* n* B7 Z6 i& M4 p5 x: A
include $(BUILD_SHARED_LIBRARY)& x+ K* M. x! C2 M q7 W/ A
8 F0 Z6 C% E+ y
com_cygwinjni_android_MainActivity.cpp: m2 L) Z& b% y3 q. ~
#include <string.h>
' `' u/ P1 s2 F5 K#include <jni.h>: y& T6 u! ~2 | I
#include "com_cygwinjni_android_MainActivity.h") N, T3 K2 b1 t$ z2 Z6 Q! B
" B a* y6 k+ f' f3 D
#ifdef __cplusplus: N8 j' f9 j6 Q' a* D* }
extern "C" {) D0 g6 D& a/ M
#endif& f# {/ }2 _* C/ \& a. T4 C- Y& t
! M' p, ^+ R/ U3 J. l4 E, V KJNIEXPORT jstring JNICALL Java_com_cygwinjni_android_MainActivity_StringFromJni
& Z7 i* }7 \+ h. w( W& o5 e6 d (JNIEnv * env, jobject thiz) O9 g6 O$ k: ]( K l4 J6 V
{
7 ?' f) v. Z+ R; V return env->NewStringUTF("Hello from JNI !");
& r3 o2 E7 Q' t1 _, ~2 Q}
! _7 s. c+ p; z2 f5 @ / Q/ ]7 f& a Y
#ifdef __cplusplus* j" O1 x3 J0 g+ E, @: }# |
}. S2 I) Z- }8 C9 f0 |
#endif1 @5 a. z3 U c U7 e' t; g% L
com_cygwinjni_android_MainActivity.h文件由javah -classpath命令生成;
. s+ l0 r& y- ^ G
: E4 O% z1 `" f, R8、 将Cygwin定位到jni目录下,输入ndk-build命令,会生成相应的.so库。
( `3 r7 B5 M7 P8 e
7 n9 e, u( ]1 C0 P4 r4 F) \如果有写入操作,需要:打开AndroidMainfest.xml ->选择Permissions->Add->UsesPermission->Name: android.permission.WRITE_EXTERNAL_STORAGE . |
|