|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
, o- c7 v* J0 |/ u8 B
Cygwin是一个在windows平台上运行的类UNIX模拟环境,是cygnussolutions公司开发的自由软件。Cygwin是许多自由软件的集合,Cygwin的主要目的是通过重新编译,将POSIX系统上的软件移植到Windows上。Cygwin包括了一套库,该库在win32系统上实现了POSIX系统调用的API,还有一套GNU开发工具集(比如GCC,GDB),这样可以进行简单的软件开发,还有一些UNIX系统下的常见程序。Cygwin不支持Unicode,实际上,除了当前windows系统以及OEM codepages,Cygwin对其它字符集都不支持。
R; o$ g5 z7 X
! r" l% J+ R9 p# }+ _) p, t/ m1、 从 http://cygwin.com/install.html下载setup-x86_64.exe ;2 U) {& n1 p& y$ @. Y- Z+ {
. W! W7 I3 O7 B/ J7 O# M) {7 s2、 将其存放到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(根据需要选择安装,也可全部安装),下一步->下一步(时间较长)->完成;$ a. t( Z5 {$ M' z; C
h# S$ s* r# Q' G7 j" H
3、 验证Cygwin是否安装成功:打开Cygwin,输入相关命令如,gcc -v,make –v;
5 B8 h8 _5 v! n# U6 Y. G2 L
6 l2 m5 Q1 ]* G* t$ j4、 从https://developer.android.com/tools/sdk/ndk/index.html下载Android NDK,解压缩后将其存放到D:\ProgramFiles\Android\android-sdk\android-ndk-r9下;/ M# p h* I" P% d/ D; D8 `4 {
4 H$ Y4 N8 _9 ^+ o% q" m- @
5、 打开D:\ProgramFiles\cygwin64\home\Spring文件夹下的.bash_profile文件,在其末尾加入:ANDROID_NDK_ROOT=/cygdrive/d/ProgramFiles/Android/android-sdk/android-ndk-r92 l+ y# Q; a* y2 j& l. J) c
4 t! a+ |8 @$ N! j" \2 \PATH=/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
( S4 Z' d, }& o$ }- l: Q* Q1 ?' `+ `; }6 w. q( K0 W6 b- L
export ANDROID_NDK_ROOT PATH
" O( {' l8 J0 z+ g: U# O, x/ P O% O! t, M$ B3 Y9 Y2 y
6、 打开Cygwin,输入命令cd $ANDROID_NDK_ROOT,如果显示/cygdrive/d/ProgramFiles/Android/android-sdk/android-ndk-r9 ,说明配置成功;
( | c3 H* R0 C7 ~7 p( [- |: e
2 i. k# f% F0 S/ Q3 w7 ~* o7、 新建一个AndroidApplication Project:9 ^2 ?# \# N1 t
3 \- t9 }# `* M' |MainActivity.java:, @% y/ F' t0 ?8 N& |
. B/ {" c- x% B3 I% W) h4 ?
package com.cygwinjni.android;
2 M/ M. O7 i7 \& {1 k
5 p L6 r% J5 c9 W; Jimport android.os.Bundle;
, A3 A: k4 ]8 ~5 G2 \$ Fimport android.app.Activity;* n- R3 I& _3 g& F4 k" i
import android.view.Menu;
- b& P9 Y& D! C! w7 `. Qimport android.widget.TextView;3 n4 Z3 m. X/ x+ C0 M
* v* K! c- l/ b1 f' F3 G2 `$ t" P
, J/ I8 Q p5 a/ T( N0 O2 t& Rpublic class MainActivity extends Activity {. a9 G) E @2 ~2 a% r0 t
& N: t* q0 ?0 r# g8 v @Override" ~2 N( D5 h1 r% O; n* p+ I
protected void onCreate(Bundle savedInstanceState) {
8 g1 u% y: p* q+ h super.onCreate(savedInstanceState);
% ^; V& ?* f2 u& g TextView tv = new TextView(this);
# P1 x1 C* s$ T tv.setText(StringFromJni());
/ I: ~) ?/ W5 B$ W setContentView(tv);
6 r* C; @8 y9 p' ~ }
9 D. ?5 Z6 I5 O& }; x( L ! N C0 `: _9 {! [4 E
public native String StringFromJni();
, c5 }% u: @; j3 Q; L; k( F; K + A$ k0 N7 r; r4 O! Z7 w1 U
static{" Y- y B' |4 D: [! G+ L
System.loadLibrary("hello-jni");+ z+ D2 p- V2 P& b! ]+ r
}
* N6 s! U% R: J: K}
, i4 r; Z7 y! V( N+ f5 O1 Q& g+ A I3 E( `: t3 {5 y/ W' [6 K
Android.mk:
& V% m3 n3 b3 Z! J! \( `" k% \LOCAL_PATH := $(call my-dir)% W+ R, B9 }8 s8 W
include $(CLEAR_VARS). _* }0 I- R. X- v- g+ W8 r4 W
LOCAL_MODULE := hello-jni4 U& @" l$ Z# G
3 S9 i9 |- o3 K1 A: V# H# @7 PLOCAL_SRC_FILES := com_cygwinjni_android_MainActivity.cpp, T- h; U: |2 R5 s
2 `( ]4 E, s i4 _: z3 V' E2 f
include $(BUILD_SHARED_LIBRARY)
/ d o" t* S _8 W0 _4 \ C
; J* E$ R6 w% H% Vcom_cygwinjni_android_MainActivity.cpp:
* S4 c4 b. \+ O#include <string.h>
$ _- \+ d- Y% i7 G" D#include <jni.h>+ A# z" q" O0 r* K" A" {
#include "com_cygwinjni_android_MainActivity.h"
l3 X! V% T2 i# C) ], { ; E' [# \4 W" ~) {5 q5 r% S. Q
#ifdef __cplusplus& u, K% _$ Y5 Q3 F
extern "C" {% a% L/ d- A1 j' v$ d5 u
#endif4 q& s; q7 s' t
0 m) r( N" J8 W/ {) N2 d, b: r) J9 P
JNIEXPORT jstring JNICALL Java_com_cygwinjni_android_MainActivity_StringFromJni
% m6 N. c+ [( M1 t: n (JNIEnv * env, jobject thiz)
, |' [9 m& f3 B4 i1 O* s{8 _5 H9 f0 Z8 [# D5 ]( x
return env->NewStringUTF("Hello from JNI !");6 Z- v7 S% m, g6 Y e
}1 d h% t! F1 F+ s- M* ]' o
7 T, N: U# y4 t' c/ \$ G#ifdef __cplusplus
8 ?1 D3 e0 J9 r6 G* n- v- k% ]}: n x5 \' s# g! i0 C
#endif
- G! Z5 M: U: c! y( s9 d* }& K; I2 Ycom_cygwinjni_android_MainActivity.h文件由javah -classpath命令生成;
1 [. l. d2 x/ c' U( `" x% j' W+ {4 x) X) X4 ?7 G: z6 o
8、 将Cygwin定位到jni目录下,输入ndk-build命令,会生成相应的.so库。 F* o* B1 i% r7 {9 B
3 }) m4 |0 }7 a3 O# A
如果有写入操作,需要:打开AndroidMainfest.xml ->选择Permissions->Add->UsesPermission->Name: android.permission.WRITE_EXTERNAL_STORAGE . |
|