Quantcast
Channel: Статьи Intel Developer Zone
Viewing all articles
Browse latest Browse all 357

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

$
0
0

На момент написания этого текста текущей версией 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. 1.Откройте Android Studio, создайте новый Android-проект «nativeDemo» с параметрами по умолчанию, например:

    2. Откройте «app\src\main\java\MainActivity.java» и добавьте в конец класса «MainActivity» нативную функцию как показано ниже:
       
      publicnative 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

      Пример:

      e.g.

    4. 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
      }
    5. Сохраните изменения
      3.Теперь в папке «jni» у вас два файла: com_example_mydemo_nativedemo_MainActivity.h и main.c

  1. Добавление 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».

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

    The end

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


Viewing all articles
Browse latest Browse all 357

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>