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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
5 q3 L+ B2 }% f1 ]
Cygwin是一个在windows平台上运行的类UNIX模拟环境,是cygnussolutions公司开发的自由软件。Cygwin是许多自由软件的集合,Cygwin的主要目的是通过重新编译,将POSIX系统上的软件移植到Windows上。Cygwin包括了一套库,该库在win32系统上实现了POSIX系统调用的API,还有一套GNU开发工具集(比如GCC,GDB),这样可以进行简单的软件开发,还有一些UNIX系统下的常见程序。Cygwin不支持Unicode,实际上,除了当前windows系统以及OEM codepages,Cygwin对其它字符集都不支持。0 S* r& x  T9 i* A% Z
" ?4 k( n. Y# Z: E
1、  从 http://cygwin.com/install.html下载setup-x86_64.exe ;* N: F$ m" K5 D8 t# b. m
% T7 R: G9 c. U; p2 Y
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(根据需要选择安装,也可全部安装),下一步->下一步(时间较长)->完成;
# L$ X* A1 l8 r4 a) }( a5 J2 s  j, T% R) T/ @2 J
3、  验证Cygwin是否安装成功:打开Cygwin,输入相关命令如,gcc -v,make –v;! g% F1 l& b% u# s: _1 u

/ W; Q4 f2 y* ~  C1 m4、  从https://developer.android.com/tools/sdk/ndk/index.html下载Android NDK,解压缩后将其存放到D:\ProgramFiles\Android\android-sdk\android-ndk-r9下;" g  J( y, z' h. W

! y, r/ u6 [+ @4 {7 h: m5、  打开D:\ProgramFiles\cygwin64\home\Spring文件夹下的.bash_profile文件,在其末尾加入:ANDROID_NDK_ROOT=/cygdrive/d/ProgramFiles/Android/android-sdk/android-ndk-r9, e& R0 m3 {% Q
4 Y0 Z9 {3 }* d2 Z! V' m
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
/ l  X0 F1 Y( u) g( C
& W( z. A/ T* l6 j2 w/ lexport ANDROID_NDK_ROOT PATH0 A& w6 K* w$ d/ }

" I$ e3 G% s$ }, z6、  打开Cygwin,输入命令cd $ANDROID_NDK_ROOT,如果显示/cygdrive/d/ProgramFiles/Android/android-sdk/android-ndk-r9 ,说明配置成功;$ r9 n( y/ ]2 y/ h" B' U

' T$ `0 ]' ]) s, M' g5 q1 B7、  新建一个AndroidApplication Project:
  F' U7 ^9 z8 s5 _1 l, U/ O7 V' P$ W/ ~5 Q% B, e& t+ L* ~
MainActivity.java:
  W% S1 V* s) M6 W8 X6 K* Z. i: a
9 J9 j9 V8 b3 t! a# y+ V( Spackage com.cygwinjni.android;& F% H6 R) T+ {' n/ [5 h2 k( @3 S

5 T& W5 P. B5 E6 B& _3 Y: wimport android.os.Bundle;
1 i+ g) g4 i: ]1 K/ simport android.app.Activity;( t# ~. q0 m# F) H4 |
import android.view.Menu;& C) i2 z/ S  n6 [! W% o0 Y
import android.widget.TextView;( A5 v% ?" x4 h0 _

8 V( f0 {# u$ u9 c$ ?# r' ^ * O: g8 o+ U/ c7 G
public class MainActivity extends Activity {$ }! G* z2 w6 c) D0 }4 h
: f, b1 J' [, K) R/ N2 m& z) z
        @Override2 a! g+ W: H  f/ G8 A
        protected void onCreate(Bundle savedInstanceState) {
% J& a# K6 @+ _                super.onCreate(savedInstanceState);- r1 @8 G( z+ d; ~. ]8 m: v3 B
                    TextView tv = new TextView(this);  ; T6 Y& {0 o. A, h
                    tv.setText(StringFromJni());  
8 Z# `2 Y: s5 B* o2 G# @                    setContentView(tv);  
7 p* T7 T7 J8 f- w0 o  r        }+ ^1 T! W; ]6 q3 H6 W- I- g' C
; n0 K8 _3 _( [! |
        public native String StringFromJni();
2 |3 i1 }# [( j  o0 k, ?6 G, a + z1 f# ]2 [6 ?5 O9 w4 r- C
        static{
) P' y2 c! X/ F# U( H                System.loadLibrary("hello-jni");4 k  D& E% J, J$ o* }/ u7 i
        }
9 Y# Z6 r% x. T}2 M+ b) E& C; R( q/ W5 f0 h
2 x( v0 K# [" L
Android.mk:
4 L. Y7 d; q# |9 |. NLOCAL_PATH := $(call my-dir)2 O- [' |; p/ _. n
include $(CLEAR_VARS)
+ S7 j+ W- y6 r( aLOCAL_MODULE    := hello-jni
9 s1 o- i; @! L
* O0 }* U+ ~& V8 \: e7 P0 ^" @LOCAL_SRC_FILES := com_cygwinjni_android_MainActivity.cpp
, ~9 f) M3 {5 N8 b
6 P5 k2 l0 v  d) m8 e* `include $(BUILD_SHARED_LIBRARY)2 B: g* l* \# L% ?4 g5 b: ]
& N( |9 P7 j7 R' M6 m$ n. b
com_cygwinjni_android_MainActivity.cpp: " G* i: Y1 s8 `$ [* d) p
#include <string.h>
' {# G# a3 M4 n0 Y6 E#include <jni.h>/ `0 @. `6 @6 w- A  l3 u
#include "com_cygwinjni_android_MainActivity.h"/ T3 w! H8 T3 z. O8 [
! P7 L, M* P% r& W+ ]
#ifdef __cplusplus* t7 J4 K2 i( e  B' b: r
extern "C" {
' X( z! |- h$ _#endif. m  \( [/ W9 Z4 H

; }* E' Q: F: w. G9 w2 ^2 }JNIEXPORT jstring JNICALL Java_com_cygwinjni_android_MainActivity_StringFromJni( k2 K4 q- C! @' ]0 `7 Z
  (JNIEnv * env, jobject thiz), c8 M0 Q' a$ R. q0 b! x/ P- [9 E
{$ B) i$ y! }, ~6 ]2 e
     return env->NewStringUTF("Hello from JNI !");
- [& m# `% B! G# d  X$ e8 O, ?) [& W}% p( v2 d, ^: c$ q3 a
, s+ w- Z2 x8 C! T. Q% A' ^0 `" q
#ifdef __cplusplus
) ?- n; b. e' R, v7 F}8 H& q7 G% i# Q6 _) m, ~
#endif
' t0 l$ S; ~2 h( r# ?9 _9 V- Jcom_cygwinjni_android_MainActivity.h文件由javah -classpath命令生成;
+ |4 {8 @2 B3 |7 ^  T- D9 K8 n
8、  将Cygwin定位到jni目录下,输入ndk-build命令,会生成相应的.so库。( y) r6 P  M% J8 ^& ?# t
9 ~6 C7 D1 I" U3 Z! m( Y
如果有写入操作,需要:打开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:14 , Processed in 0.156250 second(s), 24 queries , Gzip On.

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

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

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