65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 Intel(R) C++ 编译器在 Android Studio 1.0.1 中构建原生 Android 应用

2015 年 4 月 7 日

CPOL

5分钟阅读

viewsIcon

16778

以下步骤提供了如何在 Android Studio 1.0.1 中设置、构建和运行新的原生应用程序的通用描述。

Intel® Developer Zone 提供跨平台应用开发工具和操作指南、平台和技术信息、代码示例以及同行专业知识,以帮助开发者进行创新并取得成功。加入我们的社区,获取 Android物联网Intel® RealSense™ 技术Windows 的最新信息,下载工具,获取开发套件,与志同道合的开发者分享想法,并参与黑客马拉松、竞赛、路演和本地活动。

目录

介绍

撰写本文时,当前的 Android Studio* 版本是 1.0.1。作为 Intel® Integrated Native Developer Experience (Intel® INDE) 的一部分的 Intel® C++ 编译器 for Android 支持 Intel INDE 2015 Update 1 中的 Android Studio 1.0.1。由于 Android Studio 1.0.1 不支持 Android NDK,因此本文提供了有关如何使用 Android NDK r10d 和 Intel C++ 编译器 for Android 构建原生 Android* 应用的说明。

Android Studio 使用 Gradle 作为其构建系统。撰写本文时,Gradle 在构建过程中会调用 NDK 构建系统。从 Android NDK r10 及更高版本开始,在安装 Intel INDE 后,Intel® C++ 编译器 for Android (ICC) 不再是 NDK 构建系统中的默认编译器。

以下步骤提供了如何在 Android Studio 1.0.1 中设置、构建和运行新的原生应用程序的通用描述。

如果您使用的是 Android Studio* 0.8.6,请参阅本文 使用 Intel(R) C++ 编译器在 Android Studio* 中构建原生 Android* 应用,了解如何使用 Intel C++ 编译器。

所需软件工具

成功安装 INDE 2015 Update 1 并集成 Android Studio 将确保您已安装所有必需的软件。

请参阅最新的 Intel(R) C++ 编译器 for Intel(R) Integrated Native Developer Experience 2015 的发布说明,了解详细的软件和系统要求。

本文中的说明使用了以下软件来定位 IA-32 和 Intel®-64 架构

  • Oracle* JDK 7(适用于 Windows x64 系统的原生 Intel-64 JDK)
  • Android SDK 20 或更高版本
  • NDK r10d(假定安装在:[ndk-dir])
  • Android Studio 1.0.1

请确保以下 Android NDK 目录已添加到环境变量 PATH 中(如果缺失,请添加)

  • C:\Intel\INDE\IDEintegration\NDK\build\tools
  • C:\Intel\INDE\IDEintegration\NDK

在 Android Studio* 1.0.1 中使用 Intel(R) C++ 编译器

安装适用于 Android 的 Intel C++ 编译器 15.0 后,以下工具链将安装到“[ndk-dir]\toolchains”文件夹中(默认目录为“C:\Intel\INDE\IDEintegration\android-ndk-r10d\toolchains”)

  • x86-icc
  • x86-icc15.0.X.YYY
  • x86_64-icc(如果 NDK 支持 64 位目标)
  • x86_64-icc15.0.X.YYY(如果 NDK 支持 64 位目标)

对于 NDK 低于 r9d 的版本: 安装后,默认的原生 C/C++ 编译器将是 Intel C++ 编译器。在 Android Studio 中使用 Intel C++ 编译器无需其他步骤。如果您想使用 GNU* gcc 来构建原生代码,请按照 将默认编译器从 Intel C++ 编译器改回为 x86 目标的 GCC 中的说明操作。

对于 NDK r10 到 r10d: 安装后,Intel C++ 编译器不是默认编译器。请按照下面的步骤 3、4、5 从 Android Studio 中使用 Intel C++ 编译器。

如果您安装了多个 Android NDK,请参阅本文 将适用于 Android 的 Intel(R) C++ 编译器与多个 Android NDK 集成中的说明。

现在,我们将创建一个新的 Android 项目,用于 Intel-64,并包含一个本地函数调用,以演示 Intel C++ 编译器的使用。

  1. 创建一个具有原生接口的新 Android 项目

    1. 打开 Android Studio,创建一个名为“nativeDemo”的新 Android 项目,使用默认设置。例如:

    2. 打开“app\src\main\java\MainActivity.java”,并在“MainActivity”类的末尾添加一个原生函数,如下所示:
      public native String getStringFromNative();

      您的文件现在应如下所示:

    3. 要构建您的“nativeDemo”项目,请选择:“Build > Make Project” 以准备使用“javah”。
    4. 从“View > Tools Windows > Terminal”打开终端窗口,并按照以下步骤运行“javah”并创建 jni 头文件:
      1. 在终端窗口中,导航到“src\main”子文件夹
        cd src\main
      2. 然后,要在 src\main\jni 文件夹下创建“com_example_nativedemo_app_MainActivit.h”,运行以下“javah”命令:
        javah -d .\jni -classpath C:\Intel\INDE\IDEintegration\android-sdk-windows\platforms\android-21\android.jar;..\..\build\intermediates\classes\debug com.example.mydemo.nativedemo.MainActivity

      例如:

    5. 在“Project”窗口中,将视图更改为“Project”,右键单击“src”文件夹,然后选择“Synchronize 'src'”。现在您可以在“src\main\jni”文件夹下看到头文件“com_example_mydemo_nativedemo_MainActivity.h”。
  2. 添加原生源代码:main.c

    1. 创建“main.c”:选择文件“com_example_mydemo_nativedemo_MainActivity.h”,使用复制/粘贴创建一个名为“main.c”的新文件,其中包含以下代码:
      #include "com_example_mydemo_nativedemo_MainActivity.h"
      
      JNIEXPORT jstring JNICALL
      Java_com_example_mydemo_nativedemo_MainActivity_getStringFromNative
        (JNIEnv * env, jobject obj)
      {
          #ifdef __INTEL_COMPILER_UPDATE
              return (*env)->NewStringUTF(env, "Hello from Intel C++ !");
          #else
              return (*env)->NewStringUTF(env, "Hello from default C++ !");
          #endif
      }
    2. 保存更改
    3. 现在,“jni”文件夹下有 2 个文件:com_example_mydemo_nativedemo_MainActivity.h 和 main.c

  3. 添加 make 文件:Android.mk

    1. 右键单击“jni”文件夹,选择“New > File”
    2. 键入“Android.mk”并单击“OK”。
    3. 将以下行添加到此文件中(请注意,LOCAL_SRC_FILES 应包含位于“jni”文件夹中的源文件)
      LOCAL_PATH := $(call my-dir)
      include $(CLEAR_VARS)
      
      LOCAL_MODULE    := nativeDemo 
      LOCAL_SRC_FILES := main.c 
      
      include $(BUILD_SHARED_LIBRARY)
  4. 添加 make 文件:Application.mk

    1. 右键单击“jni”文件夹,选择“New > File”
    2. 键入“Application.mk”并单击“OK”。
    3. 将以下行添加到此文件中
      # For IA-32
      #APP_ABI:=x86
      #NDK_TOOLCHAIN:=x86-icc
      #include $(BUILD_SHARED_LIBRARY)
      
      # For Intel-64
      APP_ABI:=x86_64
      NDK_TOOLCHAIN:=x86_64-icc
      include $(BUILD_SHARED_LIBRARY)
    4. [可选] 要更改编译器选项,请使用以下选项:
      APP_CFLAGS := -O3
  5. 配置您的应用程序以使用 make 文件运行 ndk-build

    1. 打开“app\build.gradle”文件
    2. 在文件顶部添加以下导入
      import com.android.build.gradle.tasks.NdkCompile
      import org.apache.tools.ant.taskdefs.condition.Os
    3. 在“defaultConfig”部分后添加以下行
      sourceSets.main {
          jniLibs.srcDir 'src/main/libs' //set .so files location to libs
      } 
      
      tasks.withType(NdkCompile) { // disable automatic ndk-build call
          compileTask -> compileTask.enabled = false
      }
      
      task ndkBuild(type: Exec) { // call ndk-build(.cmd) script 
          if (Os.isFamily(Os.FAMILY_WINDOWS)) {
              commandLine 'cmd', '/c', 'ndk-build.cmd', '-C', file('src/main').absolutePath            
          } else {
              commandLine 'ndk-build', '-C', file('src/main').absolutePath
          }
      }
      
      tasks.withType(JavaCompile) {
          compileTask -> compileTask.dependsOn ndkBuild
      }
    4. 在文件末尾添加以下行
      dependencies {
          compile fileTree(dir: 'libs', include: ['*.jar'])
      }
    5. 保存更改
    6. 现在构建项目:选择 [Build > Make Project]。您将在“main\libs”和“main\obj\local”文件夹下看到所有输出文件夹和文件“libmain.so”。
       
  6. 为 textview 小部件添加一个 ID“hello_textview”

    1. 打开 res\layout\activity_main.xml 并按如下所示修改 textview 小部件:
      <TextView
          android:text="@string/hello_world"
      	android:layout_width="wrap_content"
      	android:layout_height="wrap_content"
      	android:id="@+id/hello_textview" />
  7. ​更新“MainActivity.java”以将原生库调用连接到 UI textview 小部件

    1. public class MainActivity extends Activity {
          static { // load the native library "nativeDemo"
          System.loadLibrary("nativeDemo");
          }
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
      
                  // get the text string from native API, and display on the UI
              TextView tv = (TextView)findViewById(R.id.hello_textview);
              tv.setText(this.getStringFromNative());
          }
    2. 按 ALT + ENTER 导入 TextView 小部件并保存更改。
       
  8. 启动 Android 虚拟机“Intel-Nexus 7 x64”,然后单击“Run”按钮运行应用程序。

    这意味着使用的编译器是适用于 Android* 的 Intel C++ 编译器。

总结

现在您知道如何在 Android Studio 中使用 Intel C++ 编译器构建一个简单的原生 Android 应用。尝试将其用于您真实的本地应用程序,并告诉我们进展如何。

本文适用于
    产品: Intel® INDE Update 1 或更高版本
    主机操作系统: Windows (IA-32, Intel® 64)
    目标操作系统: Android* (IA-32, Intel® 64)

© . All rights reserved.