Slide 1

Slide 1 text

ANDROID STUDIO × NDK Լ઒ ܟ߂ IN POTATOTIPS 4

Slide 2

Slide 2 text

ࣗݾ঺հ • גࣜձࣾZaim • Android൛ΞϓϦ։ൃ

Slide 3

Slide 3 text

NFC HACK • ڞஶ • ن֨ɺ࣮ྫɺϋʔυ΢ΣΞ ɺ ιϑτ΢ΣΞ ɺηΩϡϦςΟ

Slide 4

Slide 4 text

ςʔϚ IDEΛ࢖ͬͯANDROID NDKͱ࿈ܞ͢Δ

Slide 5

Slide 5 text

ࠓ·ͰͷྲྀΕ 1. EclipseͰNDKͱ࿈ܞ 2. AndroidStudioͰNDKͱ࿈ܞ ʢGradlePlugin0.7.0·Ͱʣ 3. AndroidStudioͰNDKͱ࿈ܞ ← ΠϚίί ʢGradlePlugin0.7.3Ҏ߱ʣ

Slide 6

Slide 6 text

ECLIPSEͰNDK࿈ܞ • ϝϦοτ • ࣮੷΍ϊ΢ϋ΢͕๛෋ • σϝϦοτ • ͦ΋ͦ΋Eclipse͕ʢ͈́

Slide 7

Slide 7 text

࣮ྫ - ANDROID.MK LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE_TAGS := tests LOCAL_SRC_FILES := $(call all-java-files-under, src) LOCAL_PACKAGE_NAME := HelloNDK LOCAL_SDK_VERSION := 14 LOCAL_JNI_SHARED_LIBRARIES := libhellondk include $(BUILD_PACKAGE) include $(LOCAL_PATH)/libhellondk/Android.mk

Slide 8

Slide 8 text

ANDROID STUDIOͰNDK࿈ܞ ʢV0.7.0·Ͱʣ • ϝϦοτ • EclipseͰ࡞੒ͨ͠ιʔεΛͦͷ··࢖͑Δ • σϝϦοτ • GradleͷԸܙΛड͚ͮΒ͍ • ProductFlavorͳͲ

Slide 9

Slide 9 text

࣮ྫ - BUILD.GRADLE // libsԼͷڞ༗ϥΠϒϥϦΛऔΓࠐΉ tasks.withType(com.android.build.gradle.tasks.PackageApplication) { pkgTask -> pkgTask.jniDir new File(buildDir, ‘native-libs') } // ndk-buildΛ૸ΒͤΔ task ndkBuild(type:Exec) { commandLine 'ndk-build' } tasks.withType(Compile) { compileTask -> compileTask.dependsOn ndkBuild }

Slide 10

Slide 10 text

ANDROID STUDIOͰNDK࿈ܞ ʢV0.7.3Ҏ߱ʣ • ϝϦοτ • build.gradleʹશͯهड़ग़དྷΔ • σϝϦοτ • C/C++ͷίʔσΟϯά؀ڥ͸ෆे෼

Slide 11

Slide 11 text

खॱ1 • ϑΥϧμߏ੒ [Project] |-- src |-- main |-- java |-- jni |— xxxx.c |-- xxxx.h |-- jniLibs |-- armeabi |-- xxxx.so |-- armeabi-v7a |-- mips |-- x86

Slide 12

Slide 12 text

खॱ2 • ύεઃఆ • ํ๏1: ANDROID_NDK_HOMEΛઃఆ ! • ํ๏2: local.propertiesʹ௥ه ndk.dir=/xxxx/android-ndk-r9c export ANDROID_NDK_HOME=/xxxx/android-ndk-r9c

Slide 13

Slide 13 text

खॱ3 • build.gradle΁ͷهड़ android { ... defaultConfig { ... ndk { moduleName "xxxx" ldLibs "dl", "log" stl "gnustl_shared" } } buildTypes.debug.jniDebugBuild true ... }

Slide 14

Slide 14 text

ϏϧυࡁΈڞ༗ϥΠϒϥϦ૊ΈࠐΈ • jniLibs͕σϑΥϧτϑΥϧμ໊ • ϏϧυࡁΈ .so ϑΝΠϧΛஔ͘ • ϑΥϧμ໊มߋ΋Մೳ android { ... sourceSets.main { jniLibs.srcDir ‘src/main/libs’ } }

Slide 15

Slide 15 text

CPUΞʔΩςΫνϟͷࢦఆ • ϓϩμΫτʹඞཁͳ΋ͷ͚ͩੜ੒ armv7 { ndk { abiFilter “armebi-v7a” } } arm { ndk { abiFilter “armebi” } } } } android { ... ProductFlavors { x86 { ndk { abiFilter “x86” } } mips { ndk { abiFilter “mips” } }

Slide 16

Slide 16 text

ANDROID STUDIO͔ΒNDK-BUILD ΛࣗಈͰίʔϧ͢Δ • jniϑΥϧμʹιʔεϑΝΠϧΛஔ͚ͩ͘ • Android.mk͸ෆཁ • Android.mkͱಉ༷ͷ੍ޚΛ͢Δʹ͸build.gradleʹ هड़͢Δ android { defaultConfig { ndk { moduleName “xxxx” } } }

Slide 17

Slide 17 text

BUILD.GRADLEʹهड़ग़དྷΔ߲໨ • moduleName • libxxxx.soͷ໊শ • ldLibs • ϦϯΫͤ͞ΔϥΠϒϥϦͷࢦఆ • stl • ੜ੒͢ΔϥΠϒϥϦͷछผ • abiFilter(s) • CPUΞʔΩςΫνϟͷࢦఆ android { … defaultConfig { … ndk { moduleName “text” ldLibs “dl”, “log” stl “gnustl_shared” abiFilters “armebi”, “armebi-v7a } } }

Slide 18

Slide 18 text

ANDROID STUDIO͔ΒNDK-BUILD ΛࣗಈͰίʔϧͤ͞ͳ͍ android { … sourceSets.main.jni.srcDirs = [] }

Slide 19

Slide 19 text

ࢀߟࢿྉ • ANDROID STUDIO, GRADLE AND NDK INTEGRATION by ph0b’s • Android Tools Project Site ͷαϯϓϧιʔε(gradle- sample-0.8.zip)