Создание нативных Android-приложений с использованием компилятора Intel C++ Compiler в Android Studio 1.0.1

от автора

На момент написания этого текста текущей версией Android Studio была версия 1.0.1. Компилятор Intel C++ Compiler for Android, будучи частью Intel Integrated Native Developer Experience (Intel INDE), поддерживает Android Studio 1.0.1 в Intel INDE 2015 Update 1. Поскольку Android Studio 1.0.1 не поддерживает Android NDK, в этой статье описаны шаги для создания нативного Android-приложения с использованием Android NDK r10d и компилятора Intel C++ Compiler for Android. Поехали!

Android Studio в качестве системы сборки использует Gradle. На момент написания статьи Gradle в процессе построения вызывала систему NDK. В Android NDK r10 и более поздней версии после инсталляции Intel INDE компилятор Intel C++ Compiler for Android (ICC) не является более используемым по умолчанию компилятором в системе построения NDK.

Представленные ниже шаги дают общее описание подготовки, построения и выполнения нативного приложения в Android Studio 1.0.1.

Если вы используете Android Studio 0.8.6, почитайте статью «Построение нативных Android-приложений с использованием компилятора Intel C++ Compiler в Android Studio», где рассказывается о применении Intel C++ Compiler.

Требуемые программные инструменты

Успешная инсталляция INDE 2015 Update 1 с Android Studio Integration гарантирует, что вы располагаете всем необходимым программным обеспечением. Детальные требования к программному обеспечению и системе описаны в документе Intel C++ Compiler Release Notes for Intel Integrated Native Developer Experience 2015.

Приведенные в данной статье инструкции предполагают использование следующего ПО для архитектуры IA-32 и Intel-64:

  • Oracle JDK 7 (нативный Intel-64 JDK для систем Windows x64)
  • Android SDK 20 или старше
  • NDK r10d (предполагается инсталляция в [ndk-dir] )
  • Android Studio 1.0.1

Убедитесь, что в переменную среды PATH добавлены следующие директории Android NDK (если они отсутствуют, добавьте):

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

Использование компилятора Intel C++ Compiler в Android Studio 1.0.1

После инсталляции Intel C++ Compiler 15.0 for Android в папку «[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++ Compiler. Дополнительных шагов для использования Intel C++ Compiler с Android Studio не требуется. Ели вы хотите для построения нативного кода использовать GNU gc, следуйте инструкциям в «Замена компилятора по умолчанию с Intel C++ Compiler на GCC для целевых приложений x86».

Для NDK r10 — r10d: компилятор Intel C++ после инсталляции не является компилятором по умолчанию. Чтобы использовать Intel C++ Compiler из Android Studio, следуйте шагам 3, 4, 5 ниже.

Если у вас установлено несколько Android NDK, следуйте инструкциям в статье «Интеграция Intel C++ Compiler for Android с несколькими Android NDK».

Теперь создадим новый проект Android для Intel-64 с нативным вызовом функции, продемонстрировав тем самым использование компилятора Intel C++ Compiler:

1. Создание нового проекта Android с нативным интерфейсом:

1. Откройте Android Studio, создайте новый Android-проект «nativeDemo» с параметрами по умолчанию, например:

image

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:
a) В терминальном окне перейдите в подпапку «src\main»:

cd src\main

b) Чтобы создать «com_example_nativedemo_app_MainActivit.h» в папке src\main\jni, выполните следующую команду «javah» cmd:

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», используйте волшебные клавиши copy/paste для создания нового «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» у вас два файла: 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. Сконфигурируйте свое приложение для выполнения ndk-build с помощью make-файлов

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]. Вы увидите все выходные папки и файлы «libmain.so» в папках «main\libs» и «main\obj\local».

6. Добавьте ID «hello_textview» в виджет textview

Откройте «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 вызов нативной библиотеки:

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());     }

Для импорта виджета TextView и сохранения изменений нажмите ALT+Enter.

8. Запустите виртуальную машину Android Virtual Machine «Intel-Nexus 7 x64» и выполните приложение, щёлкнув кнопку «Run».

image

Это означает, что был использован компилятор Intel C++ Compiler for Android.

The end

Теперь вы знаете, как с помощью Intel C++ Compiler в Android Studio создать нативное Android-приложение. Попробуйте запустить его и сообщите нам, что оно делает.

ссылка на оригинал статьи http://habrahabr.ru/post/260003/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *