EDA365电子论坛网

标题: 举例:Cygwin的安装及在Android jni中的简单使用 [打印本页]

作者: baqiao    时间: 2021-1-26 10:47
标题: 举例:Cygwin的安装及在Android jni中的简单使用

( A8 Y9 B" i( J/ U; w' g0 dCygwin是一个在windows平台上运行的类UNIX模拟环境,是cygnussolutions公司开发的自由软件。Cygwin是许多自由软件的集合,Cygwin的主要目的是通过重新编译,将POSIX系统上的软件移植到Windows上。Cygwin包括了一套库,该库在win32系统上实现了POSIX系统调用的API,还有一套GNU开发工具集(比如GCC,GDB),这样可以进行简单的软件开发,还有一些UNIX系统下的常见程序。Cygwin不支持Unicode,实际上,除了当前windows系统以及OEM codepages,Cygwin对其它字符集都不支持。
- l4 N' e% V* A7 @# \
1 |$ U; G1 q, Y) n* a! {1 s1、  从 http://cygwin.com/install.html下载setup-x86_64.exe ;) v- ~0 g8 D% {* ]6 _

, E! g% P) T# P1 ]. X/ \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(根据需要选择安装,也可全部安装),下一步->下一步(时间较长)->完成;
! V: |" @( l5 _5 |, u& O5 m; ~) a
3、  验证Cygwin是否安装成功:打开Cygwin,输入相关命令如,gcc -v,make –v;; a  s1 U2 D9 a( V/ L0 Q/ a

* I- T1 E! v8 L  Y! D% X. q4、  从https://developer.android.com/tools/sdk/ndk/index.html下载Android NDK,解压缩后将其存放到D:\ProgramFiles\Android\android-sdk\android-ndk-r9下;, f. X/ [# z5 l. O$ C& j1 s
) H8 L0 k( b1 e: s0 @9 A
5、  打开D:\ProgramFiles\cygwin64\home\Spring文件夹下的.bash_profile文件,在其末尾加入:ANDROID_NDK_ROOT=/cygdrive/d/ProgramFiles/Android/android-sdk/android-ndk-r9& j. p  H  O  X& d) V3 N; n0 b  P4 [! Z% F
: l' b! b5 @- v' [8 m* y5 P
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
/ ?2 Q) `5 b( r
+ C  L' D( `- v- }export ANDROID_NDK_ROOT PATH
: O4 D( N' }6 ~8 C( S
( T; B+ p5 E0 C6、  打开Cygwin,输入命令cd $ANDROID_NDK_ROOT,如果显示/cygdrive/d/ProgramFiles/Android/android-sdk/android-ndk-r9 ,说明配置成功;7 Q$ y5 I. Y  t8 j' g  K8 A6 R$ D
/ D/ Y( l2 ]% `5 z
7、  新建一个AndroidApplication Project:% v& z# I: e0 [5 k
0 v. c5 R+ o/ ?$ X* x  z  S' l
MainActivity.java:
  c1 a' ]4 F  ~% \$ {
" X1 L) f7 N6 Y" D9 o0 Ppackage com.cygwinjni.android;
/ m- n" h3 ^1 e5 n3 P# K
$ J- u) {) e, |* Y5 |1 N' F# w3 [import android.os.Bundle;
# M& |$ o( G0 Y7 |# V# l  himport android.app.Activity;" G9 e2 v% H# p
import android.view.Menu;
) w# Z* `/ E: `import android.widget.TextView;1 M+ O1 [" b% h" T

& U& p+ i* Y2 r3 W1 x/ g3 s
" ?2 e4 s! h/ H, j, o/ C" wpublic class MainActivity extends Activity {
8 a8 b7 w' C! F$ E0 H4 h& H$ W 7 s9 A) i, Q1 e" J4 m6 t. M
        @Override/ h( C, F7 u% b  \. c0 j
        protected void onCreate(Bundle savedInstanceState) {4 n; b; I2 j# b5 g/ {
                super.onCreate(savedInstanceState);7 p1 M8 _- J  T
                    TextView tv = new TextView(this);  
6 n; C! G) R' M                    tv.setText(StringFromJni());  8 ]6 r* D; M* ^- a/ T
                    setContentView(tv);  
2 D5 X, J' G! ~) @0 i        }
3 r3 ]; f) {7 g 2 K, b# l* o5 P
        public native String StringFromJni();
  T4 x- F6 j5 L  h" H$ W ; L- v8 ]" m# X9 A( Q; j3 c
        static{
: Z2 U( _+ f5 _5 H) v% D                System.loadLibrary("hello-jni");
& m* h2 D5 Z- J( E. A6 b! `        }: B6 A. v& m  b3 m+ Y
}
. V5 m! {  b# O6 z: G8 I/ k; _' x& C/ h! X* ^# E& _0 T, P$ e: w
Android.mk:" A$ N& u8 i4 I! ^: @2 q
LOCAL_PATH := $(call my-dir)
! E2 Z- p! Z9 k  kinclude $(CLEAR_VARS)% d9 X% t7 ~# q1 m6 ?3 A8 \" G
LOCAL_MODULE    := hello-jni
7 `" V4 j9 \4 v, n+ Q . M$ e9 q4 `: x, k0 e
LOCAL_SRC_FILES := com_cygwinjni_android_MainActivity.cpp$ Q3 `! q# w  ]

1 Y+ A% L2 b, g9 p( l9 x* xinclude $(BUILD_SHARED_LIBRARY)
" j; Y- O& J+ [! }; K
2 z' q& \* d0 k$ pcom_cygwinjni_android_MainActivity.cpp:
5 X) j' F% t7 C4 q$ i#include <string.h>
2 V' z2 r$ j' S$ H% H#include <jni.h>
9 o/ j) F# t$ w- s5 v* u% C7 @#include "com_cygwinjni_android_MainActivity.h"
1 _, e3 Y" e7 j) a9 A( v7 z ) z7 |& r5 n6 U' @2 h
#ifdef __cplusplus
7 ~- @5 R6 ?/ O: Iextern "C" {
2 {( E% E) w- j6 {#endif' i0 t, w7 a* i+ [: u

. }; [4 K8 O7 e+ v* C: B: N% B9 u: D. rJNIEXPORT jstring JNICALL Java_com_cygwinjni_android_MainActivity_StringFromJni$ A  b4 R* Z: ?% `
  (JNIEnv * env, jobject thiz). b% b: p4 Q: y6 [" X
{; Y6 z4 q9 J) T2 y4 U
     return env->NewStringUTF("Hello from JNI !");
0 ^  |" h3 P, Z4 M}
/ I7 f! C, u1 h3 `5 d+ ]. `
* v) n- N# [6 g& b- B4 Y#ifdef __cplusplus
% _  Y) Z* H5 w& v, x. `8 `}
. |+ Z& x6 i" {1 o/ A; v  H#endif
& @5 e+ F9 o5 z( A/ M' X2 h% ?com_cygwinjni_android_MainActivity.h文件由javah -classpath命令生成;! h2 ~4 c) ]/ L, V' J- B
. K& p6 C4 v& ]; i
8、  将Cygwin定位到jni目录下,输入ndk-build命令,会生成相应的.so库。
+ B+ M2 w" P9 |$ q% C
$ i6 P9 W# {* T( X6 b' f如果有写入操作,需要:打开AndroidMainfest.xml ->选择Permissions->Add->UsesPermission->Name: android.permission.WRITE_EXTERNAL_STORAGE .
作者: CCxiaom    时间: 2021-1-26 13:06
Cygwin的安装及在Android jni中的简单使用




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2