从网上看了一篇使用andriod的toolchain在cygwin上来建立android的开发环境,但是在vista上编译始终失败,在xp上能够成功。但是编译的时间比较长,而且对于新手来说也比较麻烦,难道就没有简单的方法吗?google已经把andriod的ndk已经放出来了,所以我就想着打它的主意了,把它配置一下,就能来开发c的程序了。旁边小伙肯定笑了,“搞啥?,有病啊,ndk就是一个开发native code的环境。”大哥,我当然知道了,虽然使用ndk来开发native code相对容易,但是它的.mk文件我看的是云里雾里,我本来想调用自己写的另外一个so库,都不知道在.mk文件里如何写,我现在也懒的去看ndk里面的mk文件,等哪天(哪天?天晓得是哪一天)有空了好好研究一下。好了,闲话少说,开练吧。首先安装cygwin,这个网上的教程多的是,就不说了,接着下载android ndk,这个在andriod的官网上就有了,然后下载一个从android模拟器里取system lib的工具busybox,然后调用命令
$adb push busybox /dev/sample/busybox
$adb shell chmod 777 /dev/sample/busybox
$adb shell ./dev/sample/busybox tar -cf /dev/sample/libs.tar /system/lib
$adb pull /dev/sample/libs.tar libs.tar
这样就将模拟器下的 /system/lib 目录的所有库(so)文件打包并下载下来了,解压libs.tar就得到了我们所需要的所有库文件。
接着将所有的文件copy 到 $(NDK)/build/prebuilt/windows/arm-eabi-4.2.1/lib/gcc/arm-eabi/4.2.1,好了,这个时候基本的配置工作就结束了,怎么样简单多了吧。
接着编写一个简单的c文件 tutorial01.c
#include <stdio.h>
int getinformation()
{
return 0;
}
然后编写一个Makefile文件
CC = /cygdrive/f/software/android/android-ndk-1.5_r1/build/prebuilt/windows/arm-eabi-4.2.1/bin/arm-eabi-gcc
CFLAGS = -g -O2 -fPIC -DANDROID -I ./ -I ../ -I F:/software/android/android-ndk-1.5_r1/build/platforms/android-1.5/arch-arm/usr/include
SDFLAGS = -nostdlib -Wl,-T,armelf.xsc -Wl,-soname,$@ -Wl,-shared,-Bsymbolic -lc
CRT_OBJS= -lz -lm
all: libtutorial01.so
libtutorial01.so: tutorial01.o
$(CC) $(SDFLAGS) -o $@ tutorial01.o $(CRT_OBJS)
tutorial01.o: tutorial01.c
然后make,这个时候会报错 can't find "armelf.xsc", 在ndk的目录里搜索一下,搜到之后copy 到$(NDK)/build/prebuilt/windows/arm-eabi-4.2.1/lib/gcc/arm-eabi/4.2.1,然后make,成功。这样一个简单的so文件就生成了,这个时候如果想在android的虚拟机上运行,我们还需要给它包装一下。再编写一个文件test01.c,在这里是使用dl动态加载so文件,静态加载始终有问题,搞不清楚android是如何搜索目录,而且现在只能用绝对路径,这个问题还得仔细研究研究。
#include <string.h>
#include <jni.h>
jint
Java_com_example_testffmpeg_testffmpeg_getinformation( JNIEnv* env,
jobject thiz )
{
void* filehandle = dlopen("/data/data/com.example.test/lib/libtutorial.so", RTLD_LAZY );
int ll = -1;
if(filehandle)
{
int( * getinformation ) ();
getinformation = dlsym(filehandle, "getinformation");
if( getinformation )
{
ll = getinformation();
}
else
{
ll = -3;
}
dlclose(filehandle);
filehandle=0;
}
else
{
ll = -2;
}
return ll;
}
同样再来一个Makefile文件
CC = /cygdrive/f/software/android/android-ndk-1.5_r1/build/prebuilt/windows/arm-eabi-4.2.1/bin/arm-eabi-gcc
CFLAGS = -g -O2 -fPIC -DANDROID -I ./ -I ../ -I F:/software/android/android-ndk-1.5_r1/build/platforms/android-1.5/arch-arm/usr/include
SDFLAGS = -nostdlib -Wl,-T,armelf.xsc -Wl,-shared,-Bsymbolic -Wl,-soname,$@ -lc -L ../tutorial
CRT_OBJS= -lz -lm -ldl
all: libtest01.so
libtest01.so: test01.o
$(CC) $(SDFLAGS) -o $@ test01.o $(CRT_OBJS)
ok, make一下成功。好了,接下来使用andriod的sdk写一个简单的activity, testapp来测试其运行情况,以下是test01.java的代码。
package com.example.test;
import android.app.Activity;
import android.widget.TextView;
import android.os.Bundle;
public class test01 extends Activity
{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
/* Create a TextView and set its content.
* the text is retrieved by calling a native
* function.
*/
TextView tv = new TextView(this);
// tv.setText( stringFromJNI() );
Integer ll = getinformation();
String lls = ll.toString();
tv.setText(lls);
setContentView(tv);
}
/* A native method that is implemented by the
* 'hello-jni' native library, which is packaged
* with this application.
*/
public native int getinformation();
/* this is used to load the 'hello-jni' library on application
* startup. The library has already been unpacked into
* /data/data/com.example.HelloJni/lib/libhello-jni.so at
* installation time by the package manager.
*/
static {
System.loadLibrary("test");
}
}
在eclipse中运行,在模拟器上显示0,就表示成功了。
busybox在此下载https://sites.google.com/site/anakia/Home/android-native01/busybox?attredirects=0
例子代码在此下载:https://sites.google.com/site/anakia/Home/android-native01/samples.zip?attredirects=0
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/anakiagmail/archive/2009/08/13/4441048.aspx
分享到:
相关推荐
个人认为使用Android Studio作NDK开发是必然趋势,所以本文将简单介绍如何在Android Studio上实现NDK开发。 简介 JNI JNI 是Java Native Inteface的缩写,是Java中定义的一种用于连接Java和C/C++接口的一种实现方式...
目 录 1 Cygwin 1.1 Cygwin下载 1.2 Cygwin安装 2 NDK 2.1 NDK下载 2.2 Cygwin配置NDK ...4 Android项目NDK环境配置 4.1 .so文件Builder 4.2 导入include文件及编译 4.3 Native向logcat输出调试信息
原生NDK的公布可以让开发者更加直接的接触Android系统资源,并使用传统的C或C++语 言编写程序,并在程序封包文件(.apks)中直接嵌入原生库文件。NDK的公布让原来从事C语言 开发者也参与到Android平台,也让java...
NDK全称:Native Development Kit。 1、NDK是一系列工具的集合。 * NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者的帮助是巨大的。 ...
一、NDK与JNI简介 NDK全称为native development kit本地语言(C&C++)开发包。而对应的是经常接触的Android-...Android开发中使用NDK的原因: 1、众所周知,利用SDK编写的代码,生成的APK,很容易就可以反编译了,安全
具链主要用于编译针对ARM64架构(即AARCH64)的Android操作系统和应用的...开发NATIVE代码库:对于需要使用Android NDK(Native Development Kit)开发性能敏感的应用或者游戏,此工具链提供编译这些应用所需的环境。
自己在android studio 环境下集成ndk 、 cmake 、LLDB 等插件 开发的一个demo ; 可以直接debug到c端代码,eclipse一般追踪不到,遇到c端出问题手机直接一个crash,,,想要了解android studio 下如何进行c 开发的...
在之前的博客中已经为大家介绍了,如何在...打开开发环境eclipse,在左侧空白区域,右键单击创建Android工程(非常简单,不再赘述)。 第二步,编译头文件 打开我们的主Activity,在里面定义一个native类型的方法: pu
Android提供了NDK工具,用来编译native代码(c/c++),该工具配置好了相关的交叉编译环境和工具链,只需要你简单地编写几个.mk文件即可将你的c/c++代码编译为Android的java工程/Android手机可以识别、加载和运行的库...
自己配置多个安卓 SDK NDK JAVA 环境路径。然后通过脚本批处理更换环境变量。以达到工作中快速切换环境的目的。附件里我放的两个 环境变量是我本机的 cocos2d-x android开发环境 和 react native 的安卓环境
JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++)。从Java1.1开始,JNI标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地...
主要步骤按官方文档实现,这里只记录遇到的一些小坑 ...以上这篇浅谈react-native热更新react-native-pushy集成遇到的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持软件开发网。
Android 开发高手课 课后练习(1) 一、Chapter01 崩溃 https://time.geekbang.org/column/article/70602 https://github.com/AndroidAdvanceWithGeektime/Chapter01 1、遇到native cash时,生成.dmp文件 先检查sdk/...
简单介绍了开发环境搭建以及利用Android程序框架实现此应用程序的过程,同时详细阐述了利用JNI( Java Native Interface) 调用OpenCV相关函数的具体步骤,以及采用Android NDK( Native Development Kit)生成共享库的...
c4droid是款Android设备上的C/C++程序IDE(集成开发环境),默认以tcc(tiny c compiler)为编译器,可以选择安装gcc插件(20mb,只有root用户可以使用),选用gcc后,可以用sdl(简单直控媒体层库,需安装sdl plugin ...
Hippy的设计是面向传统Web开发者的,特别是之前有过ReactNative和Vue的开发者用起来会更为顺手,Hippy致力于让前端开发跨端App更加容易。 到目前为止,腾讯内已经有了18款流行App在使用Hippy框架,每日触达数亿用户...
标准笔记iOS & 安卓应用是您的笔记、想法和生活工作的安全场所。... 如果您想构建 Android 应用程序,则需要安装 Android NDK。 我们使用来自 Libsodium 加密库的本机代码来实现高性能。 您可以在
NDK:r14b(尽量使用该版本) Opencv3.4.1 android sdk (1)新建工程OpenCVDemo,选择,一定要选择Native c++类型,最后要选c++14支持。 (2)File->Project Structure->SDK Location,设置这3个路径,NDK选择r14b。 ...
本套课程共分为三部分,当前为第一部分,主要包括内容:1、JNI名词释义2、JNI环境搭建3、Native项目解析4、编译工具使用5、边学边实战,从易到难,循序渐进适合人群:1、有一定Android基础,零JNI基础的学员;...