Android рдХреЗ рд▓рд┐рдП рдкреЛрд░реНрдЯрд┐рдВрдЧ
рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ, рдореИрдВрдиреЗ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЛрд░реНрдЯ рдмрдирд╛рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдХреА рдШреЛрд╖рдгрд╛ рдХреАред рдпрд╣рд╛рдВ рдореИрдВ рдЙрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ рдЬреЛ рдореИрдВрдиреЗ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗред рдореИрдВ рддреБрд░рдВрдд рдПрдХ рдЖрд░рдХреНрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдлрд┐рд▓рд╣рд╛рд▓ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд╕рд╛рде рдЕрдиреБрднрд╡ рдареАрдХ 2 рдорд╣реАрдиреЗ рд╣реИ рдФрд░ рд╢рд╛рдпрдж рдХреБрдЫ рд╕рдорд╛рдзрд╛рди рдЦрддрд░рдирд╛рдХ рд╣реИрдВ рдпрд╛ рдЗрд╕ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рднреА рд╕реНрд╡реАрдХрд╛рд░реНрдп рдирд╣реАрдВ рд╣реИрдВред
рд╕реНрд▓рд╛рдЗрдбрд░
рдЗрдВрдЬрди (рд╢реМрдХ) 10 рд╕рд╛рд▓ рд╕реЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рд╣реИред
рдЗрдВрдЬрди рдкреВрд░реА рддрд░рд╣ рд╕реЗ C / C ++ рдореЗрдВ рд▓рд┐рдЦрд╛ рд╣реИ, Android рдкрд░ рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдпрд╣ iOS рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рдХреЛ рд╕рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИред
рддрд░реНрдХ, рдкреНрд░рддрд┐рдкрд╛рджрди, рдзреНрд╡рдирд┐ - рд╕рднреА C / C ++ рдореЗрдВред
рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо
рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬрд┐рд╕рдиреЗ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЛ рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХреЛ рдмрд╣реБрдд рд╕рд░рд▓ рдмрдирд╛ рджрд┐рдпрд╛ рд╣реИ, рдЗрдВрдЬрди рдХреА рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рд╣реИред
рдЫрджреНрдо рдХреЛрдб:
class IStream { void setName(string name ) = 0; open() = 0; write() = 0; тАж = 0; } class FileStream : public IStream { fopen,fread... POSIX API. } class DataPackStream : public IStream { .pak Core::Meta* m_packFileStreamMeta;;
рддреЛ: рдЗрдВрдЬрди рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рд╕рднреА рдХрд╛рдо IStream рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЗрдВрдЬрди рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдХрд╛рд░рдЦрд╛рдиреЗ, рдФрд░ рдЗрд╕рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред
рдХреЛрдб рдЙрджрд╛рд╣рд░рдг:
рдХреЛрд░ :: FileStream :: рдкреНрд░рдХрд╛рд░ () -> setFactoryMeta (DataPack :: DataPackStream :: рдкреНрд░рдХрд╛рд░ ());
FileStream * filestream1 = FileStream :: Create ();
// рдирдИ FileStream () рдХреЗ рд╕рд╛рде рднреА рдРрд╕рд╛ рд╣реА рд╣реЛрдЧрд╛
FileStream * filestream2 = FileStream :: CreateExact ();
filestream1 рдЯрд╛рдЗрдк DataPackStream рдХрд╛ рд╣реЛрдЧрд╛
filestream2 рдЯрд╛рдЗрдк рдлрд╛рдЗрд▓рд╕реНрдЯреНрд░реАрдо рдХрд╛ рд╣реЛрдЧрд╛
рдХреБрдЫ рднреА рдирдпрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдорд╛рдирдХ рд╣реИред
рдЪреВрдБрдХрд┐ рд╕рднреА рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдПрдХ .pak рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, Android рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЬрд╛рд╡рд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП IStream рдХрд╛ рдЕрдкрдирд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓рд┐рдЦрдирд╛ рдерд╛ред
рдЬрд╛рд╡рд╛ рдореЗрдВ рдЗрд╕ рд╕рдВрд╕рд╛рдзрди рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдирд╛
AssetFileDescriptor RawAssetsDescriptor = this.getApplicationContext ()
.getResource ()ред openRawResourceFd (R.raw.data000);
рдЕрдЧрд░ (RawAssetsDescriptor! = null)
{
FileInputStream fis = RawAssetsDescriptor.createInputStream ();
NativeMethods.dataPackChannel = fis.getChannel ();
NativeMethods.dataPackOffset = RawAssetsDescriptor.getStartOffset ();
NativeMethods.dataPackSize = RawAssetsDescriptor.getLength ();
}
рдиреЗрдЯрд┐рд╡ рдХреНрд▓рд╛рд╕ рдЬрд╛рд╡рд╛ рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд╕рднреА рдХреЙрд▓ рдУрдкрди, рд░реАрдб, рдЯреНрд░рд╛рдВрд╕рд▓реЗрдЯ рдХрд░рддрд╛ рд╣реИ
рд╡рд░реНрдЧ AndroidPackStream: рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ IStream
{
// ....
// рдЙрджрд╛рд╣рд░рдг рдкрдврд╝реЗрдВ
size_t рдкрдврд╝рд╛ (рд╢реВрдиреНрдп * рдмрдлрд░, size_t рдЖрдХрд╛рд░, size_t рдЧрд┐рдирддреА)
{
рдЕрдЧрд░ (JavaHelpers :: m_pClass)
{
jmethodID mid = JavaHelpers :: GetEnv () -> GetStaticMethodID (JavaHelpers :: m_pClass, "freadDataPack", "(I) I");
int Res = JavaHelpers :: GetEnv () -> CallStaticIntMethod (JavaHelpers :: m_pClass, mid, (int) size * count);
jfieldID рдлрд╝реАрд▓реНрдб = JavaHelpers :: GetEnv () -> GetStaticFieldID (JavaHelpers :: m_pClass, "byteBuffer", "Ljava / nio / MappedyyteBuffer;");
jobject obj = JavaHelpers :: GetEnv () -> GetStaticObjectField (JavaHelpers :: m_pClass, field);
uint8_t * pData = (uint8_t *) JavaHelpers :: GetEnv () -> GetDirectBufferAddress (obj);
рдореЗрдореНрдкреА (рдмрдлрд░, рдкрдбрд╛рдЯрд╛, рдЖрдХрд╛рд░ * рдЧрд┐рдирддреА);
JavaHelpers :: GetEnv () -> DeleteLocalRef (obj);
рд╡рд╛рдкрд╕реА Res / рдЖрдХрд╛рд░;
}
}
рдЬрд╛рд╡рд╛ рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рдореВрд▓ рдореЗрдВ рд╡рд╛рдкрд╕ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдкрдврд╝рдиреЗ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдереИрддрд┐рдХ int freadDataPack (int count)
{
long curPos = dataPackChannel.position ();
int countReaded = count;
byteBuffer = dataPackChannel.map (MapMode.READ_ONLY, dataPackChannel.position (), count);
byteBuffer.load ();
dataPackChannel.position (curPos + countReaded);
рд╡рд╛рдкрд╕реА рдХреА рдЧрд┐рдирддреА рдХреА;
}
рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ - рдПрдкреАрдХреЗ рдХрд▓реЗрдХреНрдЯрд░ рд╕рднреА рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╣рдо рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИред рд╣рдорд╛рд░реА .pak рдлрд╝рд╛рдЗрд▓ рдХреЛ рдПрдкреАрдХреЗ рдХреЗ рдЕрдВрджрд░ рд╕рдВрдкреАрдбрд╝рд┐рдд рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП - рдЖрдкрдХреЛ рдЗрд╕рдХрд╛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдкреИрдХрд░ рдХреЛ рдмрддрд╛рдПрдЧрд╛ рдХрд┐ рдкреИрдХрд┐рдВрдЧ рдХрд░рддреЗ рд╕рдордп рдЗрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрдкреАрдбрд╝рд┐рдд рди рдХрд░реЗрдВ (рд╡рд┐рд╡рд░рдг
ponystyle.com/blog/2010/03/03/26/deal-with-asset -рдХрдВрдкрдиреА-рдЗрди-рдПрдВрдбреНрд░реЙрдЗрдб-рдРрдкреНрд╕ )ред рдореИрдВрдиреЗ рдЪреБрдирд╛ред
рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕рдВрд╕рд╛рдзрди рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рдмрд╣реБрдд рддреЗрдЬ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд┐рдВрдбрд▓ рдлрд╛рдпрд░ рдЖрдИрдкреИрдб 1 рд╕реЗ рддреЗрдЬ рд╣реИ
рдореИрдВ рдЖрдкрдХреЛ рддреБрд░рдВрдд рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдбреЗрдЯрд╛ рдирд╣реАрдВ рд╣реИ рддреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдлрд┐рдВрдЯ рдХреЛ рдХреНрд░реИрдВрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП - рдЖрдк рдбреЗрдЯрд╛ рдХреЛ рдЕрдкрдиреЗ рдЖрдВрддрд░рд┐рдХ рдореАрдбрд┐рдпрд╛ рдореЗрдВ рдЕрдирдЬрд╝рд┐рдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реА рдмрд╛рд░ рдЬрдм рдЖрдк рдЗрд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ) рдФрд░ рдлрд╝реЙрд░реЗрди рдлрд╝реНрд░реЗрдб рдлрд╝рдВрдХреНрд╢рдВрд╕ (рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рдлрд╝рд╛рдЗрд▓рд╕реНрдЯреНрд░реАрдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реАрдзреЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЖрджрд┐ред
рдзреНрд╡рдирд┐
рд╡рд┐рдВрдбреЛрдЬ рдФрд░ iOS рдХреЗ рд▓рд┐рдП, OpenAL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред Android рдХреЗ рд▓рд┐рдП OpenAL рдХреЛ
pielot.org/2010/12/14/openal-on-android рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрднреА рдЕрд░реНрдЬрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╕реБрдзрд╛рд░реЛрдВ рдХреЗ рдмрд╛рдж рд╣реАред
Android рдХреЗ рд▓рд┐рдП рдЕрд╕реЗрдВрдмрд▓реА рдХреЗрд╡рд▓ рдЖрд░реНрдо v7 рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рд┐рдд рдХреА рдЧрдИ рд╣реИ - рдХреНрдпреЛрдВрдХрд┐ рдЖрд░реНрдо рд╡реА 6 рдУрдкрдирдПрдПрд▓ рдХреЗ рд▓рд┐рдП рдкреЛрд░реНрдЯ рдХреА рдЕрд╕реЗрдВрдмрд▓реА рдХрднреА-рдХрднреА рд▓реИрдЧ рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддреА рд╣реИ, рдЖрдИрдУрдПрд╕ рдУрдкрдирдПрдПрд▓ рдореЗрдВ рдорд┐рдХреНрд╕рд░ рддреЗрдЬреА рд╕реЗ рдФрд░ рдмрд┐рдирд╛ рд▓реИрдЧ (рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЖрд░реНрдорд╡реА 6 рдкрд░, рдЖрдИрдкреЙрдб рдЯрдЪ 2 рдЬреА рдкрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП) рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
C / C ++ рд╕реЗ рджреЗрд╢реА рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕рд╣рднрд╛рдЧрд┐рддрд╛
рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рдирд┐рд░реНрднрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдЧреБрдЪреНрдЫрд╛ рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред
рдЫрджреНрдо рдХреЛрдб:
рд╢реНрд░реЗрдгреА IPlatfomCommandFeedback
{
рд╢реВрдиреНрдп onResponse (рд╕реНрдЯреНрд░рд┐рдВрдЧ рдФрд░);
};
рд╡рд░реНрдЧ рдЗрдкреНрд▓реИрдЯрдлрд╝реЛрдордХрдорд╛рдВрдб
{
рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд┐рд╖реНрдкрд╛рджрди (рд╕реНрдЯреНрд░рд┐рдВрдЧ рдФрд░ рдХрдорд╛рдВрдб, IPlatfomCommandFeedback * feebback);
};
рдЙрджреНрджреЗрд╢реНрдп-рд╕реА рдкрд░ рдЖрдИрдУрдПрд╕ рдХрд╛ рдЕрдкрдирд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ рдФрд░ рдЬреЗрдПрдирдЖрдИ-> рдЬрд╛рд╡рд╛ рдкрд░ рдПрдВрдбреНрд░реЙрдЗрдб рдХрд╛ рдЕрдкрдирд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред
рдкреНрд░рддрд┐рдкрд╛рджрди
Android рдХреЗ рдиреНрдпреВрдирддрдо рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП OpenGL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреНрд░рд┐рдп рднрд╛рдЧ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдмрд╛рдж рдореЗрдВ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рдерд╛ред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдФрд░ рдЖрдИрдУрдПрд╕ рдкрд░, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдореЗрдВ рдЬрд╛рдиреЗ рдкрд░ рдЯреЗрдХреНрд╕рдЪрд░ рдирд╣реАрдВ рдЦреЛрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рдпрд╣ рд╣рдореЗрд╢рд╛ рд╣реЛрддрд╛ рд╣реИред рдЗрдВрдЬрди рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдмрдирд╛рд╡рдЯ рдкреНрд░рдмрдВрдзрдХ рдерд╛ (рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП) рдФрд░ рд╕рдВрд╕рд╛рдзрди рдкреБрдирдГ рд▓реЛрдб рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рдерд╛ред
рд╕рднрд╛
рдкрд╣рд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВрдиреЗ рд▓рд┐рдЦрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдореВрд▓ рд░реВрдк рд╕реЗ рдЯреВрд▓рдХрд┐рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдИрдУрдПрд╕ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдерд╛ рдФрд░ рдореИрдВрдиреЗ рдореЗрдХрдлрд╛рдЗрд▓реНрд╕ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдерд╛ред рдпрд╣реАрдВ рд╕реЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдЖрдпрд╛ред рдПрдВрдбреНрд░реЙрдЗрдб рдПрдирдбреАрдХреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рддрд╛рд░ рдЬреЛрдбрд╝реЗ рдЧрдП рдереЗ, рдПрдХреНрд▓рд┐рдкреНрд╕ рдмрд┐рд▓реНрдбрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрджрдо рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рд╕рдм рдХреБрдЫ рдмрдВрдж рд╣реЛ рдЧрдпрд╛ред рд╣рд╛рдБ, рдЖрдк Android NDK рдирдореВрдиреЛрдВ рд╕реЗ рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдЙрди рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдХрд┐ рдЬреАрд╕реАрд╕реА рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
OpenFenit AdMob
рджреЛрдиреЛрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдПрдХреАрдХрд░рдг рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛ рдЪрд▓рд╛ рдЧрдпрд╛ - рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░
ProGuard
рдпрд╣рд╛рдБ рд╕рдм рдХреБрдЫ рдХрдореЛрдмреЗрд╢ рд╕реНрдкрд╖реНрдЯ рд╣реИ - рдЖрдкрдХреЛ рдмрд╕ рдЗрд╕ рдмрд╛рдд рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ JNI рдореВрд▓ рдирд┐рд╡рд╛рд╕реА рд╡реНрдпрдХреНрддрд┐ obuscheyatsya рдирд╣реАрдВ рд╣реИрдВ
рд╡рд┐рдХрд╛рд╕ рдХреЗ рдЙрдкрдХрд░рдг
рд▓реЛрд╣рд╛: рдЬрд▓рд╛рдиреЗ рдХреА рдЖрдЧ, рдФрд░ рджреЛрд╕реНрддреЛрдВ рдХреА рдЧреЛрд▓рд┐рдпрд╛рдБ рдФрд░ рдореЛрдмрд╛рдЗрд▓ рдлреЛрди (рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП)ред
рд╕реЙрдлреНрдЯрд╡реЗрдпрд░: рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рд╕рд╛рде рдЧреНрд░рд╣рдг
рд╢реЙрдХ рдирдВрдмрд░ рез
Android Market рдПрдХ AppStore рдирд╣реАрдВ рд╣реИред рд╡рд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдЕрд▓рдЧ рд╣реИред рдХреЛрдИ рдирдИ рд╢реНрд░реЗрдгреА рдирд╣реАрдВ рд╣реИред
рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП, рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рдкрд╣рд▓реЗ рджрд┐рди, AppStore рдкрд░ 800+ рдбрд╛рдЙрдирд▓реЛрдб рдереЗ, рджреВрд╕рд░реЗ 2000+ рдкрд░, рдПрдВрдбреНрд░реЙрдЗрдб рдорд╛рд░реНрдХреЗрдЯ рдкрд░, рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдкрд╣рд▓реЗ рд╕реМ рдбрд╛рдЙрдирд▓реЛрдб рдХреЗрд╡рд▓ рддреАрд╕рд░реЗ рджрд┐рди рдкреНрд░рд╛рдкреНрдд рд╣реБрдП рдереЗред рджреЛрдиреЛрдВ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рдЪрд╛рд░ рдЧрддрд┐рд╡рд┐рдзрд┐ рд╕рдорд╛рди рдереА
рд╢реЙрдХ рдирдВрдмрд░ реи
рдпрджрд┐ рдЖрдкрдХрд╛ рдЖрд╡реЗрджрди рдореБрдлрд╝реНрдд рд╣реИ, рддреЛ рдЖрдк рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдПрдкреАрдХреЗ рд╡рд┐рддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреЛрдИ рднреА рдХрд┐рд╕реА рднреА рд╕реНрд░реЛрдд рд╕реЗ рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рджреВрд╕рд░реЗ рдЖрдкрдХреЗ рд▓рд┐рдП рдХрд░реЗрдВрдЧреЗред
рд╢реЙрдХ рдирдВрдмрд░ 3
рдЙрдкрдХрд░рдгреЛрдВ рдХреА рдмреЗрд╕реНрдЯрд░реА рдорд╣рд╛рди рд╣реИред рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛, рдХреНрд░рдорд╢рдГред
рд╡реАрд░рд╛рдВрдЧрдирд╛
рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рдЕрдореЗрдЬрд╝реЕрди рдРрдкрд╕реНрдЯреЛрд░ рдкрд░ рд╕рдореАрдХреНрд╖рд╛ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдПрдХ рд╕рдкреНрддрд╛рд╣ рдХрд╛ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдХреБрдЫ рдФрд░ рджрд┐рдиреЛрдВ рддрдХ рдЬрдм рддрдХ рдХрд┐ рдРрдкреНрдкрд▓ рдХреЛ рдХрд┐рдВрдбрд▓ рдлрд╛рдпрд░ рдкрд░ рдРрдкрд╕реНрдЯреЛрд░ рд╕реВрдЪреА рдореЗрдВ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддрд╛ред рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рд╕реНрдкреАрдХрд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рдПрдВрдбреНрд░реЙрдЗрдб рдорд╛рд░реНрдХреЗрдЯ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ
рд╡рд┐рдЬреНрдЮрд╛рдкрди
рдЧреБрдб рдХреЙрд░рдкреЛрд░реЗрд╢рди рд╕реЗ рдШреГрдгрд╛ рдХреА рдХрд┐рд░рдгреЗрдВ - рдПрдХ рд╣рдлреНрддреЗ рдХреЗ рд▓рд┐рдП, рд╡рд┐рдЬреНрдЮрд╛рдкрди рдмреИрдирд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкрд╕реНрдЯреНрд░реАрдо рдореЗрдВ рднреЗрдЬреА рдЧрдИ рд╣реИрдВред рдлрд┐рд░ рднреА рдЪреБрдкреНрдкреАред
рдкреИрд╕рд╛
рдлрд┐рд▓рд╣рд╛рд▓, рдЖрдИрдУрдПрд╕ рд╕рдВрд╕реНрдХрд░рдг рдЬреЛ рд▓рд╛рддрд╛ рд╣реИ, рдЙрд╕рдореЗрдВ рдзрди рдХреА рд░рд╛рд╢рд┐ (рдореБрдЭреЗ рдЧреЗрдо рдХреЗрд╡рд▓ рд╡рд┐рдЬреНрдЮрд╛рдкрди рдореЗрдВ рдпрд╛рдж рд╣реИ) рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рд╕рдВрд╕реНрдХрд░рдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 40 (рдЪрд╛рд▓реАрд╕) рдЧреБрдирд╛ рдЕрдзрд┐рдХ рд╣реИред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рддреБрд▓рдирд╛ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдкреНрд░рддрд┐ рджрд┐рди рдирд┐рдпрдорд┐рдд рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реНрдерд┐рд░ рд╣реЛрдиреЗ рддрдХ рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рдорд╣реАрдиреЗ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЕрджреНрдпрддрди: рдзреНрд╡рдирд┐ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ, рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рдЖрд░реНрдорд╡реА 7 рдПрдВрдбреНрд░реЙрдЗрдб рдбрд┐рд╡рд╛рдЗрд╕реЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдХрд╛рд░рдг рдмрддрд╛рдпрд╛ред