EDA365电子论坛网
标题:
举例:Cygwin的安装及在Android jni中的简单使用
[打印本页]
作者:
baqiao
时间:
2021-1-26 10:47
标题:
举例:Cygwin的安装及在Android jni中的简单使用
( A8 Y9 B" i( J/ U; w' g0 d
Cygwin是一个在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 s
1、 从 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. q
4、 从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 C
6、 打开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 P
package 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 h
import 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" w
public 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 k
include $(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* x
include $(BUILD_SHARED_LIBRARY)
" j; Y- O& J+ [! }; K
2 z' q& \* d0 k$ p
com_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: I
extern "C" {
2 {( E% E) w- j6 {
#endif
' i0 t, w7 a* i+ [: u
. }; [4 K8 O7 e+ v* C: B: N% B9 u: D. r
JNIEXPORT 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