Android NDK编译
2014-11-02 18:26
513 查看
Android NDK编译学习
1、Hello_Jni学习
在android-ndk-r8\samples的目录下有大量的NDK的测试用例,只需要在Eclipse中导入,即可以使用。不过想要在Eclipse中编译JNI,当然得配置一些东西。
首先,JDK的安装是少不了的,安装好JDK后,配置好JDK的环境变量:
在系统变量里点击新建,变量名填写JAVA_HOME,变量值填写JDK的安装路径,在这里就填写“C:\Program Files\Java\jdk1.6.0_26”了。
在系统变量里点击新建变量名填写CLASSPATH,变量值填写“.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar”。注意不要忘记前面的点和中间的分号。
在系统变量里找到Path变量,这是系统自带的,不用新建。双击Path,由于原来的变量值已经存在,故应在已有的变量后加上“;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin”。注意前面的分号。
再次,下载SDK,配置好环境变量:
ANDROID_SDK_HOME,变量值是android-SDK-windows的路径。
Path变量,变量值方框里输入.;%ANDROID_SDK_HOME%\platform-tools;%ANDROID_SDK_HOME%\tools;
最后在cmd中运行adb命令。
最后,下载NDK。
安装Eclipse,导入android-ndk-r8\samples\hello-jni的例子:
![](https://img-blog.csdn.net/20141102184332462?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTG9zdGhvbWU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
在HelloJni的工程目录下,会看到一个JNI的目录,该目录就是放C代码和Android.mk的地方,也是NDK编译的主目录。该例子主要是Java调用一个JNI方法,获取一个字符串,并显示在TextView上。下面就需要配置Builder了。
在工程-->右键-->Properties-->Builders,New一个Builder出来
![](https://img-blog.csdn.net/20141102184406736?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTG9zdGhvbWU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
点击Browse File System选择ndk目录下的ndk-build.cmd;然后点击BrowseWorkspace选择工程。
![](https://img-blog.csdn.net/20141102184437889?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTG9zdGhvbWU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
选择Refesh,选择如下:
![](https://img-blog.csdn.net/20141102184511242?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTG9zdGhvbWU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
选择Build Options,勾选如下
![](https://img-blog.csdn.net/20141102184540289?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5u<br/>4000<br/>ZXQvTG9zdGhvbWU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
选择Specify Resources,然后勾选需要编译的工程中的JNI目录。
![](https://img-blog.csdn.net/20141102184730425?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTG9zdGhvbWU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
然后保存,Eclipse就会自动去编译C代码了。最后会在libs-->armeabi目录下生成一个对应的.so库。
为了验证编译的.so是否可用,只需要在手机上run一把,如果首次链接手机,没有驱动,那么安装一个“豌豆荚”就可以了,当想要run的时候,一定要把豌豆荚给关了,在任务管理器中把豌豆荚的进程给干掉,因为它会占用adb,导致Eclipse链接不成功。
adb相关命令:adb kill-server adb start-server
2、NativeActivity测试用例
该例子是一个纯C代码的例子,调用egl相关api,改变屏幕的颜色。
android.mk配置:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := native-activity
LOCAL_SRC_FILES := main.c
LOCAL_LDLIBS := -llog -landroid -lEGL -lGLESv1_CM
LOCAL_STATIC_LIBRARIES := android_native_app_glue
include $(BUILD_SHARED_LIBRARY)
$(call import-module,android/native_app_glue)
android.xml配置:
修改AndroidMainfest.xml文件的内容为一下内容。唯一需要注意的就是<meta-data android:name="android.app.lib_name" android:value="droidblaster"/>标签中,value的值要和Android.mk 中的LOCAL_MODULE名称一致。
AndroidMainfest.xml的内容如下:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.packtpub.droidblaster"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="10"/>
<application android:icon="@drawable/icon"
android:label="@string/app_name">
<activity android:name="android.app.NativeActivity"
android:label="@string/app_name">
<meta-data android:name="android.app.lib_name"
android:value="droidblaster"/>
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
1、Hello_Jni学习
在android-ndk-r8\samples的目录下有大量的NDK的测试用例,只需要在Eclipse中导入,即可以使用。不过想要在Eclipse中编译JNI,当然得配置一些东西。
首先,JDK的安装是少不了的,安装好JDK后,配置好JDK的环境变量:
在系统变量里点击新建,变量名填写JAVA_HOME,变量值填写JDK的安装路径,在这里就填写“C:\Program Files\Java\jdk1.6.0_26”了。
在系统变量里点击新建变量名填写CLASSPATH,变量值填写“.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar”。注意不要忘记前面的点和中间的分号。
在系统变量里找到Path变量,这是系统自带的,不用新建。双击Path,由于原来的变量值已经存在,故应在已有的变量后加上“;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin”。注意前面的分号。
再次,下载SDK,配置好环境变量:
ANDROID_SDK_HOME,变量值是android-SDK-windows的路径。
Path变量,变量值方框里输入.;%ANDROID_SDK_HOME%\platform-tools;%ANDROID_SDK_HOME%\tools;
最后在cmd中运行adb命令。
最后,下载NDK。
安装Eclipse,导入android-ndk-r8\samples\hello-jni的例子:
在HelloJni的工程目录下,会看到一个JNI的目录,该目录就是放C代码和Android.mk的地方,也是NDK编译的主目录。该例子主要是Java调用一个JNI方法,获取一个字符串,并显示在TextView上。下面就需要配置Builder了。
在工程-->右键-->Properties-->Builders,New一个Builder出来
点击Browse File System选择ndk目录下的ndk-build.cmd;然后点击BrowseWorkspace选择工程。
选择Refesh,选择如下:
选择Build Options,勾选如下
选择Specify Resources,然后勾选需要编译的工程中的JNI目录。
然后保存,Eclipse就会自动去编译C代码了。最后会在libs-->armeabi目录下生成一个对应的.so库。
为了验证编译的.so是否可用,只需要在手机上run一把,如果首次链接手机,没有驱动,那么安装一个“豌豆荚”就可以了,当想要run的时候,一定要把豌豆荚给关了,在任务管理器中把豌豆荚的进程给干掉,因为它会占用adb,导致Eclipse链接不成功。
adb相关命令:adb kill-server adb start-server
2、NativeActivity测试用例
该例子是一个纯C代码的例子,调用egl相关api,改变屏幕的颜色。
android.mk配置:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := native-activity
LOCAL_SRC_FILES := main.c
LOCAL_LDLIBS := -llog -landroid -lEGL -lGLESv1_CM
LOCAL_STATIC_LIBRARIES := android_native_app_glue
include $(BUILD_SHARED_LIBRARY)
$(call import-module,android/native_app_glue)
android.xml配置:
修改AndroidMainfest.xml文件的内容为一下内容。唯一需要注意的就是<meta-data android:name="android.app.lib_name" android:value="droidblaster"/>标签中,value的值要和Android.mk 中的LOCAL_MODULE名称一致。
AndroidMainfest.xml的内容如下:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.packtpub.droidblaster"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="10"/>
<application android:icon="@drawable/icon"
android:label="@string/app_name">
<activity android:name="android.app.NativeActivity"
android:label="@string/app_name">
<meta-data android:name="android.app.lib_name"
android:value="droidblaster"/>
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
相关文章推荐
- Android NDK中编译Openblas库
- 在Ubuntu10.10下采用Android NDK r6b 编译开源项目ffmpeg0.8.1
- android ndk提高编译速度
- Android NDK开发扫盲及最新CMake的编译使用
- Android NDK学习--编译和调试(Ubuntu+Eclipse+NDK)
- android NDK编译gzip
- android NDK编译多个so文件
- Android NDK编译环境配置
- 在Ubuntu中用Android NDK编译FFmpeg
- 使用Android NDK编译ffmpeg
- android ndk-build 编译静态库libxx.a 以及Android studio openssl 静态库配置(cmake)
- Android NDK编译系统
- android ndk r9 移植 live555 ffmpeg2.0 sdl2.0.1最新库整合编译
- Android NDK 引入预编译库的方法
- Android NDK编译命令行程序,使用本地共享文件
- Android NDK 编译、使用动态库
- Android NDK ,hello-jni 中间件初级 (调用 和 编译)
- Android NDK 下编译FDK-AAC解码器
- eclipse里配置Android ndk环境,用eclipse编译.so文件
- Android NDK 交叉编译