一个小玩具:NDK编译SDL的例子

NDK编译SDL

准备:

硬件

一台电脑,实验在Lenovo T430

一个Android设备,实验在 三星S3/A7

编译环境:

Ubuntu 14.04 (ant\java等命令必须支持)


工具包:

NDKhttps://dl.google.com/android/ndk/android-ndk32-r10b-linux-x86_64.tar.bz2

SDKhttps://dl.google.com/android/adt/adt-bundle-linux-x86_64-20140702.zip

SDLhttp://www.libsdl.org/release/SDL2-2.0.3.tar.gz


步骤:

解压SDL:

tar -xvzf SDL2-2.0.3.tar.gz

cd ~/Work/study/ffmpeg/SDL2-2.0.3


解压NDKSDK

SDK路径:/opt/adrd-stuff/adt-bundle-linux-x86_64-20130514/sdk

NDK路径:/opt/adrd-stuff/android-ndk-r10b



编译过程很简单,有下面两种方式:(请认真阅读SDL2-2.0.3/README-android.txt

1.直接编译SDL里面的一个例子:

2.自己定义一个APK


1.直接编译SDL里面的一个例子,两步:

1.配置build-scripts/androidbuild.sh里面的两个路径,如下:

#NDKBUILD=`which ndk-build`

NDKBUILD="/opt/adrd-stuff/android-ndk-r10b/ndk-build"


#ANDROID=`which android`

ANDROID="/usr/local/share/adt-bundle-linux-x86_64-20140702/sdk"

2. 直接运行命令

cd build-scripts

./androidbuild.sh org.libsdl.testgles ../test/testgles.c


2. 自己定义一个APK

cd android-project/jni/src/

仿照test/testgles.c,写一个含有main函数的c文件YourSourceHere.c

实验可以直接拷贝, 依次执行下面命令:

###pwd: android-project/jni/src/

cp ../../../test/testgles.c YourSourceHere.c

cd ../jni

ln -s /home/zhou/Work/study/ffmpeg/SDL2-2.0.3/ SDL

/opt/adrd-stuff/android-ndk-r10b/ndk-build

cd ..

ant debug

这时会在bin/


运行APK

adb install ../SDL2-2.0.3/build/org.libsdl.testgles/bin/org.libsdl.testgles-debug.apk


adb install ../SDL2-2.0.3/android-project/bin/SDLActivity-debug.apk




这时你能看到一个旋转的彩色正方形,截图如下



 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


遇到的问题:

NDK版本:

32bits小机用:android-ndk32-r10b-linux-x86_64.tar.bz2

64bits小机用:android-ndk64-r10b-linux-x86_64.tar.bz2

64bits编译出来的APKS3上面运行,会有闪退的现象,

logcat提示如下:

E/dalvikvm(15444): dlopen("/data/app-lib/org.libsdl.app-1/libSDL2.so") failed: dlopen failed: cannot locate symbol "signal" referenced by "libSDL2.so"...

W/dalvikvm(15444): Exception Ljava/lang/UnsatisfiedLinkError; thrown while initializing Lorg/libsdl/app/SDLActivity;

W/dalvikvm(15444): Class init failed in newInstance call (Lorg/libsdl/app/SDLActivity;)

E/AndroidRuntime(15444): Process: org.libsdl.app, PID: 15444

E/AndroidRuntime(15444): at org.libsdl.app.SDLActivity.<clinit>(SDLActivity.java:49)

W/ActivityManager( 837): Force finishing activity org.libsdl.app/.SDLActivity

 

 

 

 

 

 

转载于:https://www.cnblogs.com/baopu/p/4732736.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值