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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
/ }  g% g7 U) E3 `3 j
Cygwin是一个在windows平台上运行的类UNIX模拟环境,是cygnussolutions公司开发的自由软件。Cygwin是许多自由软件的集合,Cygwin的主要目的是通过重新编译,将POSIX系统上的软件移植到Windows上。Cygwin包括了一套库,该库在win32系统上实现了POSIX系统调用的API,还有一套GNU开发工具集(比如GCC,GDB),这样可以进行简单的软件开发,还有一些UNIX系统下的常见程序。Cygwin不支持Unicode,实际上,除了当前windows系统以及OEM codepages,Cygwin对其它字符集都不支持。' d1 s) F+ c9 O

4 h/ N$ l# ?4 v5 ?4 [! b3 U9 x8 m# B1、  从 http://cygwin.com/install.html下载setup-x86_64.exe ;( k& w. l0 {, D) F" j

% \% q* E/ v. N0 W. X' G/ Y2、  将其存放到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(根据需要选择安装,也可全部安装),下一步->下一步(时间较长)->完成;. }  o! s+ Z+ m" n& {2 |- }2 J. A" ?* V
$ k. m* a9 ?( T1 ]) a/ ?% y+ k
3、  验证Cygwin是否安装成功:打开Cygwin,输入相关命令如,gcc -v,make –v;
" ^& G/ j0 e) H6 k0 ~& U) G: }3 N% b- ]
4、  从https://developer.android.com/tools/sdk/ndk/index.html下载Android NDK,解压缩后将其存放到D:\ProgramFiles\Android\android-sdk\android-ndk-r9下;* b) C- K' l7 r. W8 h" A) h

3 O6 [, w" R0 ]* E7 A5、  打开D:\ProgramFiles\cygwin64\home\Spring文件夹下的.bash_profile文件,在其末尾加入:ANDROID_NDK_ROOT=/cygdrive/d/ProgramFiles/Android/android-sdk/android-ndk-r9
, Q! W1 R8 K% w* C) q! A$ }3 M9 b
$ I! f+ ~3 _2 r& I2 D/ aPATH=/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& F) Q& H7 g! y) p2 x6 P2 i  n8 ^

# f' [0 \2 q9 k! K  Q0 |9 F5 Nexport ANDROID_NDK_ROOT PATH
7 {9 ~5 T4 B) c3 @& W
; B) s/ s( T7 T- _+ p) n) O( a6、  打开Cygwin,输入命令cd $ANDROID_NDK_ROOT,如果显示/cygdrive/d/ProgramFiles/Android/android-sdk/android-ndk-r9 ,说明配置成功;9 T' i. `, p7 R) N
* r! L  O) E( k  f. z/ e
7、  新建一个AndroidApplication Project:+ @: k5 C3 L( s7 r+ k- M
3 o9 Q" R7 R" X
MainActivity.java:" i  P% t  T7 j3 c0 \
, m; u1 `7 i% @) Q( r5 L4 Q
package com.cygwinjni.android;- J( g; Q4 i7 h/ I
! G" k3 a  t  k  x& @4 Y
import android.os.Bundle;
& ~7 v0 o) S( \6 r+ N  Limport android.app.Activity;
7 l" l' K. N6 M' `5 `( n% Y7 Wimport android.view.Menu;
0 W8 |- M( J8 r0 V2 E. I- }0 Qimport android.widget.TextView;. a! R3 k4 o- i, K
0 I: b/ ~3 f1 U, M+ `- k4 g9 H
9 L$ I$ @" _( N# d+ D6 D, Q
public class MainActivity extends Activity {  h: r5 M5 s8 H1 O6 X3 R

9 s. {' M/ k9 S% U5 j5 G% z( Y        @Override4 n2 [' E, t% b
        protected void onCreate(Bundle savedInstanceState) {
% B5 i" Z& q2 P+ U) F                super.onCreate(savedInstanceState);8 J4 n& x, e0 a/ y, y
                    TextView tv = new TextView(this);  
' [: x4 q7 V* a; P                    tv.setText(StringFromJni());  ' g' K8 A0 w6 Z$ M! E! k
                    setContentView(tv);  & R6 @8 `: ^+ E0 J  J- N& D
        }5 Y. z, s& E, D% R/ W! f8 w
# ?0 Q1 a5 F  `5 y
        public native String StringFromJni();
' L, ?3 v9 Q7 Y, _  J9 S
1 p4 H8 i! b2 a! n: [3 O( x, L) _        static{& f) N2 R" [) w. ~
                System.loadLibrary("hello-jni");
- R$ o4 L0 s# U1 `  Z. k8 f% O        }
  Z) p! s2 L) ?}6 q4 v& u6 B. p# X5 o
% U! }5 q; N0 d4 H/ z5 p
Android.mk:$ r+ p& e# q2 K
LOCAL_PATH := $(call my-dir)
- i5 M) _* W+ Hinclude $(CLEAR_VARS)
5 T. [6 a0 g6 I3 v8 ~LOCAL_MODULE    := hello-jni' W0 ]1 C9 }- G. T+ g/ ?
# Z% O4 B: j( R4 i9 I6 J$ y  D0 m
LOCAL_SRC_FILES := com_cygwinjni_android_MainActivity.cpp, v4 }8 V0 y  p/ A6 y6 G( w

: z) R. c9 F/ k+ j( Z+ Tinclude $(BUILD_SHARED_LIBRARY)" Z9 ^7 D' e+ d0 }3 U5 g' P

2 a, _% {/ n. A( Ocom_cygwinjni_android_MainActivity.cpp:
8 f6 q( j/ J# S# N' ^2 a#include <string.h>6 W1 A4 O7 |4 V# u* {
#include <jni.h>" z3 J9 s9 w# C) H& V9 Z+ [
#include "com_cygwinjni_android_MainActivity.h"
) d: Q* ^5 a* X/ E# J % w1 [# f4 M1 m  F5 A; g# f
#ifdef __cplusplus
, ]/ Z; t8 K7 o: z7 C9 [( s( |extern "C" {
: q* Y8 \. x) r#endif
* J( k3 N5 v5 G& `" h) U2 t
% K; I8 v* x* ], d# }6 H7 @JNIEXPORT jstring JNICALL Java_com_cygwinjni_android_MainActivity_StringFromJni
% y4 h: Y9 `4 e2 }4 q4 U  (JNIEnv * env, jobject thiz). F2 H* \' j  Z
{) g5 E% p# E8 h/ A1 c  W2 R  R
     return env->NewStringUTF("Hello from JNI !");( i& O% m. D1 O$ N$ f8 Q
}
. i; R# ~9 n( g6 y8 v& n
. P9 C% B2 h  _: W#ifdef __cplusplus: R( A! @* y% Y) ]! Z: n. c, Z
}
$ b4 b" `* i& b. Z5 W# S( e#endif
. G$ O% W2 s- e4 P7 acom_cygwinjni_android_MainActivity.h文件由javah -classpath命令生成;9 S2 }1 c( W8 B" n
3 j- O( d. P7 e' Y  d
8、  将Cygwin定位到jni目录下,输入ndk-build命令,会生成相应的.so库。
8 f; n+ t" m2 S. }7 g' x: ?$ J* i3 c# s6 `- m
如果有写入操作,需要:打开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 17:29 , Processed in 0.156250 second(s), 24 queries , Gzip On.

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

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

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