|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
7 a D: z$ _$ M+ B/ i8 L& ?
Cygwin是一个在windows平台上运行的类UNIX模拟环境,是cygnussolutions公司开发的自由软件。Cygwin是许多自由软件的集合,Cygwin的主要目的是通过重新编译,将POSIX系统上的软件移植到Windows上。Cygwin包括了一套库,该库在win32系统上实现了POSIX系统调用的API,还有一套GNU开发工具集(比如GCC,GDB),这样可以进行简单的软件开发,还有一些UNIX系统下的常见程序。Cygwin不支持Unicode,实际上,除了当前windows系统以及OEM codepages,Cygwin对其它字符集都不支持。- o c0 q, j- z" Y. h" s
( z' ~! f; P5 J6 ]
1、 从 http://cygwin.com/install.html下载setup-x86_64.exe ;/ Y. K% A; B5 f6 ^/ [& w3 ^! g; ?
s. B \/ G3 Y; T/ o H; N2、 将其存放到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(根据需要选择安装,也可全部安装),下一步->下一步(时间较长)->完成;8 ]% \# u H- F# D; V
6 h" N* r3 t3 N3 j
3、 验证Cygwin是否安装成功:打开Cygwin,输入相关命令如,gcc -v,make –v;
& x" N6 K9 K% g0 N2 ]
2 u1 T/ ^& I- M4、 从https://developer.android.com/tools/sdk/ndk/index.html下载Android NDK,解压缩后将其存放到D:\ProgramFiles\Android\android-sdk\android-ndk-r9下;5 I8 H4 d& r4 J& C$ c+ U0 K* @) @
/ ]' A7 E& ]" A
5、 打开D:\ProgramFiles\cygwin64\home\Spring文件夹下的.bash_profile文件,在其末尾加入:ANDROID_NDK_ROOT=/cygdrive/d/ProgramFiles/Android/android-sdk/android-ndk-r9
; p) y1 w1 n9 j
; ]8 W; ?8 s5 S: V5 K" f, a1 bPATH=/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
. Z3 i4 g7 T2 U, w- @, v
' `/ V5 Y$ P8 \; ~2 R" A5 k4 Vexport ANDROID_NDK_ROOT PATH
7 V0 s0 V( Z) J1 ?, k# N2 ^5 B& F5 z; V$ L
6、 打开Cygwin,输入命令cd $ANDROID_NDK_ROOT,如果显示/cygdrive/d/ProgramFiles/Android/android-sdk/android-ndk-r9 ,说明配置成功;
/ Y1 e) S) g; L0 Q' ~- X4 _ M( B& n+ z9 K3 [
7、 新建一个AndroidApplication Project:* [& S8 @: a( o; Z
3 ~+ j. m4 r# C% ?& F" H- C) I
MainActivity.java:6 k" ]+ P) m0 x) T6 L: u5 [9 Z! M$ M
$ z2 L8 i, w: H% b9 ?package com.cygwinjni.android;
5 @3 A: y |) |# m9 m/ w n 5 _4 t' V: ^. g' d* b
import android.os.Bundle;
4 w/ n N; P' f/ R8 i p% _import android.app.Activity;; l# T) f( w; K
import android.view.Menu;; `% [; R/ `6 t7 I, W: ^( F; d
import android.widget.TextView;7 t, F$ b- ?) o# B- Q
3 B- ?: o) H( i7 i) c( G! S: h
5 I) }5 \7 I6 G1 W; {3 x3 Gpublic class MainActivity extends Activity {
* C4 J& k8 _8 V1 h7 U. \0 O$ J* |% m" ? ) _# @7 i5 A6 h+ r/ o& z
@Override
( G3 Z! @" c' F9 b, f protected void onCreate(Bundle savedInstanceState) {
3 i! t# i8 z" C3 B. B! j: @5 W super.onCreate(savedInstanceState);7 C8 t9 s ` Z% j* H
TextView tv = new TextView(this); ; A3 R0 q* h$ n' @
tv.setText(StringFromJni()); ! _" s) ]7 \. [" d, ~
setContentView(tv);
. b1 Q1 y, A, X c: @3 t$ F }- R) P# _5 j- w. E" n: H* ]( ]
) `1 x) ~# b( |$ J% c) ^ public native String StringFromJni();: A6 p4 q; f4 m x' A
* J! r) E/ j) ], h static{; P* N* [' K4 P* ?
System.loadLibrary("hello-jni");
_" G, C8 } G( `, ~# X; V }
4 H- R3 ^" R! N. H% r5 B; @$ A}
& @! k$ n4 V, |+ ~) i" S3 u" a* p" e3 M+ r( \ f
Android.mk:
8 }- P1 r' g7 k( p. A, X; {LOCAL_PATH := $(call my-dir)
, j, d! ~8 K9 {$ \6 y9 zinclude $(CLEAR_VARS)
* b4 Z5 j I- j9 a% `LOCAL_MODULE := hello-jni
2 G& V6 e/ m4 [$ X! N3 i
8 z" ^0 O* B+ I3 }LOCAL_SRC_FILES := com_cygwinjni_android_MainActivity.cpp2 N2 f% J" d" _
) f+ a0 p. a0 Q5 Z8 o& Y/ A- rinclude $(BUILD_SHARED_LIBRARY)7 b# R( u# f4 H4 ^
g: m* f/ C7 d3 M7 Y! Qcom_cygwinjni_android_MainActivity.cpp: 0 z: ^" ?- b) |% k: U! d, o6 Z
#include <string.h>
0 O) i. H8 L% q, R; i0 i( |1 O#include <jni.h>
" A9 i$ j+ V L3 ~- O# s! u% M#include "com_cygwinjni_android_MainActivity.h"
" w$ a: K ]- n& X : g( a7 y e( Y+ J
#ifdef __cplusplus
# f M4 W* W& w2 T) o9 U* u( T3 Q. Dextern "C" {9 t/ ^+ d6 O# t6 l# ^( `
#endif
1 `$ @6 N0 T D" C
) T! Q5 v, k' [8 tJNIEXPORT jstring JNICALL Java_com_cygwinjni_android_MainActivity_StringFromJni% R* m/ q- t: O5 k3 N0 Y+ h2 b
(JNIEnv * env, jobject thiz)
- f; J/ I# r; ^ e& G; r4 V" J{+ l5 p S0 s3 R& e+ q1 ?
return env->NewStringUTF("Hello from JNI !");$ B8 z$ b! u/ o8 O
}
% }6 r% o2 t: v J 7 a" q" V8 F" o0 Y% |" w; n9 u! {
#ifdef __cplusplus/ q& J: |/ I; Y2 i4 Y( Z
}
. |1 i& a# f0 b; j#endif
9 h5 I. n; M9 Z5 S; j* _) l+ ~com_cygwinjni_android_MainActivity.h文件由javah -classpath命令生成;7 q2 j4 j& {9 z/ Q7 \1 Z3 u, q" H
7 I& M4 O9 g9 x) X
8、 将Cygwin定位到jni目录下,输入ndk-build命令,会生成相应的.so库。
2 @0 C" ^0 M0 L$ ?2 v( q1 U5 s5 k% j6 W0 ]; b4 Y
如果有写入操作,需要:打开AndroidMainfest.xml ->选择Permissions->Add->UsesPermission->Name: android.permission.WRITE_EXTERNAL_STORAGE . |
|