找回密码
 注册
关于网站域名变更的通知
查看: 418|回复: 1
打印 上一主题 下一主题

举例:Cygwin的安装及在Android jni中的简单使用

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-1-26 10:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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 .

该用户从未签到

2#
发表于 2021-1-26 13:06 | 只看该作者
Cygwin的安装及在Android jni中的简单使用
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-24 19:36 , Processed in 0.171875 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表