Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Android Native Activity
Twitter LinkedIn Facebook ΠΠ΄ΡΠ΅Ρ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΠΎΠΉ ΠΏΠΎΡΡΡ- Π‘ΡΠ°ΡΡΡ
ΠΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΊΡΠΎΡΡΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΠΎΠΉ ΡΠ°Π±ΠΎΡΠ΅ΠΉ Π½Π°Π³ΡΡΠ·ΠΊΠΈ ΠΠ°ΠΊΠ΅Ρ Android Native Development Kit (NDK) β ΡΡΠΎ Π½Π°Π±ΠΎΡ ΡΡΠ΅Π΄ΡΡΠ², Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΡΠΎΡΡΡ
ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Android, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠΈΡΡΡΠΉ ΠΊΠΎΠ΄ C ΠΈΠ»ΠΈ C++. ΠΠ»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΊΠΎΠ΄Π° C ΠΈΠ»ΠΈ C++ Ρ Android ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΠΊΠΎΠ΄ Java JNI, Π²ΡΡΡΡΠΏΠ°ΡΡΠΈΠΉ Π² ΡΠΎΠ»ΠΈ ΡΠ²ΡΠ·ΡΡΡΠ΅Π³ΠΎ. Π Android NDK ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Native Activity Ρ ΠΏΠΎΠΌΠΎΡΡΡ API Android ΡΡΠΎΠ²Π½Ρ 9. ΠΠΎΠ΄ Native Activity ΠΏΠΎΠΏΡΠ»ΡΡΠ΅Π½ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈΠ³ΡΠΎΠ²ΡΡ
ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Ρ ΠΈΠ½ΡΠ΅Π½ΡΠΈΠ²Π½ΡΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π³ΡΠ°ΡΠΈΠΊΠΈ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Unreal Engine ΠΈΠ»ΠΈ OpenGL. Π ΡΡΠΎΠΌ ΠΏΠΎΡΠ°Π³ΠΎΠ²ΠΎΠΌ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Native Activity, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ OpenGL. Π Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ
ΡΠ°Π·Π΄Π΅Π»Π°Ρ
ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡΡΡ ΡΠ°ΠΊΠΈΠ΅ ΡΡΠ°ΠΏΡ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΊΠ»Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ, ΠΊΠ°ΠΊ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, ΡΠ±ΠΎΡΠΊΠ°, ΠΎΡΠ»Π°Π΄ΠΊΠ° ΠΈ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Native Activity.
Π’ΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ
ΠΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Android Native Activity, Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ Π²Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ Π²ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΠΈ ΡΠ°Π±ΠΎΡΡΡ Π½Π°Π³ΡΡΠ·ΠΊΡ Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΡΡ
ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° ΡΠ·ΡΠΊΠ΅Β C++ Π² Visual Studio. ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΡΠΌ. Π² ΡΡΠ°ΡΡΠ΅ Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Visual C++ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΊΡΠΎΡΡΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΡΡ
ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΡΡ
ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° ΡΠ·ΡΠΊΠ΅Β C++. Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠ΅ ΡΡΠΎΡΠΎΠ½Π½ΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ ΠΈ ΠΏΠ°ΠΊΠ΅ΡΡΒ SDK Π²ΠΊΠ»ΡΡΠ΅Π½Ρ Π² ΡΡΡΠ°Π½ΠΎΠ²ΠΊΡ, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΡΠΎ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ ΡΠΌΡΠ»ΡΡΠΎΡ Android.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ° Native Activity
Π ΡΡΠΎΠΌ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π΅ Π²Ρ ΡΠ½Π°ΡΠ°Π»Π° ΡΠΎΠ·Π΄Π°Π΄ΠΈΡΠ΅ Π½ΠΎΠ²ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ Android Native Activity, Π° Π·Π°ΡΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π΄ΠΈΡΠ΅ ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π² ΡΠΌΡΠ»ΡΡΠΎΡΠ΅ Android.
Π Visual Studio Π²ΡΠ±Π΅ΡΠΈΡΠ΅ Π€Π°ΠΉΠ»>Π‘ΠΎΠ·Π΄Π°ΡΡ>ΠΡΠΎΠ΅ΠΊΡ.
Π Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΌ ΠΎΠΊΠ½Π΅ ΠΠΎΠ²ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ Π² ΠΌΠ΅Π½Ρ Π¨Π°Π±Π»ΠΎΠ½Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ Π²ΡΠ±Π΅ΡΠΈΡΠ΅
ΠΡΠΈΡΠ²ΠΎΠΉΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈΠΌΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ MyAndroidApp, Π° Π·Π°ΡΠ΅ΠΌ Π½Π°ΠΆΠΌΠΈΡΠ΅ OK.
Visual Studio ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΈ ΠΎΡΠΊΡΠΎΠ΅Ρ ΠΎΠ±ΠΎΠ·ΡΠ΅Π²Π°ΡΠ΅Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ.
Π Visual Studio Π²ΡΠ±Π΅ΡΠΈΡΠ΅ Π€Π°ΠΉΠ»>Π‘ΠΎΠ·Π΄Π°ΡΡ>ΠΡΠΎΠ΅ΠΊΡ.
Π Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΌ ΠΎΠΊΠ½Π΅ Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π²ΡΠ±Π΅ΡΠΈΡΠ΅ ΡΠ°Π±Π»ΠΎΠ½
Π Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΌ ΠΎΠΊΠ½Π΅ ΠΠ°ΡΡΡΠΎΠΈΡΡ Π½ΠΎΠ²ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ Π²Π²Π΅Π΄ΠΈΡΠ΅ ΠΈΠΌΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ MyAndroidApp Π² ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΠΌΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°, Π° Π·Π°ΡΠ΅ΠΌ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ Π‘ΠΎΠ·Π΄Π°ΡΡ.
Visual Studio ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΈ ΠΎΡΠΊΡΠΎΠ΅Ρ ΠΎΠ±ΠΎΠ·ΡΠ΅Π²Π°ΡΠ΅Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ.
Π Π½ΠΎΠ²ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Android Native Activity Π²Ρ ΠΎΠ΄ΡΡ Π΄Π²Π° ΠΏΡΠΎΠ΅ΠΊΡΠ°.
MyAndroidApp.NativeActivity
ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΡΡΠ»ΠΊΠΈ ΠΈ ΡΠ²ΡΠ·ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΊΠ°ΠΊ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Native Activity Π½Π° Android. Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠΎΡΠ΅ΠΊ Π²Ρ ΠΎΠ΄Π° ΠΈΠ· ΠΊΠΎΠ΄Π° glue Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² main.cpp. ΠΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π²MyAndroidApp.Packaging
ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΠ°ΠΉΠ» Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ .apk Π΄Π»Ρ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ Π½Π° ΡΡΡΡΠΎΠΉΡΡΠ²Π΅ ΠΈΠ»ΠΈ Π² ΡΠΌΡΠ»ΡΡΠΎΡΠ΅ Android. ΠΠ½ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ΅ΡΡΡΡΡ ΠΈ ΡΠ°ΠΉΠ»AndroidManifest.xml , Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π·Π°Π΄Π°ΡΡΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠ°. ΠΠ½ ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ°ΠΉΠ»build.xml , ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ ΡΠ±ΠΎΡΠΊΠΈ Ant. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΎΠ½ Π·Π°Π΄Π°Π½ ΠΊΠ°ΠΊ Π½Π°ΡΠ°Π»ΡΠ½ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΡ ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΈΠ· Visual Studio.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ Π·Π°ΠΏΡΡΠΊ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Android Native Activity ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ
Π Π°Π·ΡΠ°Π±ΠΎΡΠ°ΠΉΡΠ΅ ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠ΅ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΡ ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΡ. ΠΠ»Ρ ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΠ° Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΠΏΡΠΎΡΠΈΠ»Π΅ΠΉ ΡΡΡΡΠΎΠΉΡΡΠ², ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΡ ΡΠΌΡΠ»ΡΡΠΎΡΠΎΠΌ Android. ΠΡΠ»ΠΈ Π²Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Π΅ΡΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅, Π·Π°Π³ΡΡΠ·ΠΈΡΠ΅ ΡΠ΅Π»Π΅Π²ΠΎΠΉ ΡΠΌΡΠ»ΡΡΠΎΡ ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ ΠΊ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΡ.
Π‘Π±ΠΎΡΠΊΠ° ΠΈ Π·Π°ΠΏΡΡΠΊ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Native Activity ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ
ΠΡΠ»ΠΈ ΠΎΠ½ Π΅ΡΠ΅ Π½Π΅ Π²ΡΠ±ΡΠ°Π½, Π²ΡΠ±Π΅ΡΠΈΡΠ΅ x86 Π² ΡΠ°ΡΠΊΡΡΠ²Π°ΡΡΠ΅ΠΌΡΡ ΡΠΏΠΈΡΠΊΠ΅ ΠΠ»Π°ΡΡΠΎΡΠΌΡ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ .
ΠΡΠ»ΠΈ ΡΠΏΠΈΡΠΎΠΊ ΠΠ»Π°ΡΡΠΎΡΠΌΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π½Π΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ, ΡΠ΅Π»ΠΊΠ½ΠΈΡΠ΅ ΠΏΡΠ½ΠΊΡ ΠΠ»Π°ΡΡΠΎΡΠΌΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΈΠ· ΡΠ°ΡΠΊΡΡΠ²Π°ΡΡΠ΅Π³ΠΎΡΡ ΡΠΏΠΈΡΠΊΠ° ΠΠΎΠ±Π°Π²ΠΈΡΡ ΠΈΠ»ΠΈ ΡΠ΄Π°Π»ΠΈΡΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΈ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ ΡΠ²ΠΎΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ.
Π ΡΡΡΠΎΠΊΠ΅ ΠΌΠ΅Π½Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ Π‘Π±ΠΎΡΠΊΠ°>Π‘ΠΎΠ±ΡΠ°ΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅.
Π ΠΎΠΊΠ½Π΅ «ΠΡΡ ΠΎΠ΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅» ΠΎΡΠΎΠ±ΡΠ°Π·ΡΡΡΡ Π²ΡΡ ΠΎΠ΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΡΠ±ΠΎΡΠΊΠΈ Π΄Π»Ρ Π΄Π²ΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Π² ΡΠ΅ΡΠ΅Π½ΠΈΠΈ.
ΠΡΠ±Π΅ΡΠΈΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΡΠΎΡΠΈΠ»Π΅ΠΉ ΡΠΌΡΠ»ΡΡΠΎΡΠ° Android Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ΅Π»ΠΈ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ.
ΠΡΠ»ΠΈ Π²Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠΌΡΠ»ΡΡΠΎΡΡ ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΠ»ΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ Android, ΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΡΠ±ΡΠ°ΡΡ ΠΈΡ Π² ΡΠ°ΡΠΊΡΡΠ²Π°ΡΡΠ΅ΠΌΡΡ ΡΠΏΠΈΡΠΊΠ΅ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ.
ΠΠ°ΠΆΠΌΠΈΡΠ΅ ΠΊΠ»Π°Π²ΠΈΡΡ F5 , ΡΡΠΎΠ±Ρ Π½Π°ΡΠ°ΡΡ ΠΎΡΠ»Π°Π΄ΠΊΡ, ΠΈΠ»ΠΈ SHIFT+F5 , ΡΡΠΎΠ±Ρ Π½Π°ΡΠ°ΡΡ ΡΠ°Π±ΠΎΡΡ Π±Π΅Π· ΠΎΡΠ»Π°Π΄ΠΊΠΈ.
ΠΠΎΡ ΠΊΠ°ΠΊ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π² ΡΠΌΡΠ»ΡΡΠΎΡΠ΅ Android.
Visual Studio Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΡΠΌΡΠ»ΡΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΠΊΡΠ½Π΄ Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ ΠΈ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π΅Ρ ΠΊΠΎΠ΄.
ΠΠΎΡΠ»Π΅ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°ΡΡ ΡΠΎΡΠΊΠΈ ΠΎΡΡΠ°Π½ΠΎΠ²Π° ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΊΠΎΠ΄Π°, ΡΠ·ΡΠΊΠΎΠ²ΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠΎΠ² ΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ.
ΠΠ°ΠΆΠΌΠΈΡΠ΅ ΠΊΠ»Π°Π²ΠΈΡΡ SHIFT+F5 , ΡΡΠΎΠ±Ρ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΎΡΠ»Π°Π΄ΠΊΡ.
ΠΠΌΡΠ»ΡΡΠΎΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ, ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΈ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π· Π² ΠΎΠ΄Π½ΠΎΠΌ ΡΠΌΡΠ»ΡΡΠΎΡΠ΅.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° C ΠΈ C ++ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Android Ρ NDK
Π ΡΡΠΎΠΌ ΡΡΠΎΠΊΠ΅ Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Ρ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ Π²Π°ΡΠΈΠ°Π½Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π΄Π»Ρ Π²Π°ΡΠ΅Π³ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° Android, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ ΠΊΠΎΠΌΠ°Π½Π΄ Ρ ΡΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ ΠΈΠ»ΠΈ ΠΈΠΌΠ΅ΡΡΠΈΠΌΠΈΡΡ Π·Π½Π°Π½ΠΈΡΠΌΠΈ Π² C ΠΈ C ++. Android Native Development Kit (NDK) ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΡΡΡΡ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡΠ° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² Google, ΠΈ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠΎΠ³Π΄Π° NDK ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π΅Π½ ΠΈ ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π΄Π»Ρ Android.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΠΠΠ?
NDK β ΡΡΠΎ Π½Π°Π±ΠΎΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π΄Π»Ρ Android Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ C, C ++ ΠΈ Π΄ΡΡΠ³ΠΈΡ
ΡΠΎΠ΄Π½ΡΡ
ΡΠ·ΡΠΊΠΎΠ² ΠΊΠΎΠ΄Π°, ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΡ ΠΊΠΎΠ΄ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π° ΡΡΡΡΠΎΠΉΡΡΠ²Π°Ρ
Android. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ NDK, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π½Π΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΡΡΡΠ²Π°ΡΡ ΡΠ½ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, ΡΡΡΠ°Π΄Π°ΡΡ ΠΎΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ, Π·Π°ΡΡΡΠ΄Π½ΡΡΡ ΠΎΡΠ»Π°Π΄ΠΊΡ ΠΈ ΡΠ½ΠΈΠΆΠ°ΡΡ Π³ΠΈΠ±ΠΊΠΎΡΡΡ. Π’ΠΎ, ΡΡΠΎ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ NDK, β ΡΡΠΎ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ·-Π·Π° Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ Π½Π°ΡΠΈΠ²Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ.
ΠΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠ΅ Π²ΡΡΠΊΠ°Π·ΡΠ²Π°Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠΊΠ°Π·Π°ΡΡΡΡ ΠΎΠ±Π΅ΡΠΊΡΡΠ°ΠΆΠΈΠ²Π°ΡΡΠΈΠΌΠΈ, Π½ΠΎ Π΅ΡΡΡ Ρ ΠΎΡΠΎΡΠΈΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ NDK. ΠΡΠΎ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΈΠ³ΡΡ, ΠΈΠ³ΡΠΎΠ²ΡΠ΅ Π΄Π²ΠΈΠΆΠΊΠΈ, ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΡΠΈΠ³Π½Π°Π»ΠΎΠ² ΠΈ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠΈΠΌΡΠ»ΡΡΠΈΠΈ. ΠΡΠ΅ ΠΎΠ΄ΠΈΠ½ Ρ ΠΎΡΠΎΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ β ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΡ Π½Π° C / C ++. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±ΠΎΠ»ΡΡΡΡ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Π΄ΠΎΡΡΡΠΏΠ½ΡΡ ΠΎΠ½Π»Π°ΠΉΠ½.
Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΡΠ±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠ»ΡΡΡ ΠΈ ΠΌΠΈΠ½ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ NDK, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΡΠ΅ΡΠΈΡΡ, ΡΡΠΎΠΈΡ Π»ΠΈ ΡΡΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ. ΠΡ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΡΠ½ΠΎΠ²ΡΠ²Π°ΡΡ ΡΠ²ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Π΅ΠΌΠΎΠΌ Π²Π°ΠΌΠΈ ΡΠ·ΡΠΊΠ΅, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π²Ρ ΡΠ²Π»ΡΠ΅ΡΠ΅ΡΡ ΡΠΊΡΠΏΠ΅ΡΡΠΎΠΌ Π² C ΠΈΠ»ΠΈ C ++.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ NDK
Android Studio
ΠΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅Π³ΠΎ Π΅ΡΠ΅ Π½Π΅Ρ, Π·Π°Π³ΡΡΠ·ΠΈΡΠ΅ Android Studio , ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΡ IDE ΠΎΡ Google.
ΠΠ°ΠΊΠ΅Ρ ΠΠΠ
Android Studio Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ ΠΈ SDK, ΠΏΠΎΡΡΠΎΠΌΡ Π·Π°Π³ΡΡΠΆΠ°ΠΉΡΠ΅ ΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΠΉΡΠ΅ ΠΏΠ°ΠΊΠ΅Ρ NDK ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ. ΠΡΡΡ Π΄Π²Π° ΡΠΏΠΎΡΠΎΠ±Π° ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ. ΠΠ΅ΡΠ²ΡΠΉ ΠΈ ΡΠ°ΠΌΡΠΉ ΠΏΡΠΎΡΡΠΎΠΉ β ΡΡΠΎ ΠΎΠΏΡΠΈΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π½Π° Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ ΠΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ SDK . ΠΡΠΎ Π±ΠΎΠ»ΡΡΠ°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° (~ 1 ΠΠ), ΠΏΠΎΡΡΠΎΠΌΡ ΡΠ±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ Ρ Π²Π°Ρ Ρ ΠΎΡΠΎΡΠ΅Π΅ ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ-ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΈ / ΠΈΠ»ΠΈ ΡΠ΅ΡΠΏΠ΅Π½ΠΈΠ΅.
ΠΡΠΎΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± β Π·Π°Π³ΡΡΠ·ΠΈΡΡ NDK Π²ΡΡΡΠ½ΡΡ ΡΠΎ ΡΡΡΠ°Π½ΠΈΡΡ Π·Π°Π³ΡΡΠ·ΠΎΠΊ NDK . ΠΡΠΎ ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΠΈΠ·-Π·Π° ΠΌΠ΅Π½ΡΡΠ΅Π³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π·Π°Π³ΡΡΠ·ΠΊΠΈ (<.5 ΠΠ), Π½ΠΎ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ. ΠΠ°Π³ΡΡΠ·ΠΈΡΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΏΠ°ΠΊΠ΅Ρ NDK Π΄Π»Ρ Π²Π°ΡΠ΅ΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ ΠΈ ΡΠ»Π΅Π΄ΡΠΉΡΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΠΌ ΠΏΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½Π½ΡΠΉ ΠΏΠ°ΠΊΠ΅Ρ ΠΊΡΠ΄Π° ΡΠ³ΠΎΠ΄Π½ΠΎ, Π½ΠΎ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡΠ΅ ΡΡΠΎ ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ Π²Π°ΠΌ ΠΏΠΎΠ·ΠΆΠ΅.
ΠΡΠΈΠ²Π΅Ρ, ΠΌΠΈΡ
ΠΠ°Π²Π°ΠΉΡΠ΅ Π·Π°ΠΏΡΡΡΠΈΠΌ ΡΠ΅ΡΡΠΎΠ²ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ, ΡΡΠΎΠ±Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ, ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π»ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° NDK. ΠΠ°ΠΏΠΊΠ° ΠΏΠ°ΠΊΠ΅ΡΠ° NDK ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΡ, Π½ΠΎ, ΠΏΠΎΡ
ΠΎΠΆΠ΅, ΠΎΠ½ΠΈ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ βΠΈΠ· ΠΊΠΎΡΠΎΠ±ΠΊΠΈβ Π² Android Studio Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΌΡ ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌ ΠΎΠ±ΡΠ°Π·ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΡΠΊΡΠ°Π½Π° ΠΏΡΠΈΠ²Π΅ΡΡΡΠ²ΠΈΡ . ΠΡΠΈ ΠΎΠ±ΡΠ°Π·ΡΡ NDK ΠΈΠ· GitHub ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π·Π°Π³ΡΡΠΆΠ΅Π½Ρ ΠΈΠ»ΠΈ ΠΊΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°Π½Ρ Π½Π°ΠΏΡΡΠΌΡΡ. ΠΡΠ° ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ ΠΎΠ±ΡΠ°Π·ΡΠΎΠ² Π»ΡΡΡΠ΅ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠ° Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ Π²Π΅ΡΡΠΈΠ΅ΠΉ Android Studio.
ΠΡΠ±Π΅ΡΠΈΡΠ΅ Β« ΠΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π° AndroidΒ» ΠΈ Π²Π²Π΅Π΄ΠΈΡΠ΅ hello Π² ΠΏΠΎΠ»Π΅ ΠΏΠΎΠΈΡΠΊΠ°, ΡΡΠΎΠ±Ρ ΠΎΡΡΠΈΠ»ΡΡΡΠΎΠ²Π°ΡΡ ΡΠΏΠΈΡΠΎΠΊ. ΠΡΠ±Π΅ΡΠΈΡΠ΅ Hello JNI ΠΈΠ· ΠΎΡΡΠΈΠ»ΡΡΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ° Π² ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ Ndk . ΠΠ°ΠΆΠΌΠΈΡΠ΅ Β« ΠΠ°Π»Π΅Π΅Β», ΡΡΠΎΠ±Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΈΠΌΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ°, Π·Π°ΡΠ΅ΠΌ Π½Π°ΠΆΠΌΠΈΡΠ΅ Β« ΠΠΎΡΠΎΠ²ΠΎΒ» .
JNI
ΠΠΎΡΠ»Π΅ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΊΠΎΠ΄Π° ΠΈ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ Gradle, Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ Π½Π° ΠΈΡΠΎΠ³ΠΎΠ²ΡΡ ΡΡΡΡΠΊΡΡΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°. ΠΡ ΠΌΠΎΠ³Π»ΠΈ Π·Π°ΠΌΠ΅ΡΠΈΡΡ Π½Π΅ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ Π² Π½Π°Π·Π²Π°Π½ΠΈΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ°. ΠΠΎΡΠ΅ΠΌΡ ΠΎΠ½ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ HelloJNI, Π° Π½Π΅ HelloNDK ? Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Β«JNIΒ» ΠΈ ΡΠ΅ΠΌ ΠΎΠ½ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ Β«NDKΒ»? Β«Π‘ΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ JavaΒ» β ΡΡΠΎ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌ Java Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ. JNI ΠΈ NDK ΡΠ°Π±ΠΎΡΠ°ΡΡ Π²ΠΌΠ΅ΡΡΠ΅, ΡΡΠΎΠ±Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Android. NDK ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΡΡΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ Android, Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ JNI Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π΄Π»Ρ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Java, Π° Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Android.
ΠΠ½ΡΡΡΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΠΏΠ°ΠΏΠΊΠ° Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ jni, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π²Π΅ΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° C ΠΈΠ»ΠΈ C ++. JNI ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π΄Π²ΡΡΡΠΎΡΠΎΠ½Π½ΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ. ΠΠΎΠ΄ C / C ++ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΊΠΎΠ΄ Java, Π²ΠΊΠ»ΡΡΠ°Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Android, Π° ΠΊΠΎΠ΄ Java ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ Π² ΠΊΠΎΠ΄Π΅ C / C ++. Π‘ΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΊΠΎΠ΄ ΡΠ΅Π³ΡΠ»ΠΈΡΡΠ΅ΡΡΡ ΡΠ΅ΠΌΠΈ ΠΆΠ΅ ΠΏΠ΅ΡΠΎΡΠ½ΠΈΡΠ°ΠΌΠΈ ΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π°ΠΌΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ, ΡΡΠΎ ΠΈ ΠΊΠΎΠ΄ Java, ΠΏΠΎΡΡΠΎΠΌΡ Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ Π½Π΅ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΎΠ±ΠΎΡΡΠ΄ΠΎΠ²Π°Π½ΠΈΡ. ΠΠ»Ρ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΡ JNI, ΠΏΡΠΎΡΠΈΡΠ°ΠΉΡΠ΅ ΡΡΠ°ΡΡΠΈ JNI Ρ ΡΠ°ΠΉΡΠ° Android Developer .
ABI
ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΈ Π·Π°ΠΏΡΡΡΠΈΠΌ ΠΏΡΠΎΠ΅ΠΊΡ Π½Π° ΡΠΌΡΠ»ΡΡΠΎΡΠ΅ ΠΈΠ»ΠΈ ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌ APK Π΄Π»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π° ΡΡΡΡΠΎΠΉΡΡΠ²Π΅. ΠΠΎΡ hello-jni, ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠΉ Π½Π° ΠΌΠΎΠ΅ΠΌ Asus Zenfone, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π΄Π²ΠΎΠΈΡΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Intel ΠΈΠ»ΠΈ x86 (ABI). ΠΠΎΠ³Π΄Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, ΠΎΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΠ°Π·Π½ΡΠ΅ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΡ Π¦Π. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΉ Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅ Π΅Π³ΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ.
ΠΠ°ΠΆΠ΄ΡΠΉ ABI ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΠ΅Π»Π΅Π²ΠΎΠΉ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ΅, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠ΅ΠΉ, ΠΊΠ°ΠΊ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Π΅ΡΡΠΈ ΡΠ΅Π±Ρ ΠΈΠ»ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Ρ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. Π Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ NDK ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ ARMEABI (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ), MIPS ΠΈ x86. ΠΠ±ΡΡΠ½ΠΎ ΠΏΡΠΎΠ΅ΠΊΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ Π²ΡΡΡΠ½ΡΡ, Π° ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΊΠΎΠ΄ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ. ΠΠ± ΡΡΠΎΠΌ ΡΠΆΠ΅ Π·Π°Π±ΠΎΡΡΡΡΡ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ°, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΎΠ±ΡΠ°Π·Π΅Ρ ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ Π΅Π³ΠΎ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΡΠΏΡΠ°Π²Π½ΠΎΠΉ ΡΠΎΡΠΊΠΈ Π΄Π»Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ°. Π Π½Π΅ΠΌ ΡΠΆΠ΅ Π΅ΡΡΡ Π²ΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ, ΡΡΠΎΠ±Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠ³Π»ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Ρ NDK.
ΠΠΎΠ²ΡΠΎΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ
ΠΠ°ΠΊ ΡΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡ ΡΠ°Π½Π΅Π΅, ΡΠΈΠ»Π° NDK Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² Π΅Π³ΠΎ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠ΅, ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½Π½ΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ ΠΈ ΠΌΠΎΡΠ½ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ C / C ++. ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π½Π° ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΠΎΠΉ ΡΡΠ°Π΄ΠΈΠΈ Π² Android Studio ΠΈ ΠΎΠ±ΡΡΠ½ΠΎ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΎΠΏΡΡΠ½ΡΡ
ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ². Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΡΡΠΎ ΡΡΠΎ-ΡΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠ΅ ΠΈ Π·Π°ΡΠ»ΡΠΆΠΈΠ²Π°ΡΡΠ΅Π΅ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ.
SDL
Simple DirectMedia Layer β ΡΡΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΡ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΉ Ρ ΠΎΡΠΊΡΡΡΡΠΌ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, Π²ΡΠΏΡΡΠ΅Π½Π½Π°Ρ 18 Π»Π΅Ρ Π½Π°Π·Π°Π΄. ΠΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ Π΄Π»Ρ ΠΈΠ³Ρ, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ Π²ΡΠ΅Π³ΠΎ, ΡΡΠΎ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ Π²ΡΡΠΎΠΊΠΎΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ Π³ΡΠ°ΡΠΈΠΊΠΎΠΉ. Π ΡΡΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΌΡ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ SDL ΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ°Π±Π»ΠΎΠ½Π° Π΄Π»Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ.
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ°
ΠΠ΅ΡΠ²ΡΠΌ ΡΠ°Π³ΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ Π·Π°Π³ΡΡΠ·ΠΊΠ° ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° SDL ΡΠΎ ΡΡΡΠ°Π½ΠΈΡΡ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΈΠ»ΠΈ ΠΊΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ Mercurial Ρ ΠΏΠΎΠΌΠΎΡΡΡ:
hg clone http://hg.libsdl.org/SDL
ΠΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΈΠ»ΠΈ ΠΊΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠΉΡΠ΅ ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ° Android (Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ android-project ) ΠΈΠ· ΠΏΠ°ΠΏΠΊΠΈ SDL Π² Android Studio, ΠΏΡΠΈΠ½ΠΈΠΌΠ°Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π½Π° ΡΠΊΡΠ°Π½Π°Ρ
ΠΈΠΌΠΏΠΎΡΡΠ°. ΠΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ, ΡΠ²ΡΠ·Π°Π½Π½Π°Ρ Ρ ΠΎΡΡΡΡΡΡΠ²ΡΡΡΠ΅ΠΉ Π²Π΅ΡΡΠΈΠ΅ΠΉ SDK. Π§ΡΠΎΠ±Ρ ΡΠ΅ΡΠΈΡΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΎΡΠΊΡΠΎΠΉΡΠ΅ SDK Manager ΠΈ Π·Π°Π³ΡΡΠ·ΠΈΡΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ Π²Π΅ΡΡΠΈΡ SDK Π΄Π»Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ°. Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Android 3.1 (API Level 12). Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ ΡΠ»Π°ΠΆΠΎΠΊ ΠΠΎΠΊΠ°Π·Π°ΡΡ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ΅, ΡΡΠΎΠ±Ρ ΠΎΡΠΊΡΡΡΡ ΡΡΡ Π²Π΅ΡΡΠΈΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½Π° ΠΏΠΎΠΌΠ΅ΡΠ΅Π½Π° ΠΊΠ°ΠΊ ΡΡΡΠ°ΡΠ΅Π²ΡΠ°Ρ. ΠΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠ²Π΅ΠΆΡΡ Π²Π΅ΡΡΠΈΡ, Π½ΠΎ ΠΏΠΎΠΊΠ° Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΡΠΈΠ΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ Android-12, ΡΡΠΎΠ±Ρ Π²ΡΠ΅ Π±ΡΠ»ΠΎ ΠΏΡΠΎΡΡΠΎ.
ΠΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ SDK ΠΏΡΠΎΠ΅ΠΊΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡΡΡ Π±Π΅Π· ΠΎΡΠΈΠ±ΠΎΠΊ, ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ BUILD SUCCESSFUL
Π½Π° ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ. ΠΡΠ»ΠΈ Π²Ρ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΠΈΡΡ Ρ ΠΊΠ°ΠΊΠΈΠΌΠΈ-Π»ΠΈΠ±ΠΎ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌΠΈ, ΠΏΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, Π΄Π°ΠΉΡΠ΅ ΠΌΠ½Π΅ Π·Π½Π°ΡΡ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ
.
Gradle
Android Studio ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Gradle , ΡΠΈΡΡΠ΅ΠΌΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ ΡΠ±ΠΎΡΠΊΠΈ Ρ ΠΎΡΠΊΡΡΡΡΠΌ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°ΠΌΠΈ ΠΈ ΠΈΡ
Π²ΡΠ²ΠΎΠ΄ΠΎΠΌ. ΠΠΎΠ»ΡΡΠ°Ρ ΡΠ°ΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ Π² ΡΠ°ΠΉΠ»Π°Ρ
Gradle. ΠΠ°Π²Π°ΠΉΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΡΡΠ½ΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΡ Π² ΠΏΡΠΎΠ΅ΠΊΡ.
buildToolsVersion
sourceSets { main { jni.srcDirs = [] } }
ΠΡΠΎ ΡΠΊΡΠΎΠ΅Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΊΠΎΠ΄ Π² ΠΏΡΠΎΠ²ΠΎΠ΄Π½ΠΈΠΊΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ Π²ΡΡΡΠ½ΡΡ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ SDL ΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΊΠΎΠ΄ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ndk-build
ΠΏΠ°ΠΏΠΊΠΈ ndk-bundle . Π‘Π±ΠΎΡΠΊΠ° ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π²ΡΡΡΠ½ΡΡ β Π±ΠΎΠ»Π΅Π΅ Π½Π°Π΄Π΅ΠΆΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΡΠ±ΠΎΡΠΊΠ°ΠΌΠΈ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Android Studio ΠΈ Gradle. ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Gradle Π΄Π»Ρ NDK Π²ΡΠ΅ Π΅ΡΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΠΎΠΉ, ΠΈ Π½Π΅ Π²ΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ.
Π‘ΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΡΡΠ»ΠΊΠ°
ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΡΡ ΡΡΡΠ»ΠΊΡ Π²Π½ΡΡΡΠΈ ΠΏΠ°ΠΏΠΊΠΈ app / src / main / jni / ΠΏΡΠΎΠ΅ΠΊΡΠ°. ΠΠ°Π·ΠΎΠ²ΠΈΡΠ΅ Π΅Π³ΠΎ SDL ΠΈ ΡΠΊΠ°ΠΆΠΈΡΠ΅ Π΅Π³ΠΎ Π½Π° ΠΏΠ°ΠΏΠΊΡ SDL, Π·Π°Π³ΡΡΠΆΠ΅Π½Π½ΡΡ ΠΈΠ»ΠΈ ΠΊΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΠ°Π½Π΅Π΅. ΠΠ°ΠΏΠΊΠ° SDL ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½Π° Π½Π°ΠΏΡΡΠΌΡΡ, Π½ΠΎ ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΌΠ΅Π½Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π΅Π½ ΠΈ ΠΏΠΎΠ΄Π²Π΅ΡΠΆΠ΅Π½ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌ. ΠΡΡ
ΠΎΠ΄Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΡΠΊΡΡΡΡ Π² Android Studio, ΠΏΠΎΡΡΠΎΠΌΡ ΠΈΡ
Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡΠΊΡΡΡΡ Π²ΡΡΡΠ½ΡΡ Π²ΠΎ Π²Π½Π΅ΡΠ½Π΅ΠΌ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ΅ Π΄Π»Ρ Π²Π½Π΅ΡΠ΅Π½ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΡ
ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.
Android.mk
Android.mk β ΡΡΠΎ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠ°ΠΉΠ» make, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΈ ΠΎΠ±ΡΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π΄Π»Ρ ΡΠΈΡΡΠ΅ΠΌΡ ΡΠ±ΠΎΡΠΊΠΈ. ΠΡΠΎΠ΅ΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΆΠ΅ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½, ΠΈΠΌΠ΅Π΅Ρ ΡΡΠΈ ΡΠ°ΠΉΠ»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, Π½ΠΎ Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠ΅ΠΉ. ΠΠ°Π²Π°ΠΉΡΠ΅ Π²Π½Π΅ΡΠ΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΡΠ°ΠΉΠ» Android.mk ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΡΠΎΡ ΡΠ°ΠΉΠ» Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π² ΠΏΠ°ΠΏΠΊΠ΅ app / src / main / jni / src . ΠΠ°ΠΉΠ΄ΠΈΡΠ΅ ΡΡΡΠΎΠΊΡ Ρ Π½Π°Π΄ΠΏΠΈΡΡΡ YourSourceHere.c
main.c
Application.mk
Π€Π°ΠΉΠ» make Application.mk ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ, ΠΎΠ±ΡΡΡ Π΄Π»Ρ Π²ΡΠ΅Ρ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, ΠΈ Π²Π»ΠΈΡΠ΅Ρ Π½Π° ΡΠ±ΠΎΡΠΊΡ Π²ΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°. ΠΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΡΡΡΠΎΠΊΡ Π² Application.mk Π²Π½ΡΡΡΠΈ ΠΏΠ°ΠΏΠΊΠΈ app / src / main / jni / :
APP_PLATFORM := android-12
ΠΡΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΡΠΎΠΎΠ±ΡΠ°Π΅Ρ ndk-build
ΠΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² Application.mk β ΡΡΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ΅Π»Π΅Π²ΡΠ΅ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ APP_ABI
ΠΡΠ±Π΅ΡΠΈΡΠ΅ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ ΠΈΠ· ΡΠ»Π΅Π΄ΡΡΡΠΈΡ
ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΠΈΡ
Π²ΡΠ΅:
- arm64-V8A
- armeabi
- armeabi-v7a
- MIPS
- MIPS64
- x86
- x86_64
ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ Π΄Π»Ρ Π²ΡΠ΅Ρ
ΡΡΠΈΡ
ΠΏΠ»Π°ΡΡΠΎΡΠΌ Π΄Π°Π΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π±ΠΎΠ»Π΅Π΅ ΡΠΈΡΠΎΠΊΠΈΠΉ ΠΎΡ
Π²Π°Ρ, Π½ΠΎ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΊΡΡΠΏΠ½ΡΠΉ APK.
main.c
ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠ°Π³ β Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ SDL ΠΈ Π²ΡΠ·ΡΠ²Π°Π΅Ρ Π΅Π³ΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΡΠΎΠ±Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ, ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π»ΠΈ ΠΏΡΠΎΠ΅ΠΊΡ. ΠΠ»Ρ ΡΠ΄ΠΎΠ±ΡΡΠ²Π° Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΡΠΎΡ ΡΠ°ΠΉΠ» main.c , Π·Π°Π³ΡΡΠΆΠ°Ρ Π΅Π³ΠΎ Π² ΠΏΠ°ΠΏΠΊΡ app / src / main / jni / src .
ΠΡΠΊΡΡΠ² main.c , Π²Ρ Π·Π°ΠΌΠ΅ΡΠΈΡΠ΅, ΡΡΠΎ ΠΎΠ½ ΠΏΡΡΠ°Π΅ΡΡΡ Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΠΈ ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ image.bmp . Π§ΡΠΎΠ±Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠ°ΡΡ ΡΡΠΎ, ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΏΠ°ΠΏΠΊΡ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ asset Π²Π½ΡΡΡΠΈ app / src / main ΠΈ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠ°ΡΡΡΠΎΠ²ΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ image.bmp . Π― ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» Π»ΠΎΠ³ΠΎΡΠΈΠΏ SitePoint.com Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΠ΅ΡΡΠ°.
Π‘Π±ΠΎΡΠΊΠ° ΠΈ Π·Π°ΠΏΡΡΠΊ
ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠ΅ΡΠΌΠΈΠ½Π°Π», ΠΎΡΠΊΡΠΎΠΉΡΠ΅ app / src / main / jni / ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ndk-build NDK_LIBS_OUT=../jniLibs
ΠΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΈ ΡΠΎΡ
ΡΠ°Π½ΡΠ΅Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΎΠ±ΡΠ΅Π³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ( .so ) Π² ΠΏΠ°ΠΏΠΊΡ jniLibs . ΠΡΠ»ΠΈ ndk-build
ΠΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠ±ΠΎΡΠΊΠΈ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΡΠ΅ΡΡ Π½Π° Android Studio ΠΈ Π²ΡΡΡΠ½ΡΡ Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΏΡΠ½ΠΊΡ ΠΌΠ΅Π½Ρ Π‘Π΅ΡΠ²ΠΈΡ -> Android -> Π‘ΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΎΠ΅ΠΊΡ Ρ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ Gradle . APK ΡΠ΅ΠΏΠ΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΡΠ½ΠΊΡΠ° ΠΌΠ΅Π½Ρ Build -> Build APK, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΡΡΡΡΠΎΠΉΡΡΠ²Π΅ ΠΈΠ»ΠΈ ΡΠΌΡΠ»ΡΡΠΎΡΠ΅. ΠΠΎΡ ΠΌΠΎΡ ΡΠ±ΠΎΡΠΊΠ°, ΡΠ°Π±ΠΎΡΠ°ΡΡΠ°Ρ Π½Π° Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ΅ x86:
ΠΡΠ²ΠΎΠ΄
ΠΠ°ΠΊ ΠΌΡ ΡΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ NDK Ρ Π½Π°ΡΠΈΠ²Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π΄Π»Ρ Android ΡΡΠ΅Π±ΡΠ΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ°Π±ΠΎΡΡ, Π½ΠΎ ΠΏΡΠΈΠ½ΠΎΡΠΈΡ Π½ΠΎΠ²ΡΠΉ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π». ΠΠ°Π΄Π΅ΡΡΡ, Ρ ΠΏΠΎΠΊΠ°Π·Π°Π» Π²Π°ΠΌ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ, ΡΡΠΎΠ±Ρ ΠΎΡΠ΅Π½ΠΈΡΡ, ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π»ΠΈ ΠΎΠ½ Π΄Π»Ρ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΈΠ»ΠΈ Π½Π΅Ρ.
Π― Ρ ΠΎΡΠ΅Π» Π±Ρ ΡΡΠ»ΡΡΠ°ΡΡ Π²Π°Ρ ΠΎΠΏΡΡ ΠΈ ΠΌΠ½Π΅Π½ΠΈΡ ΠΎΠ± ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΠΎΠ΄Π° C ΠΈ C ++ Ρ Android NDK Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ Π½ΠΈΠΆΠ΅.
ΠΠΎΠ±Π°Π²ΡΡΠ΅ Π² ΠΏΡΠΎΠ΅ΠΊΡ ΠΊΠΎΠ΄ C ΠΈ C++ | Android Studio
ΠΠΎΠ±Π°Π²ΡΡΠ΅ ΠΊΠΎΠ΄ C ΠΈ C++ Π² ΡΠ²ΠΎΠΉ ΠΏΡΠΎΠ΅ΠΊΡ Android, ΠΏΠΎΠΌΠ΅ΡΡΠΈΠ² ΠΊΠΎΠ΄ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³ cpp
Π² Π²Π°ΡΠ΅ΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅ ΠΏΡΠΎΠ΅ΠΊΡΠ°. ΠΠΎΠ³Π΄Π° Π²Ρ ΡΡΡΠΎΠΈΡΠ΅ ΡΠ²ΠΎΠΉ ΠΏΡΠΎΠ΅ΠΊΡ, ΡΡΠΎ
ΠΊΠΎΠ΄ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ Π² Π½Π°ΡΠΈΠ²Π½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ, ΠΊΠΎΡΠΎΡΡΡ Gradle ΠΌΠΎΠΆΠ΅Ρ ΡΠΏΠ°ΠΊΠΎΠ²Π°ΡΡ Ρ Π²Π°ΡΠΈΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ.
ΠΠ°ΡΠ΅ΠΌ Π²Π°Ρ ΠΊΠΎΠ΄ Java ΠΈΠ»ΠΈ Kotlin ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π² Π²Π°ΡΠ΅ΠΉ ΡΠΎΠ΄Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅.
ΡΠ΅ΡΠ΅Π· ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Java (JNI). Π§ΡΠΎΠ±Ρ ΡΠ·Π½Π°ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΎΠ± ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ JNI
Framework, ΠΏΡΠΎΡΠΈΡΠ°ΠΉΡΠ΅ ΡΠΎΠ²Π΅ΡΡ JNI Π΄Π»Ρ
ΠΠ½Π΄ΡΠΎΠΈΠ΄.
Android Studio ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ CMake, ΡΡΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π΄Π»Ρ ΠΊΡΠΎΡΡΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΡΡ
ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ².
Android Studio ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ndk-build
, ΠΊΠΎΡΠΎΡΡΠΉ
ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π±ΡΡΡΡΠ΅Π΅, ΡΠ΅ΠΌ CMake, Π½ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Android. ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΊΠ°ΠΊ CMake, ΡΠ°ΠΊ ΠΈ ndk-build
Π² ΡΠΎΠΌ ΠΆΠ΅ ΠΌΠΎΠ΄ΡΠ»Π΅ Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ.
Π§ΡΠΎΠ±Ρ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ ndk-build
Π² Π²Π°ΡΡ Android Studio
ΠΏΡΠΎΠ΅ΠΊΡ, Π½Π°ΡΡΠΈΡΠ΅ΡΡ
ΡΠ²ΡΠΆΠΈΡΠ΅ Gradle Ρ Π²Π°ΡΠΈΠΌ ΡΠΎΠ΄Π½ΡΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ.
ΠΠ° ΡΡΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ Π½Π°ΡΡΡΠΎΠΈΡΡ Android Studio Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ ΡΠ±ΠΎΡΠΊΠΈ, ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π½ΠΎΠ²ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ Π½Π° C/C++ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΠΉΡΠ΅ Π² ΠΏΡΠΎΠ΅ΠΊΡ Π½ΠΎΠ²ΡΠ΅ ΡΠ°ΠΉΠ»Ρ C/C++.
ΠΡΠ»ΠΈ Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΊΠΎΠ΄ Π² ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ΠΏΡΠΎΠ΅ΠΊΡ, Π‘Π»Π΅Π΄ΡΠΉ ΡΡΠΈΠΌ ΡΠ°Π³Π°ΠΌ:
- Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π½ΠΎΠ²ΡΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΈ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅
ΡΠ°ΠΉΠ»Ρ Π² Π²Π°Ρ ΠΏΡΠΎΠ΅ΠΊΡ Android Studio.
- ΠΡΠΎΠΏΡΡΡΠΈΡΠ΅ ΡΡΠΎΡ ΡΠ°Π³, Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ ΡΠΆΠ΅ Π΅ΡΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΈΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π½Π½ΡΡ Π½Π°ΡΠΈΠ²Π½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ.
- ΠΠ°ΡΡΡΠΎΠΉΡΠ΅ CMake Π΄Π»Ρ
Π²ΡΡΡΠΎΠΉΡΠ΅ ΡΠ²ΠΎΠΉ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ. ΠΡΠΎΡ ΡΠΊΡΠΈΠΏΡ ΡΠ±ΠΎΡΠΊΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ
Π΅ΡΠ»ΠΈ Π²Ρ ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΡΠ΅ ΠΈ ΡΠ²ΡΠ·ΡΠ²Π°Π΅ΡΠ΅ Π³ΠΎΡΠΎΠ²ΡΠ΅ ΠΈΠ»ΠΈ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΡΠ΅
Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ.
- ΠΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠΆΠ΅
CMakeLists.txt
ΡΠΊΡΠΈΠΏΡ ΡΠ±ΠΎΡΠΊΠΈ ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρndk-build
ΠΈ Π²ΠΊΠ»ΡΡΠ°Π΅ΡAndroid.mk
ΡΠΊΡΠΈΠΏΡ ΡΠ±ΠΎΡΠΊΠΈ, ΠΏΡΠΎΠΏΡΡΡΠΈΡΠ΅ ΡΡΠΎΡ ΡΠ°Π³.
- ΠΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠΆΠ΅
- ΠΠ°ΡΡΡΠΎΠΈΡΡ
Gradle, ΡΠΊΠ°Π·Π°Π² ΠΏΡΡΡ ΠΊ Π²Π°ΡΠ΅ΠΌΡ CMake ΠΈΠ»ΠΈ
ndk-build
. ΡΠ°ΠΉΠ» ΡΡΠ΅Π½Π°ΡΠΈΡ. Gradle ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠΊΡΠΈΠΏΡ ΡΠ±ΠΎΡΠΊΠΈ Π΄Π»Ρ ΠΈΠΌΠΏΠΎΡΡΠ° ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π² Π²Π°Ρ ΠΡΠΎΠ΅ΠΊΡ Android Studio ΠΈ ΡΠΏΠ°ΠΊΡΠΉΡΠ΅ ΡΠ²ΠΎΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ Π½Π°ΡΡΡΠΎΠΈΡΠ΅ ΡΠ²ΠΎΠΉ ΠΏΡΠΎΠ΅ΠΊΡ, ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ²ΠΎΠΈΠΌ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΌ ΡΡΠ½ΠΊΡΠΈΡΠΌ ΠΈΠ· ΠΠΎΠ΄ Java ΠΈΠ»ΠΈ Kotlin Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ° JNI. Π§ΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π½Π°ΠΆΠΌΠΈΡΠ΅ ΠΡΠΏΠΎΠ»Π½ΠΈΡΡ .
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: ΠΡΠ»ΠΈ Π² ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ndkCompile
, ΠΏΠ΅ΡΠ΅ΠΉΠ΄ΠΈΡΠ΅ Π½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ CMake ΠΈΠ»ΠΈ ndk-ΡΠ±ΠΎΡΠΊΠ°
.
ΠΠ°Π³ΡΡΠ·ΠΈΡΠ΅ NDK ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ ΡΠ±ΠΎΡΠΊΠΈ
Π§ΡΠΎΠ±Ρ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΈ ΠΎΡΠ»Π°Π΄ΠΈΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΊΠΎΠ΄ Π΄Π»Ρ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π²Π°ΠΌ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ:
- Π ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π΄Π»Ρ Android
(NDK): Π½Π°Π±ΠΎΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ², ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ C ΠΈ C++ Ρ
ΠΠ½Π΄ΡΠΎΠΈΠ΄. NDK ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΏΠ»Π°ΡΡΠΎΡΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΌΠΈ
Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ ΠΈ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌ ΡΡΡΡΠΎΠΉΡΡΠ²Π°, ΡΠ°ΠΊΠΈΠΌ ΠΊΠ°ΠΊ Π΄Π°ΡΡΠΈΠΊΠΈ ΠΈ ΡΠ΅Π½ΡΠΎΡΠ½ΡΠ΅
Π²Ρ
ΠΎΠ΄.
- CMake:
Π²Π½Π΅ΡΠ½ΠΈΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΡΠ±ΠΎΡΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π²ΠΌΠ΅ΡΡΠ΅ Ρ Gradle Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ
Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°. ΠΠ°ΠΌ Π½Π΅ Π½ΡΠΆΠ΅Π½ ΡΡΠΎΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ, Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΠ»Π°Π½ΠΈΡΡΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ
ndk-ΡΠ±ΠΎΡΠΊΠ°
. - LLDB: ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ Π² Android Studio, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΠ»Π°ΠΆΠΈΠ²Π°Π΅Ρ Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΊΠΎΠ΄.
Π‘Π²Π΅Π΄Π΅Π½ΠΈΡ ΠΎΠ± ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ ΡΡΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΡΠΌ. Π² ΡΠ°Π·Π΄Π΅Π»Π΅ Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° NDK ΠΈ CMake.
Π‘ΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ C/C++
Π§ΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΏΡΠΎΡΠ΅ΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ΅Π½ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π»ΡΠ±ΠΎΠ³ΠΎ Π΄ΡΡΠ³ΠΎΠ³ΠΎ Android Π‘ΡΡΠ΄ΠΈΠΉΠ½ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ, Π½ΠΎ Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ ΡΠ°Π³ΠΎΠΌ:
- Π ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΌΠ°ΡΡΠ΅ΡΠ° Π²ΡΠ±Π΅ΡΠΈΡΠ΅ ΡΠ²ΠΎΠΉ ΠΏΡΠΎΠ΅ΠΊΡ , Π²ΡΠ±Π΅ΡΠΈΡΠ΅ ΡΠΈΠΏ ΠΏΡΠΎΠ΅ΠΊΡΠ° Native C++ .
- ΠΠ°ΠΆΠΌΠΈΡΠ΅ ΠΠ°Π»Π΅Π΅ .
- ΠΠ°ΠΏΠΎΠ»Π½ΠΈΡΠ΅ Π²ΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΏΠΎΠ»Ρ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΌΠ°ΡΡΠ΅ΡΠ°.
- Π©Π΅Π»ΠΊΠ½ΠΈΡΠ΅ ΠΠ°Π»Π΅Π΅ .
- Π ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΌΠ°ΡΡΠ΅ΡΠ° Customize C++ Support ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ
Π²Π°Ρ ΠΏΡΠΎΠ΅ΠΊΡ Ρ ΠΏΠΎΠ»Π΅ΠΌ C++ Standard .
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΠ°ΡΠΊΡΡΠ²Π°ΡΡΠΈΠΉΡΡ ΡΠΏΠΈΡΠΎΠΊ, ΡΡΠΎΠ±Ρ Π²ΡΠ±Π΅ΡΠΈΡΠ΅, ΠΊΠ°ΠΊΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·Π°ΡΠΈΡ C++ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ. ΠΡΠ±ΠΎΡ ΡΠ΅ΠΏΠΎΡΠΊΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΡ CMake ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ.
- Π©Π΅Π»ΠΊΠ½ΠΈΡΠ΅ ΠΠΎΡΠΎΠ²ΠΎ .
ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Android Studio Π·Π°Π²Π΅ΡΡΠΈΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°, ΠΎΡΠΊΡΠΎΠΉΡΠ΅ Project Π² Π»Π΅Π²ΠΎΠΉ ΡΠ°ΡΡΠΈ IDE ΠΈ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ Android Π²ΠΈΠ΄ ΠΈΠ· ΠΌΠ΅Π½Ρ. ΠΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ 1, Android Studio Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π³ΡΡΠΏΠΏΡ cpp :
Π ΠΈΡΡΠ½ΠΎΠΊ 1. Π³ΡΡΠΏΠΏ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠΉ Android Π΄Π»Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ² ΠΈ Π²Π½Π΅ΡΠ½ΠΈΠ΅ ΡΠΊΡΠΈΠΏΡΡ ΡΠ±ΠΎΡΠΊΠΈ.
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: ΠΡΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΎΡΡΠ°ΠΆΠ°Π΅Ρ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΡ. Π½Π° Π΄ΠΈΡΠΊΠ΅, Π½ΠΎ Π³ΡΡΠΏΠΏΠΈΡΡΠ΅Ρ ΠΏΠΎΡ ΠΎΠΆΠΈΠ΅ ΡΠ°ΠΉΠ»Ρ, ΡΡΠΎΠ±Ρ ΡΠΏΡΠΎΡΡΠΈΡΡ Π½Π°Π²ΠΈΠ³Π°ΡΠΈΡ ΠΏΠΎ Π²Π°ΡΠ΅ΠΌΡ ΠΏΡΠΎΠ΅ΠΊΡΡ.
Π Π³ΡΡΠΏΠΏΠ΅ cpp Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΉΡΠΈ Π²ΡΠ΅ ΡΠΎΠ΄Π½ΡΠ΅
ΠΈΡΡ
ΠΎΠ΄Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ, Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ, ΡΠΊΡΠΈΠΏΡΡ ΡΠ±ΠΎΡΠΊΠΈ Π΄Π»Ρ CMake ΠΈΠ»ΠΈ ndk-build
ΠΈ Π³ΠΎΡΠΎΠ²ΡΠ΅
Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ²Π»ΡΡΡΡΡ ΡΠ°ΡΡΡΡ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°. ΠΠ»Ρ Π½ΠΎΠ²ΡΡ
ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Android Studio
ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΎΠ±ΡΠ°Π·Π΅Ρ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° C++,
native-lib.cpp
, ΠΈ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ Π΅Π³ΠΎ
Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ src/main/cpp/
Π²Π°ΡΠ΅Π³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΡΠΎΡ ΠΎΠ±ΡΠ°Π·Π΅Ρ
ΠΊΠΎΠ΄ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΡΠΎΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ C++, stringFromJNI()
, ΡΡΠΎ
Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΡΠΎΠΊΡ "ΠΡΠΈΠ²Π΅Ρ Ρ C++"
. Π£Π·Π½Π°ΠΉΡΠ΅, ΠΊΠ°ΠΊ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅
ΠΈΡΡ
ΠΎΠ΄Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ Π² Π²Π°Ρ ΠΏΡΠΎΠ΅ΠΊΡ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ
ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π½ΠΎΠ²ΡΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ.
ΠΠΎΠ΄ΠΎΠ±Π½ΠΎ ΡΠΎΠΌΡ, ΠΊΠ°ΠΊ ΡΠ°ΠΉΠ»Ρ build.gradle
ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΡΡΡ Gradle, ΠΊΠ°ΠΊ ΡΠΎΠ±ΠΈΡΠ°ΡΡ
Π²Π°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, CMake ΠΈ ndk-build
ΡΡΠ΅Π±ΡΡΡ ΡΠΊΡΠΈΠΏΡΠ° ΡΠ±ΠΎΡΠΊΠΈ, ΡΡΠΎΠ±Ρ Π·Π½Π°ΡΡ, ΠΊΠ°ΠΊ ΡΠΎΠ±ΠΈΡΠ°ΡΡ
Π²Π°ΡΠ° ΡΠΎΠ΄Π½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°. ΠΠ»Ρ Π½ΠΎΠ²ΡΡ
ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Android Studio ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΠ±ΠΎΡΠΊΡ CMake.
script, CMakeLists.txt
ΠΈ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ Π΅Π³ΠΎ Π² ΠΊΠΎΡΠ½Π΅Π²ΠΎΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ Π²Π°ΡΠ΅Π³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ. Π§ΡΠΎΠ±Ρ ΡΠ·Π½Π°ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠΌ ΡΡΠΎΠ³ΠΎ ΡΠΊΡΠΈΠΏΡΠ° ΡΠ±ΠΎΡΠΊΠΈ, ΠΏΡΠΎΡΠΈΡΠ°ΠΉΡΠ΅
ΠΠ°ΡΡΡΠΎΠΉΡΠ΅ CMake.
Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΠΎΠ±ΡΠ°Π·Π΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
ΠΠΎΠ³Π΄Π° Π²Ρ Π½Π°ΠΆΠΈΠΌΠ°Π΅ΡΠ΅ , Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΠ΅ , Android Studio ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ ΡΠ΅ΠΊΡΡ Β«ΠΡΠΈΠ²Π΅Ρ Ρ C++Β» Π½Π° Π²Π°ΡΠ΅ΠΌ Android-ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ ΠΈΠ»ΠΈ ΡΠΌΡΠ»ΡΡΠΎΡ. Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΎΠ±Π·ΠΎΡΠ΅ ΠΎΠΏΠΈΡΠ°Π½Ρ ΡΠΎΠ±ΡΡΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ ΠΈ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ:
- Gradle Π²ΡΠ·ΡΠ²Π°Π΅Ρ Π²Π°Ρ Π²Π½Π΅ΡΠ½ΠΈΠΉ ΡΠΊΡΠΈΠΏΡ ΡΠ±ΠΎΡΠΊΠΈ,
CMakeLists.txt
. - CMake ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌ Π² ΡΡΠ΅Π½Π°ΡΠΈΠΈ ΡΠ±ΠΎΡΠΊΠΈ Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° C++.
ΡΠ°ΠΉΠ»,
Π½Π°ΡΠΈΠ²-lib.cpp
, Π² ΠΎΠ±ΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΈ ΠΈΠΌΠ΅Π½Π° ΡΡΠΎlibnative-lib.so
. ΠΠ°ΡΠ΅ΠΌ Gradle ΡΠΏΠ°ΠΊΠΎΠ²ΡΠ²Π°Π΅Ρ Π΅Π³ΠΎ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. - ΠΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
MainActivity
Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌSystem.
. Π ΠΎΠ΄Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ,loadLibrary()
stringFromJNI()
, ΡΠ΅ΠΏΠ΅ΡΡ Π΄ΠΎΡΡΡΠΏΠ½ΠΎ Π΄Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. -
MainActivity.onCreate()
Π²ΡΠ·ΠΎΠ²ΡstringFromJNI()
, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ"Hello from C++"
ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π΅Π³ΠΎ Π΄Π»Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡTextView
.
Π§ΡΠΎΠ±Ρ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ Gradle ΡΠΏΠ°ΠΊΠΎΠ²ΡΠ²Π°Π΅Ρ Π½Π°ΡΠΈΠ²Π½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΠ½Π°Π»ΠΈΠ·Π°ΡΠΎΡ APK:
- ΠΡΠ±Π΅ΡΠΈΡΠ΅ Build > Build Bundle(s) / APK(s) > Build APK(s) .
- ΠΡΠ±Π΅ΡΠΈΡΠ΅ Β«Π‘Π±ΠΎΡΠΊΠ° Β» > Β«ΠΠ½Π°Π»ΠΈΠ· APK Β».
- ΠΡΠ±Π΅ΡΠΈΡΠ΅ APK ΠΈΠ»ΠΈ AAB ΠΈΠ· ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°
app/build/outputs/
. ΠΈ Π½Π°ΠΆΠΌΠΈΡΠ΅ OK . - ΠΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ 2, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ²ΠΈΠ΄Π΅ΡΡ
libnative-lib.so
Π² ΠΠΊΠ½ΠΎ APK Analyzer ΠΏΠΎΠ΄lib/
./ Π ΠΈΡΡΠ½ΠΎΠΊ 2. ΠΠ°ΠΉΠ΄ΠΈΡΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ APK ΠΠ½Π°Π»ΠΈΠ·Π°ΡΠΎΡ.
Π‘ΠΎΠ²Π΅Ρ: ΠΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΏΠΎΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌΠΈ Android, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΊΠΎΠ΄, Π½Π°ΠΆΠΌΠΈΡΠ΅ File > New > Import Sample ΠΈ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ ΠΎΠ±ΡΠ°Π·Π΅Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΈΠ· ΡΠΏΠΈΡΠΊΠ° Ndk .
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² C/C++
Π§ΡΠΎΠ±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π½ΠΎΠ²ΡΠ΅ ΠΈΡΡ ΠΎΠ΄Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ C/C++ Π² ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ΠΏΡΠΎΠ΅ΠΊΡ, Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ:
- ΠΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΠ΅ Π½Π΅Ρ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°
cpp/
Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ΅ Π½Π°Π±ΠΎΡ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π΅Π³ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ: - ΠΡΠΊΡΠΎΠΉΡΠ΅ ΠΏΠ°Π½Π΅Π»Ρ Project Π² Π»Π΅Π²ΠΎΠΉ ΡΠ°ΡΡΠΈ IDE ΠΈ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ Π² ΠΌΠ΅Π½Ρ Π²ΠΈΠ΄ Project .
- ΠΠ΅ΡΠ΅ΠΉΠ΄ΠΈΡΠ΅ ΠΊ Π²Π°Ρ-ΠΌΠΎΠ΄ΡΠ»Ρ > src .
- Π©Π΅Π»ΠΊΠ½ΠΈΡΠ΅ ΠΏΡΠ°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡΡΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ ΠΈ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ Π‘ΠΎΠ·Π΄Π°ΡΡ >
Π‘ΠΏΡΠ°Π²ΠΎΡΠ½ΠΈΠΊ .
- ΠΠ²Π΅Π΄ΠΈΡΠ΅
cpp
Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° ΠΈ Π½Π°ΠΆΠΌΠΈΡΠ΅ OK . - Π©Π΅Π»ΠΊΠ½ΠΈΡΠ΅ ΠΏΡΠ°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡΡΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³
cpp/
ΠΈ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ Π‘ΠΎΠ·Π΄Π°ΡΡ > ΠΡΡ ΠΎΠ΄Π½ΡΠΉ ΡΠ°ΠΉΠ» C/C++ . - ΠΠ²Π΅Π΄ΠΈΡΠ΅ ΠΈΠΌΡ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ
native-lib
. - Π ΠΌΠ΅Π½Ρ Π²Π²Π΅Π΄ΠΈΡΠ΅ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»Π°
Π΄Π»Ρ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ
.cpp
.- ΠΠ°ΠΆΠΌΠΈΡΠ΅ Π Π΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΈΠΏΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΡΡΠΎΠ±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠΈΠΏΡ ΡΠ°ΠΉΠ»ΠΎΠ² Π² ΠΌΠ΅Π½Ρ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ
.cxx
ΠΈΠ»ΠΈ.hxx
. Π Π½ΠΎΠ²ΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² Π ΠΏΠΎΡΠ²ΠΈΠ²ΡΠ΅ΠΌΡΡ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΌ ΠΎΠΊΠ½Π΅ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ Π΄ΡΡΠ³ΠΎΠ΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»Π° ΠΈΠ· Π Π°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ° ΠΈ Π Π°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΌΠ΅Π½Ρ ΠΈ Π½Π°ΠΆΠΌΠΈΡΠ΅ OK .
- ΠΠ°ΠΆΠΌΠΈΡΠ΅ Π Π΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΈΠΏΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΡΡΠΎΠ±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠΈΠΏΡ ΡΠ°ΠΉΠ»ΠΎΠ² Π² ΠΌΠ΅Π½Ρ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ
- Π§ΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ°ΠΉΠ» Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°, Π²ΡΠ±Π΅ΡΠΈΡΠ΅ Π‘ΠΎΠ·Π΄Π°ΡΡ
ΡΠ²ΡΠ·Π°Π½Π½ΡΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΡΠ»Π°ΠΆΠΎΠΊ.
- Π©Π΅Π»ΠΊΠ½ΠΈΡΠ΅ OK .
ΠΠΎΡΠ»Π΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π² ΠΏΡΠΎΠ΅ΠΊΡ Π½ΠΎΠ²ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² C/C++ Π²Π°ΠΌ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ CMake Π΄Π»Ρ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² Π² Π²Π°ΡΠ° ΡΠΎΠ΄Π½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°.
ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ΅ΡΡΡΡΡ
Π§ΡΠΎΠ±Ρ ΡΠ·Π½Π°ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ΅ ΠΊΠΎΠ΄Π° C/C++ Π² Π²Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, ΠΏΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅. ΡΠ΅ΡΡΡΡ.
Codelabs
- Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Hello-CMake Ρ ΠΏΠΎΠΌΠΎΡΡΡ Android Studio Π ΡΡΠΎΠΉ Π»Π°Π±ΠΎΡΠ°ΡΠΎΡΠΈΠΈ ΠΊΠΎΠ΄Π° ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°Π±Π»ΠΎΠ½ Android Studio CMake Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ° Android NDK.
Π‘Π²ΡΠΆΠΈΡΠ΅ Gradle ΡΠΎ ΡΠ²ΠΎΠ΅ΠΉ ΡΠΎΠ΄Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ | Android-ΡΡΡΠ΄ΠΈΡ
Π§ΡΠΎΠ±Ρ Π²ΠΊΠ»ΡΡΠΈΡΡ Π²Π°Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΡΠ±ΠΎΡΠΊΠΈ Gradle, Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ
ΡΡΠΎΠ±Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ Gradle ΠΏΡΡΡ ΠΊ ΡΠ°ΠΉΠ»Ρ ΡΡΠ΅Π½Π°ΡΠΈΡ CMake ΠΈΠ»ΠΈ ndk-build. ΠΠΎΠ³Π΄Π°
Π²Ρ ΡΠΎΠ·Π΄Π°Π΅ΡΠ΅ ΡΠ²ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Gradle Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ CMake ΠΈΠ»ΠΈ ndk-build, Π° ΠΏΠ°ΠΊΠ΅ΡΡ
Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Ρ Π²Π°ΡΠΈΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ. Gradle ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠΊΡΠΈΠΏΡ ΡΠ±ΠΎΡΠΊΠΈ, ΡΡΠΎΠ±Ρ ΡΠ·Π½Π°ΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ ΡΠ°ΠΉΠ»Ρ
Π²ΡΡΠ½ΡΡΡ Π² ΡΠ²ΠΎΠΉ ΠΏΡΠΎΠ΅ΠΊΡ Android Studio, ΡΡΠΎΠ±Ρ Π²Ρ ΠΌΠΎΠ³Π»ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΊ Π½ΠΈΠΌ Π΄ΠΎΡΡΡΠΏ ΠΈΠ· ΠΠΊΠ½ΠΎ ΠΏΡ. . ΠΡΠ»ΠΈ Ρ Π²Π°Ρ Π½Π΅Ρ ΡΠΊΡΠΈΠΏΡΠ° ΡΠ±ΠΎΡΠΊΠΈ Π΄Π»Ρ ΡΠΎΠ΄Π½ΠΎΠ³ΠΎ
ΠΈΡΡ
ΠΎΠ΄Π½ΠΈΠΊΠΈ, Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°ΡΡ
Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ ΡΠ±ΠΎΡΠΊΠΈ CMake, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ.
ΠΠ°ΠΆΠ΄ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ Π² Π²Π°ΡΠ΅ΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅ Android ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ²ΡΠ·Π°Π½ ΡΠΎΠ»ΡΠΊΠΎ Ρ ΠΎΠ΄Π½ΠΈΠΌ CMake ΠΈΠ»ΠΈ ndk-build.
ΡΠ°ΠΉΠ» ΡΡΠ΅Π½Π°ΡΠΈΡ. Π’Π°ΠΊ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅ ΡΠΎΠ±ΡΠ°ΡΡ ΠΈ ΡΠΏΠ°ΠΊΠΎΠ²Π°ΡΡ Π²ΡΡ
ΠΎΠ΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ·
Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² CMake, Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠ°ΠΉΠ» CMakeLists.txt
ΠΊΠ°ΠΊ Π²Π°Ρ ΡΠΊΡΠΈΠΏΡ ΡΠ±ΠΎΡΠΊΠΈ CMake Π²Π΅ΡΡ
Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ (Ρ ΠΊΠΎΡΠΎΡΡΠΌ Π²Ρ Π·Π°ΡΠ΅ΠΌ ΡΠ²ΡΠ·ΡΠ²Π°Π΅ΡΠ΅ Gradle) ΠΈ
Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΡ CMake ΠΊΠ°ΠΊ
Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΡΡΠΎΠ³ΠΎ ΡΠΊΡΠΈΠΏΡΠ° ΡΠ±ΠΎΡΠΊΠΈ. Π’ΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅, Π΅ΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ndk-build, Π²Ρ
ΠΌΠΎΠΆΠ΅Ρ Π²ΠΊΠ»ΡΡΠ°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ°ΠΉΠ»Ρ Makefile Π² Π²Π°Ρ ΡΠ°ΠΉΠ» Π²Π΅ΡΡ
Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ. Android.mk
ΡΠ°ΠΉΠ» ΡΠΊΡΠΈΠΏΡΠ°.
ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Π²Ρ ΡΠ²ΡΠΆΠ΅ΡΠ΅ Gradle Ρ Π½Π°ΡΠΈΠ²Π½ΡΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ, Android Studio ΠΎΠ±Π½ΠΎΠ²ΠΈΡ ΠΠ°Π½Π΅Π»Ρ Project Π΄Π»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈΡΡ
ΠΎΠ΄Π½ΡΡ
ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ
Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ.
Π² Π³ΡΡΠΏΠΏΠ΅ cpp , Π° Π²Π°ΡΠΈ Π²Π½Π΅ΡΠ½ΠΈΠ΅ ΡΠΊΡΠΈΠΏΡΡ ΡΠ±ΠΎΡΠΊΠΈ Π² Π³ΡΡΠΏΠΏΠ΅
ΠΡΡΠΏΠΏΠ° ΠΠ½Π΅ΡΠ½ΠΈΠ΅ ΡΠ°ΠΉΠ»Ρ ΡΠ±ΠΎΡΠΊΠΈ .
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅. ΠΡΠΈ Π²Π½Π΅ΡΠ΅Π½ΠΈΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Gradle ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ, Π½Π°ΠΆΠ°Π² Sync Project Π½Π° ΠΏΠ°Π½Π΅Π»ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ². ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΏΡΠΈ Π²Π½Π΅ΡΠ΅Π½ΠΈΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² CMake ΠΈΠ»ΠΈ ndk-build script ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ ΡΠΆΠ΅ ΡΠ²ΡΠ·Π°Π»ΠΈ Π΅Π³ΠΎ Ρ Gradle, Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Android Studio Ρ Π²Π°ΡΠΈΠΌΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΠΌΠΈ, Π²ΡΠ±ΡΠ°Π² Π‘Π±ΠΎΡΠΊΠ° > ΠΠ±Π½ΠΎΠ²ΠΈΡΡ ΡΠ²ΡΠ·Π°Π½Π½ΡΠΉ C++ ΠΡΠΎΠ΅ΠΊΡΡ ΠΈΠ· ΡΡΡΠΎΠΊΠΈ ΠΌΠ΅Π½Ρ.
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ²ΡΠ·Π°ΡΡ Gradle Ρ Π²Π½Π΅ΡΠ½ΠΈΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ CMake ΠΈΠ»ΠΈ ndk-build, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Android-ΡΡΡΠ΄ΠΈΠΈ:
- ΠΡΠΊΡΠΎΠΉΡΠ΅ ΠΏΠ°Π½Π΅Π»Ρ Project Ρ Π»Π΅Π²ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ IDE ΠΈ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ Π²ΠΈΠ΄ Android .
- Π©Π΅Π»ΠΊΠ½ΠΈΡΠ΅ ΠΏΡΠ°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡΡΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΡΠ²ΡΠ·Π°ΡΡ ΡΠΎ ΡΠ²ΠΎΠ΅ΠΉ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΌΠΎΠ΄ΡΠ»Ρ app , ΠΈ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ Link C++ Project Ρ Gradle ΠΈΠ· ΠΌΠ΅Π½Ρ. ΠΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ, ΠΏΠΎΡ ΠΎΠΆΠ΅Π΅ Π½Π° ΡΠΎΡ, ΡΡΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½ Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ 4.
- Π ΡΠ°ΡΠΊΡΡΠ²Π°ΡΡΠ΅ΠΌΡΡ ΠΌΠ΅Π½Ρ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ CMake ΠΈΠ»ΠΈ .
ndk-ΡΠ±ΠΎΡΠΊΠ° .
- ΠΡΠΈ Π²ΡΠ±ΠΎΡΠ΅ CMake ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΏΠΎΠ»Π΅ ΡΡΠ΄ΠΎΠΌ Ρ ΠΡΡΡ ΠΊ ΠΏΡΠΎΠ΅ΠΊΡΡ Π΄Π»Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΡΡΠ΅Π½Π°ΡΠΈΡ
CMakeLists.txt
. ΡΠ°ΠΉΠ» Π΄Π»Ρ Π²Π°ΡΠ΅Π³ΠΎ Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° CMake. - ΠΡΠ»ΠΈ Π²Ρ Π²ΡΠ±Π΅ΡΠ΅ΡΠ΅ ndk-build , ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΏΠΎΠ»Π΅ ΡΡΠ΄ΠΎΠΌ Ρ Project Path Π΄Π»Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΡΠ°ΠΉΠ»Π° ΡΡΠ΅Π½Π°ΡΠΈΡ
Android.mk
Π΄Π»Ρ Π²Π°Ρ Π²Π½Π΅ΡΠ½ΠΈΠΉ ΠΏΡΠΎΠ΅ΠΊΡ ndk-build. Android Studio ΡΠ°ΠΊΠΆΠ΅ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±ΡApplication.mk
ΡΠ°ΠΉΠ», Π΅ΡΠ»ΠΈ ΠΎΠ½ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠΎΠΌ ΠΆΠ΅ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅, ΡΡΠΎ ΠΈ Π²Π°ΡΠ€Π°ΠΉΠ» Android.mk
.
Π ΠΈΡΡΠ½ΠΎΠΊ 4. Π‘Π²ΡΠ·ΡΠ²Π°Π½ΠΈΠ΅ Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° C++ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Android Studio.
- ΠΡΠΈ Π²ΡΠ±ΠΎΡΠ΅ CMake ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΏΠΎΠ»Π΅ ΡΡΠ΄ΠΎΠΌ Ρ ΠΡΡΡ ΠΊ ΠΏΡΠΎΠ΅ΠΊΡΡ Π΄Π»Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΡΡΠ΅Π½Π°ΡΠΈΡ
- Π©Π΅Π»ΠΊΠ½ΠΈΡΠ΅ OK .
ΠΠ°ΡΡΡΠΎΠΈΡΡ Gradle Π²ΡΡΡΠ½ΡΡ
Π§ΡΠΎΠ±Ρ Π²ΡΡΡΠ½ΡΡ Π½Π°ΡΡΡΠΎΠΈΡΡ Gradle Π΄Π»Ρ ΡΡΡΠ»ΠΊΠΈ Π½Π° Π²Π°ΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ, Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ
Π²
ΠΠ»ΠΎΠΊ externalNativeBuild
Π½Π° ΡΡΠΎΠ²Π½Π΅ Π²Π°ΡΠ΅Π³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ build.
ΠΈ Π½Π°ΡΡΡΠΎΠΉΡΠ΅ Π΅Π³ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ gradle
cmake
ΠΈΠ»ΠΈ
ΠΠ»ΠΎΠΊ ndkBuild
:
Groovy
Π°Π½Π΄ΡΠΎΠΈΠ΄ { ... defaultConfig {...} ΡΠΈΠΏΡ ΡΠ±ΠΎΡΠΊΠΈ {...} // ΠΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΡΠ΅Ρ Π²Π°ΡΠΈ Π²Π½Π΅ΡΠ½ΠΈΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΡΠ±ΠΎΡΠΊΠΈ. externalNativeBuild { // ΠΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΡΠ΅Ρ Π²Π°ΡΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΡΠ±ΠΎΡΠΊΠΈ CMake. ΡΠ΄Π΅Π»Π°ΠΉ { // ΠΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΡΡΡ ΠΊ Π²Π°ΡΠ΅ΠΌΡ ΡΠΊΡΠΈΠΏΡΡ ΡΠ±ΠΎΡΠΊΠΈ CMake. ΠΏΡΡΡ "CMakeLists.txt" } } }
ΠΠΎΡΠ»ΠΈΠ½
Π°Π½Π΄ΡΠΎΠΈΠ΄ { ... defaultConfig {...} ΡΠΈΠΏΡ ΡΠ±ΠΎΡΠΊΠΈ {...} // ΠΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΡΠ΅Ρ Π²Π°ΡΠΈ Π²Π½Π΅ΡΠ½ΠΈΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΡΠ±ΠΎΡΠΊΠΈ. externalNativeBuild { // ΠΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΡΠ΅Ρ Π²Π°ΡΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΡΠ±ΠΎΡΠΊΠΈ CMake. ΡΠ΄Π΅Π»Π°ΠΉ { // ΠΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΡΡΡ ΠΊ Π²Π°ΡΠ΅ΠΌΡ ΡΠΊΡΠΈΠΏΡΡ ΡΠ±ΠΎΡΠΊΠΈ CMake. ΠΏΡΡΡ = ΡΠ°ΠΉΠ» ("CMakeLists.txt") } } }
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: ΠΡΠ»ΠΈ Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅ ΡΠ²ΡΠ·Π°ΡΡ Gradle Ρ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΉ ΡΠ±ΠΎΡΠΊΠΎΠΉ ndk
ΠΏΡΠΎΠ΅ΠΊΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΠ»ΠΎΠΊ ndkBuild
Π²ΠΌΠ΅ΡΡΠΎ cmake
block ΠΈ ΡΠΊΠ°ΠΆΠΈΡΠ΅ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΡΡΡ ΠΊ Π²Π°ΡΠ΅ΠΌΡ ΡΠ°ΠΉΠ»Ρ Android.
. ΠΡΠ΅ΠΉΠ΄Π» ΡΠ°ΠΊΠΆΠ΅
Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΡΠ°ΠΉΠ» mk
Application.mk
, Π΅ΡΠ»ΠΈ ΠΎΠ½
Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠΎΠΌ ΠΆΠ΅ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅, ΡΡΠΎ ΠΈ Π²Π°Ρ ΡΠ°ΠΉΠ» Android.mk
.
Π£ΠΊΠ°ΠΆΠΈΡΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΊΠ°Π·Π°ΡΡ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΈ ΡΠ»Π°Π³ΠΈ Π΄Π»Ρ CMake ΠΈΠ»ΠΈ ndk-build Ρ ΠΏΠΎΠΌΠΎΡΡΡ
Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Π΄ΡΡΠ³ΠΎΠ³ΠΎ externalNativeBuild
Π±Π»ΠΎΠΊ Π²Π½ΡΡΡΠΈ defaultConfig
Π±Π»ΠΎΠΊ Π²Π°ΡΠ΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ ΠΌΠΎΠ΄ΡΠ»Ρ
Π€Π°ΠΉΠ» build.gradle
. ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ Π΄ΡΡΠ³ΠΈΠΌ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌ Π² defaultConfig
, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΡΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π° Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ
Π²ΠΊΡΡ ΠΏΡΠΎΠ΄ΡΠΊΡΠ° Π² Π²Π°ΡΠ΅ΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΡΠ±ΠΎΡΠΊΠΈ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π²Π°Ρ ΠΏΡΠΎΠ΅ΠΊΡ CMake ΠΈΠ»ΠΈ ndk-build ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ
Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠ΅ ΡΠ°ΠΉΠ»Ρ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π°ΡΠ΅Π»Π΅Π½ Π½Π° ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ
Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈ ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΡΡΠΈΡ
Π°ΡΡΠ΅ΡΠ°ΠΊΡΡ Π΄Π»Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π²ΠΊΡΡΠ° ΠΏΡΠΎΠ΄ΡΠΊΡΠ°. Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΊΠΎΠ΄Π° ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ
Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· ΡΠ²ΠΎΠΉΡΡΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΡΡΡΠΎΠΈΡΡ:
Groovy
Π°Π½Π΄ΡΠΎΠΈΠ΄ { ... defaultConfig { ... // ΠΡΠΎΡ Π±Π»ΠΎΠΊ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ ΡΠΎΠ³ΠΎ, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Π΄Π»Ρ ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΡ Gradle // Π² Π²Π°Ρ ΡΠΊΡΠΈΠΏΡ CMake ΠΈΠ»ΠΈ ndk-build. externalNativeBuild { // ΠΠ»Ρ ndk-build Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π±Π»ΠΎΠΊ ndkBuild. ΡΠ΄Π΅Π»Π°ΠΉ { // ΠΠ΅ΡΠ΅Π΄Π°Π΅Ρ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ Π² CMake. Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ "-DANDROID_ARM_NEON=TRUE", "-DANDROID_TOOLCHAIN=clang" // Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΠ»Π°Π³ Π΄Π»Ρ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΌΠ°ΠΊΡΠΎΠΊΠΎΠ½ΡΡΠ°Π½Ρ ΡΠΎΡΠΌΠ°ΡΠ° Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° C. cFlags "-D__STDC_FORMAT_MACROS" // Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ»Π°Π³ΠΈ Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° C++. cppFlags "-fexceptions", "-frtti" } } } ΡΠΈΠΏΡ ΡΠ±ΠΎΡΠΊΠΈ {...} Π²ΠΊΡΡ ΠΏΡΠΎΠ΄ΡΠΊΡΠ° { ... Π΄Π΅ΠΌΠΎ { ... externalNativeBuild { ΡΠ΄Π΅Π»Π°ΠΉ { ... // Π£ΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΠΊΠ°ΠΊΠΈΠ΅ Π½Π°ΡΠΈΠ²Π½ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠ΅ ΡΠ°ΠΉΠ»Ρ Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ±ΡΠ°ΡΡ ΠΈ ΡΠΏΠ°ΠΊΠΎΠ²Π°ΡΡ // Π΄Π»Ρ Π²ΠΊΡΡΠ° ΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΠ΄ΡΠΊΡΠ°.Π‘Π»Π΅Π΄ΡΡΡΠ΅Π΅ Π³ΠΎΠ²ΠΎΡΠΈΡ Gradle ΠΏΠΎΡΡΡΠΎΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ // "native-lib-demo" ΠΈ "my-executible-demo" Π²ΡΠ²ΠΎΠ΄ΡΡΡΡ ΠΈΠ· ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠ³ΠΎ // CMake-ΠΏΡΠΎΠ΅ΠΊΡ. ΠΡΠ»ΠΈ Π²Ρ Π½Π΅ Π½Π°ΡΡΡΠΎΠΈΡΠ΅ ΡΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ, Gradle ΡΠΎΠ·Π΄Π°ΡΡ Π²ΡΠ΅ // ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΈ ΠΎΠ±ΡΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΠ΅ Π² ΡΠ²ΠΎΠ΅ΠΌ CMake // (ΠΈΠ»ΠΈ ndk-build) ΠΏΡΠΎΠ΅ΠΊΡ. ΠΠ΄Π½Π°ΠΊΠΎ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Gradle ΡΠΏΠ°ΠΊΠΎΠ²ΡΠ²Π°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ // ΠΎΠ±ΡΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π² Π²Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. Π½Π°ΡΠ΅Π»Π΅Π½ Π½Π° "native-lib-demo", // ΠΠ°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΡΡΠΎΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ» ΠΈ Π΅Π³ΠΎ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΈ Π² Π²Π°ΡΠ΅ΠΌ CMakeLists.txt // Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ add_executable(). ΠΠ΄Π½Π°ΠΊΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈΠ· Π²Π°ΡΠ΅Π³ΠΎ // ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΠΈΡΡ ΠΎΠ΄Π½ΡΠ΅ ΠΊΠΎΠ΄Ρ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½Ρ, ΠΈ ΡΠ±ΠΎΡΠΊΠ° ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Π΄Π»Ρ ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ Π² Π½ΠΈΡ // Π²Π°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΠ΅Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Ρ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΏΡΠΎΠ΅ΠΊΡΠ°. "ΠΌΠΎΡ-ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠ°Ρ-Π΄Π΅ΠΌΠΎ" } } } ΠΎΠΏΠ»Π°ΡΠ΅Π½Π½ΡΠΉ { ... externalNativeBuild { ΡΠ΄Π΅Π»Π°ΠΉ { .
.. Π½Π°ΡΠ΅Π»Π΅Π½Ρ Π½Π° Β«ΠΎΠΏΠ»Π°ΡΠ΅Π½Π½ΡΡ Π½Π°ΡΠΈΠ²Π½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡΒ», "ΠΌΠΎΠΉ-ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ-ΠΎΠΏΠ»Π°ΡΠ΅Π½Π½ΡΠΉ" } } } } // ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΠΎΡ Π±Π»ΠΎΠΊ, ΡΡΠΎΠ±Ρ ΡΠ²ΡΠ·Π°ΡΡ Gradle Ρ Π²Π°ΡΠΈΠΌ ΡΠΊΡΠΈΠΏΡΠΎΠΌ CMake ΠΈΠ»ΠΈ ndk-build. externalNativeBuild { ΡΠ΄Π΅Π»Π°ΡΡ {...} // ΠΈΠ»ΠΈ ndkBuild {...} } }
ΠΠΎΡΠ»ΠΈΠ½
Π°Π½Π΄ΡΠΎΠΈΠ΄ { ... defaultConfig { ... // ΠΡΠΎΡ Π±Π»ΠΎΠΊ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ ΡΠΎΠ³ΠΎ, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Π΄Π»Ρ ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΡ Gradle // Π² Π²Π°Ρ ΡΠΊΡΠΈΠΏΡ CMake ΠΈΠ»ΠΈ ndk-build. externalNativeBuild { // ΠΠ»Ρ ndk-build Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π±Π»ΠΎΠΊ ndkBuild. ΡΠ΄Π΅Π»Π°ΠΉ { // ΠΠ΅ΡΠ΅Π΄Π°Π΅Ρ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ Π² CMake. Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ += listOf("-DANDROID_ARM_NEON=TRUE", "-DANDROID_TOOLCHAIN=clang") // Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΠ»Π°Π³ Π΄Π»Ρ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΌΠ°ΠΊΡΠΎΠΊΠΎΠ½ΡΡΠ°Π½Ρ ΡΠΎΡΠΌΠ°ΡΠ° Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° C. cFlags += listOf("-D__STDC_FORMAT_MACROS") // Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ»Π°Π³ΠΈ Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° C++. cppFlags += listOf("-fexceptions", "-frtti") } } } ΡΠΈΠΏΡ ΡΠ±ΠΎΡΠΊΠΈ {...} Π²ΠΊΡΡ ΠΏΡΠΎΠ΄ΡΠΊΡΠ° { ... ΡΠΎΠ·Π΄Π°ΡΡ ("Π΄Π΅ΠΌΠΎ") { ... externalNativeBuild { ΡΠ΄Π΅Π»Π°ΠΉ { ... // Π£ΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΠΊΠ°ΠΊΠΈΠ΅ Π½Π°ΡΠΈΠ²Π½ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠ΅ ΡΠ°ΠΉΠ»Ρ Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ±ΡΠ°ΡΡ ΠΈ ΡΠΏΠ°ΠΊΠΎΠ²Π°ΡΡ // Π΄Π»Ρ Π²ΠΊΡΡΠ° ΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΠ΄ΡΠΊΡΠ°. Π‘Π»Π΅Π΄ΡΡΡΠ΅Π΅ Π³ΠΎΠ²ΠΎΡΠΈΡ Gradle ΠΏΠΎΡΡΡΠΎΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ // "native-lib-demo" ΠΈ "my-executible-demo" Π²ΡΠ²ΠΎΠ΄ΡΡΡΡ ΠΈΠ· ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠ³ΠΎ // CMake-ΠΏΡΠΎΠ΅ΠΊΡ. ΠΡΠ»ΠΈ Π²Ρ Π½Π΅ Π½Π°ΡΡΡΠΎΠΈΡΠ΅ ΡΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ, Gradle ΡΠΎΠ·Π΄Π°ΡΡ Π²ΡΠ΅ // ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΈ ΠΎΠ±ΡΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΠ΅ Π² ΡΠ²ΠΎΠ΅ΠΌ CMake // (ΠΈΠ»ΠΈ ndk-build) ΠΏΡΠΎΠ΅ΠΊΡ. ΠΠ΄Π½Π°ΠΊΠΎ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Gradle ΡΠΏΠ°ΠΊΠΎΠ²ΡΠ²Π°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ // ΠΎΠ±ΡΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π² Π²Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. target += listOf("native-lib-demo", // ΠΠ°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΡΡΠΎΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ» ΠΈ Π΅Π³ΠΎ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΈ Π² Π²Π°ΡΠ΅ΠΌ CMakeLists.txt // Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ add_executable(). ΠΠ΄Π½Π°ΠΊΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈΠ· Π²Π°ΡΠ΅Π³ΠΎ // ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΠΈΡΡ ΠΎΠ΄Π½ΡΠ΅ ΠΊΠΎΠ΄Ρ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½Ρ, ΠΈ ΡΠ±ΠΎΡΠΊΠ° ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Π΄Π»Ρ ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ Π² Π½ΠΈΡ // Π²Π°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΠ΅Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Ρ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΏΡΠΎΠ΅ΠΊΡΠ°.
"ΠΌΠΎΡ-ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠ°Ρ-Π΄Π΅ΠΌΠΎ") } } } ΡΠΎΠ·Π΄Π°ΡΡ("ΠΏΠ»Π°ΡΠ½ΠΎ") { ... externalNativeBuild { ΡΠ΄Π΅Π»Π°ΠΉ { ... target += listOf("native-lib-paid", "ΠΌΠΎΠΉ-ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ-ΠΏΠ»Π°ΡΠ½ΡΠΉ") } } } } // ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΠΎΡ Π±Π»ΠΎΠΊ, ΡΡΠΎΠ±Ρ ΡΠ²ΡΠ·Π°ΡΡ Gradle Ρ Π²Π°ΡΠΈΠΌ ΡΠΊΡΠΈΠΏΡΠΎΠΌ CMake ΠΈΠ»ΠΈ ndk-build. externalNativeBuild { ΡΠ΄Π΅Π»Π°ΡΡ {...} // ΠΈΠ»ΠΈ ndkBuild {...} } }
Π§ΡΠΎΠ±Ρ ΡΠ·Π½Π°ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΎ Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅ Π²ΠΊΡΡΠΎΠ² ΠΏΡΠΎΠ΄ΡΠΊΡΠ° ΠΈ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΡΠ±ΠΎΡΠΊΠΈ, ΠΏΠ΅ΡΠ΅ΠΉΠ΄ΠΈΡΠ΅ Π½Π°
ΠΠ°ΡΡΡΠΎΠΈΡΡ Π²Π°ΡΠΈΠ°Π½ΡΡ ΡΠ±ΠΎΡΠΊΠΈ. ΠΠ»Ρ
ΡΠΏΠΈΡΠΎΠΊ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΡΡΡΠΎΠΈΡΡ Π΄Π»Ρ CMake Ρ ΠΏΠΎΠΌΠΎΡΡΡ arguments
ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ, ΡΠΌ. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
CMake.
ΠΠΊΠ»ΡΡΠΈΡΡ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ
ΠΡΠ»ΠΈ Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅, ΡΡΠΎΠ±Ρ Gradle ΡΠΏΠ°ΠΊΠΎΠ²ΡΠ²Π°Π» ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π½ΠΈ Π²
Π²Π½Π΅ΡΠ½ΡΡ Π½Π°ΡΠΈΠ²Π½Π°Ρ ΡΠ±ΠΎΡΠΊΠ°, Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΠΈΡ
Π² src/main/jniLibs/ ABI
ΠΊΠ°ΡΠ°Π»ΠΎΠ³ Π²Π°ΡΠ΅Π³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ.
Π’ΡΠ΅Π±ΡΡΡΡΡ Π²Π΅ΡΡΠΈΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ Android Gradle Π΄ΠΎ 4.0, Π²ΠΊΠ»ΡΡΠ°Ρ CMake ΠΠΠΠΠ Π’ΠΠ ΠΠΠΠΠ
ΡΠ΅Π»ΠΈ Π² Π²Π°ΡΠ΅ΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ jniLibs
, ΡΡΠΎΠ±Ρ ΠΎΠ½ΠΈ Π±ΡΠ»ΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½Ρ Π² Π²Π°Ρ
ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠΡΠ»ΠΈ Π²Ρ ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄ΠΈΡΠ΅ Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠ°Π½Π½Π΅ΠΉ Π²Π΅ΡΡΠΈΠΈ ΠΏΠ»Π°Π³ΠΈΠ½Π°, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅
ΡΡΠΎΠ»ΠΊΠ½ΡΡΡΡΡ Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ:
* Π§ΡΠΎ ΠΏΠΎΡΠ»ΠΎ Π½Π΅ ΡΠ°ΠΊ: ΠΠ΅ ΡΠ΄Π°Π»ΠΎΡΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π·Π°Π΄Π°ΡΡ ':app:mergeDebugNativeLibs'. > ΠΡΠΎΠΈΠ·ΠΎΡΠ΅Π» ΡΠ±ΠΎΠΉ ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ com.android.build.gradle.internal.tasks.Workers$ActionFacade > ΠΡΠ»ΠΎ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Ρ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠΌ ΠΎΡ ΠΠ‘ ΠΏΡΡΠ΅ΠΌ Β«lib/x86/libprebuilt.soΒ».
ΠΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Android Gradle Plugin 4.0, ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΡΠ΅ Π²ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ ΠΠΠΠΠ Π’ΠΠ ΠΠΠΠΠ
Π¦Π΅Π»ΠΈ CMake ΠΈΠ· ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° jniLibs
, ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΡΡΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ.
Π£ΠΊΠ°ΠΆΠΈΡΠ΅ ABI
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Gradle ΡΠΎΠ±ΠΈΡΠ°Π΅Ρ Π²Π°ΡΡ Π½Π°ΡΠΈΠ²Π½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ .
.
ΡΠ°ΠΉΠ»Ρ Π΄Π»Ρ Π±ΠΈΠ½Π°ΡΠ½ΡΡ
ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ
(ABI) NDK ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΈ ΡΠΏΠ°ΠΊΠΎΠ²ΡΠ²Π°Π΅Ρ ΠΈΡ
Π²ΡΠ΅ Π² Π²Π°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠΡΠ»ΠΈ ΡΡ Ρ
ΠΎΡΠ΅ΡΡ
Gradle Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ ΠΈ ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ
ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΉ ABI Π²Π°ΡΠ΅Π³ΠΎ ΡΠΎΠ΄Π½ΠΎΠ³ΠΎ
Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΊΠ°Π·Π°ΡΡ ΠΈΡ
Ρ ΠΏΠΎΠΌΠΎΡΡΡ so
ndk.abiΠ€ΠΈΠ»ΡΡΡΡ
ΡΠ»Π°Π³ Π² ΡΠ°ΠΉΠ»Π΅ build.gradle ΡΡΠΎΠ²Π½Ρ ΠΌΠΎΠ΄ΡΠ»Ρ , ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:
Groovy
Π°Π½Π΄ΡΠΎΠΈΠ΄ { ... defaultConfig { ... externalNativeBuild { ΡΠ΄Π΅Π»Π°ΡΡ {...} // ΠΈΠ»ΠΈ ndkBuild {...} } // ΠΠΎΠ΄ΠΎΠ±Π½ΠΎ Π΄ΡΡΠ³ΠΈΠΌ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌ Π² Π±Π»ΠΎΠΊΠ΅defaultConfig
, // Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΡΡΡΠΎΠΈΡΡ Π±Π»ΠΎΠΊ ndk Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²ΠΊΡΡΠ° ΠΏΡΠΎΠ΄ΡΠΊΡΠ° // Π² Π²Π°ΡΠ΅ΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΡΠ±ΠΎΡΠΊΠΈ. Π½Π΄ΠΊ { // Π£ΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ABI Π²Π°ΡΠ΅Π³ΠΎ ΡΠΎΠ΄Π½ΠΎΠ³ΠΎ // Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Gradle Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ±ΡΠ°ΡΡ ΠΈ ΡΠΏΠ°ΠΊΠΎΠ²Π°ΡΡ Π²ΠΌΠ΅ΡΡΠ΅ Ρ Π²Π°ΡΠΈΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ. abiFilters 'x86', 'x86_64', 'armeabi', 'armeabi-v7a', 'arm64-v8a' } } ΡΠΈΠΏΡ ΡΠ±ΠΎΡΠΊΠΈ {...} externalNativeBuild {...} }
ΠΠΎΡΠ»ΠΈΠ½
Π°Π½Π΄ΡΠΎΠΈΠ΄ {
...
defaultConfig {
...
externalNativeBuild {
ΡΠ΄Π΅Π»Π°ΡΡ {...}
// ΠΈΠ»ΠΈ ndkBuild {...}
}
// ΠΠΎΠ΄ΠΎΠ±Π½ΠΎ Π΄ΡΡΠ³ΠΈΠΌ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌ Π² Π±Π»ΠΎΠΊΠ΅ defaultConfig
,
// Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΡΡΡΠΎΠΈΡΡ Π±Π»ΠΎΠΊ ndk Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²ΠΊΡΡΠ° ΠΏΡΠΎΠ΄ΡΠΊΡΠ°
// Π² Π²Π°ΡΠ΅ΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΡΠ±ΠΎΡΠΊΠΈ.
Π½Π΄ΠΊ {
// Π£ΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ABI Π²Π°ΡΠ΅Π³ΠΎ ΡΠΎΠ΄Π½ΠΎΠ³ΠΎ
// Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Gradle Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ±ΡΠ°ΡΡ ΠΈ ΡΠΏΠ°ΠΊΠΎΠ²Π°ΡΡ Π²ΠΌΠ΅ΡΡΠ΅ Ρ Π²Π°ΡΠΈΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ.
abiFilters += listOf("x86", "x86_64", "armeabi", "armeabi-v7a",
"arm64-v8a")
}
}
ΡΠΈΠΏΡ ΡΠ±ΠΎΡΠΊΠΈ {...}
externalNativeBuild {...}
}
Π Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π² Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ abiFilters
Π² ndk
Π±Π»ΠΎΠΊ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π²ΡΡΠ΅, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ ΡΠΎΠΎΠ±ΡΠ°Π΅Ρ Gradle ΠΎ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΠ±ΠΎΡΠΊΠΈ
ΠΈ ΡΠΏΠ°ΠΊΡΠΉΡΠ΅ ΡΡΠΈ Π²Π΅ΡΡΠΈΠΈ Π²Π°ΡΠΈΡ
ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ
Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ. ΠΠ΄Π½Π°ΠΊΠΎ, Π΅ΡΠ»ΠΈ Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅
ΡΠΏΡΠ°Π²Π»ΡΡΡ ΡΠ΅ΠΌ, ΡΡΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΡΡΡΠΎΠΈΡΡ Gradle, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅
ΠΏΠ°ΠΊΠ΅Ρ Π² ΡΠ²ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π½Π°ΡΡΡΠΎΠΉΡΠ΅ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΡΠ»Π°Π³
abiFilters
Π² defaultConfig.externalNativeBuild.cmake
Π±Π»ΠΎΠΊ (ΠΈΠ»ΠΈ defaultConfig.externalNativeBuild.ndkBuild 9Π±Π»ΠΎΠΊ 0004). ΠΡΠ΅ΠΉΠ΄Π»
ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΡΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ABI, Π½ΠΎ ΡΠΏΠ°ΠΊΠΎΠ²ΡΠ²Π°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ ΡΠΊΠ°Π·Π°Π»ΠΈ Π²
Π±Π»ΠΎΠΊ defaultConfig.ndk
.
Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Android App Bundle, ΡΡΠΎΠ±Ρ Π΅ΡΠ΅ Π±ΠΎΠ»ΡΡΠ΅ ΡΠΎΠΊΡΠ°ΡΠΈΡΡ ΡΠ°Π·ΠΌΠ΅Ρ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ABI ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΎ Π²ΠΌΠ΅ΡΡΠ΅ Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΎΠΉ.
ΠΠ»Ρ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΡ
ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ APK (ΡΠΎΠ·Π΄Π°Π½Π½ΡΡ
Π΄ΠΎ Π°Π²Π³ΡΡΡΠ° 2021 Π³.) ΡΠ°ΡΡΠΌΠΎΡΡΠΈΡΠ΅
Π½Π°ΡΡΡΠΎΠΉΠΊΠ°
Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ APK Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ABI β Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ APK ΡΠΎ Π²ΡΠ΅ΠΌΠΈ
Π²Π΅ΡΡΠΈΠΈ Π²Π°ΡΠΈΡ
Π½Π°ΡΠΈΠ²Π½ΡΡ
Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ, Gradle ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ APK Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ABI
Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ, ΠΈ ΡΠΏΠ°ΠΊΠΎΠ²ΡΠ²Π°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ ΡΠ°ΠΉΠ»Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½ΡΠΆΠ½Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ABI.