Pull to refresh
0

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

Reading time6 min
Views59K
Original author: Richard A.
На момент написания этого текста текущей версией 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-приложение. Попробуйте запустить его и сообщите нам, что оно делает.
Tags:
Hubs:
+20
Comments2

Articles

Change theme settings

Information

Website
www.intel.ru
Registered
Founded
Employees
5,001–10,000 employees
Location
США
Representative
Анастасия Казантаева