您的位置:首页 > 移动开发 > Android开发

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的例子:

          


    在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 android ndk