AdMob SDK рдЕрдкрдиреЗ рдХреЛрдб рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рд░рд┐рд╡рд░реНрд╕ рдпрд╛ рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛

рдпрд╣ рдХрд╣рд╛рдиреА рдЗрд╕ рдЦрдмрд░ рд╕реЗ рд╢реБрд░реВ рд╣реБрдИ рдХрд┐ рдмреЗрдВрдЯрд▓реЗ рд╕реИрд▓реВрди рдЧрд░реНрдорд┐рдпреЛрдВ рдореЗрдВ рдорд┐рдиреНрд╕реНрдХ рдореЗрдВ рдЦреБрд▓рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдХрд┐ рдореЗрд░реЗ рджреВрд╕рд░реЗ рдЧреЗрдо рдореЗрдВ рд╡рд┐рдЬреНрдЮрд╛рдкрди рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛ рдореБрдЭреЗ рд▓рд╛рдЗрди рдХреЗ рдЕрдВрдд рдореЗрдВ рд╣реЛрдиреЗ рдХрд╛ рдЬреЛрдЦрд┐рдо рд╣реИред рдореИрдВрдиреЗ рдПрд╕рдбреАрдХреЗ рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ (рдЗрд╕ рд╕рдордп 6.4.1), рдЗрд╕реЗ рдЧреЗрдо рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд┐рдпрд╛, рдЗрд╕реЗ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдФрд░ рд▓реЙрдЧрдХреЛрдЯ рдореЗрдВ рддреБрд░рдВрдд рд╕рдВрджрд┐рдЧреНрдз рд▓рд╛рдЗрдиреЗрдВ рджреЗрдЦреАрдВ :

05-14 15:06:06.312: D/dalvikvm(1379): DexOpt: --- BEGIN 'ads2133480362.jar' (bootstrap=0) --- 05-14 15:06:06.632: D/dalvikvm(1413): creating instr width table 05-14 15:06:06.671: D/dalvikvm(1413): DexOpt: load 2ms, verify+opt 18ms 05-14 15:06:06.703: D/dalvikvm(1379): DexOpt: --- END 'ads2133480362.jar' (success) --- 05-14 15:06:06.703: D/dalvikvm(1379): DEX prep '/data/data/by.squareroot.kingsquare/cache/ads2133480362.jar': unzip in 0ms, rewrite 391ms 

рдбреЗрдХреНрд╕рдЯреЙрдк , DEX рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЬрд╛рдБрдЪ рдФрд░ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реИ ред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЙрд╕реЗ рдХреНрдпреЛрдВ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЖрд╡реЗрджрди рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдФрд░ рдЕрдЬреАрдм рд╡рд┐рдЬреНрдЮрд╛рдкрдиреЛрдВ 2133480362.jar рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рдеред рдЪреВрдБрдХрд┐ рдЗрд╕ рдлрд╛рдЗрд▓ рд╕реЗ рдореЗрд░рд╛ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рдерд╛, рдФрд░ рдРрд╕рд╛ рдкрд╣рд▓реЗ рдХрднреА рдирд╣реАрдВ рд╣реБрдЖ, рд╕рднреА рд╕рдВрджреЗрд╣ AdMob рдкрд░ рдкрдбрд╝реЗред рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░, AdMob SDK рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдХреИрд╢ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдХреБрдЫ рдЬрд╛рд░ рдлрд╝рд╛рдЗрд▓ рд╕рд╣реЗрдЬрддрд╛ рд╣реИ, рд╡рд╣рд╛рдВ рд╕реЗ рдХрдХреНрд╖рд╛рдПрдВ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдмреИрдирд░ рд▓реЛрдб рдХрд░рддреЗ рдФрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╕рдордп рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛рдирд╛ рдмрд╛рдХреА рд╣реИ рдХрд┐ AdMob SDK рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╣рдорд╕реЗ рдХрд┐рддрдиреА рд▓рдЧрди рд╕реЗ рдЫрд┐рдкрддреЗ рд╣реИрдВред

рд░рд┐рд╡рд░реНрд╕реАрдо AdMob рдПрд╕рдбреАрдХреЗ


рдмреЗрд╢рдХ, рдПрд╕рдбреАрдХреЗ рдореЗрдВ рдХрдХреНрд╖рд╛рдПрдВ рдмрд╛рдзрд┐рдд рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдп рдХреЛ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдХреБрдЫ рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдХреМрди рд╕реА рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ.рдЧреЗрдЯ рдХреИрд╢реЗрдбрд┐рд░ () рдкрджреНрдзрддрд┐ рдХрд╛ рдХреЙрд▓ рд╣реИред рд╡реЗ рдХреБрдЫ рд╣реА рдирд┐рдХрд▓реЗ, рдХреЗрд╡рд▓ рджреЛред рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ, рдЗрд╕ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ WebSettings.setAppCachePath () рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдкрд╣рд▓реЗ рд╕реЗ рдЦрд╛рд▓реА рдирд╛рдо ak.class рдХреЗ рд╕рд╛рде рдХреЗрд╡рд▓ рдПрдХ рд╕рдВрджрд┐рдЧреНрдз рд╡рд░реНрдЧ рд╣реЛред
рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВ рдЬрдж рдХреЛ рд╡рд┐рдШрдЯрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдЖрдЗрдП рдЗрд╕ рд╡рд░реНрдЧ рдореЗрдВ рд╡рд┐рдзрд┐ рдХреЗ рдЙрд╕ рднрд╛рдЧ рдХреЛ рджреЗрдЦреЗрдВ рдЬрд╣рд╛рдБ Context.getCacheDir () рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓ рд╣реИ:

 byte[] arrayOfByte1 = an.a(ao.a()); byte[] arrayOfByte2 = an.a(arrayOfByte1, ao.b()); File localFile2 = File.createTempFile("ads", ".jar", paramContext.getCacheDir()); FileOutputStream localFileOutputStream = new FileOutputStream(localFile2); localFileOutputStream.write(arrayOfByte2, 0, arrayOfByte2.length); localFileOutputStream.close(); 

рдпрджрд┐ рдЖрдк рджреБрд╖реНрдЯ рдкреНрд░рд╣рд░реА рджреНрд╡рд╛рд░рд╛ рд▓рдЧрд╛рдП рдЧрдП рд╢рд╛рдк рдХреЛ рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рд╡рд░реНрдЧреЛрдВ рдФрд░ рдЪрд░реЛрдВ рдХреЛ рдЕрдзрд┐рдХ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рд▓реЛрдЧреЛрдВ рдХрд╛ рдирд╛рдо рдмрджрд▓ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдорд┐рд▓рддреЗ рд╣реИрдВ:

 String keyBase64 = Base64Consts.getKeyBase64(); byte[] keyBytes = Decrypter.decodeKey(keyBase64); String classBase64 = Base64Consts.getClassBase64(); byte[] classBytes = Decrypter.decodeClassBytes(keyBytes, classBase64); File classFile = File.createTempFile("ads", ".jar", context.getCacheDir()); FileOutputStream out = new FileOutputStream(classFile); out.write(classBytes, 0, classBytes.length); out.close(); 

рдЕрдм рдЖрдк рдЙрд╕ рдХреНрд░рдо рдореЗрдВ рдкрд╛рд░реНрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдЬрд╛рд░ рдлрд╝рд╛рдЗрд▓ рдЖрддреА рд╣реИред Base64Consts рд╡рд░реНрдЧ (рдкреВрд░реНрд╡ рдореЗрдВ Ao ) рдореЗрдВ Base64- рдПрдиреНрдХреЛрдбреЗрдб рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рд╣реИрдВ:

 public class Base64Consts { public static String getKeyBase64() { return "ARuhFl7nBw/97YxsDjOCIqF0d9D2SpkzcWN42U/KR6Q="; } public static String getClassBase64() { return "SuhNEgGjhJl/XS1FVuhqPkUehkYsZY0198PVH9C0C..."; //    ,      } } 

KeyBase64 рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ Decrypter.decodeKey () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдХреБрдВрдЬреА рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

 public static byte[] decodeKey(String keyBase64) { byte[] keyBytes = Base64Util.decode(keyBase64); ByteBuffer byteBuffer = ByteBuffer.wrap(keyBytes, 4, 16); byte[] key128 = new byte[16]; byteBuffer.get(key128); for (int i = 0; i < key128.length; i++) { key128[i] = ((byte)(key128[i] ^ 0x44)); } return key128; } 

рд╡рд┐рдзрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рдмрджрд▓ рджреЗрддреА рд╣реИ (AdMob SDK рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдХрдХреНрд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ android.util.Base64 рдХреЗрд╡рд▓ рдПрдкреАрдЖрдИ рд╕реНрддрд░ 8 рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ рд╣реИ) рдФрд░ 16 рдмрд╛рдЗрдЯреНрд╕ рдХрд╛ рдПрдХ рдмреНрд▓реЙрдХ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк 32 рдмрд╛рдЗрдЯреНрд╕ 5 рд╡реАрдВ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИрдВред ред рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдЗрдЯ xor рдореИрдЬрд┐рдХ рдирдВрдмрд░ 0x44 рд╣реИред рдЗрди рдЬреЛрдбрд╝рддреЛрдбрд╝реЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, 128-рдмрд┐рдЯ рдПрдИрдПрд╕ рдХреБрдВрдЬреА рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рддреА рд╣реИред

ClassBase64 рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдмрд╛рдЗрдЯ рд╕рд░рдгреА рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ Decrypter.decodeClassBytes () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

 public static byte[] decodeClassBytes(byte[] keyBytes, String cryptedBytesBase64) { byte[] cryptedBytes = Base64Util.decode(cryptedBytesBase64); ByteBuffer buffer = ByteBuffer.allocate(cryptedBytes.length); buffer.put(cryptedBytes); buffer.flip(); byte[] initializationVector = new byte[16]; byte[] input = new byte[cryptedBytes.length - 16]; buffer.get(initializationVector); buffer.get(input); SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES"); Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); cipher.init(Cipher.DECRYPT_MODE, keySpec, new IvParameterSpec(initializationVector)); return cipher.doFinal(input); } 

рд╡рд┐рдзрд┐ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдмрд╛рдЗрдЯреНрд╕ рдХреА рдПрдХ рд╕рд░рдгреА рдореЗрдВ рдбрд┐рдХреЛрдб рдХрд░рддреА рд╣реИ, рдЗрд╕ рд╕рд░рдгреА рдореЗрдВ рдкрд╣рд▓реЗ 16 рдмрд╛рдЗрдЯреНрд╕ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рд╡реЗрдХреНрдЯрд░ рд╣реИрдВ, рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдбреЗрдЯрд╛ рд╣реИред рдЖрдЙрдЯрдкреБрдЯ рдмрд╛рдЗрдЯреНрд╕ рдХреА рдПрдХ рд╕рд░рдгреА рд╣реИ, рдЬрд┐рд╕реЗ рдЬрд╛рд░ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдХрдХреНрд╖рд╛рдПрдВ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рд▓реЛрдб рдХреА рдЬрд╛рддреА рд╣реИрдВред рдЕрдВрдд рдореЗрдВ, рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЕрдВрджрд░ рдХреНрдпрд╛ рд╣реИред

рд░рд╣рд╕реНрдпрдордп рд╡рд┐рдЬреНрдЮрд╛рдкрди

AdMob SDK рдЗрд╕ рдЬрд╛рд░ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдХрдХреНрд╖рд╛рдПрдВ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП DexClassLoader рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

 DexClassLoader classLoader = new DexClassLoader(classFile, context.getCacheDir()), null, context.getClassLoader()); Class clazz = classLoader.loadClass(b(keyBytes, Base64Consts.getClassNameBase64())); Method m = clazz.getMethod(b(keyBytes, Base64Consts.getMethodNameBase64()), new Class[0]); 

рдЙрд╕рдХреЗ рдмрд╛рдж, рдЬрд╛рд░ рдлрд╝рд╛рдЗрд▓ рд╣рдЯрд╛ рджреА рдЬрд╛рддреА рд╣реИред рдХрдХреНрд╖рд╛рдУрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдирд╛рдо рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ рдЬрд╛рд░ рдлрд╝рд╛рдЗрд▓ рдЦреБрдж (рдмреЗрд╕ 64 + рдПрдИрдПрд╕), рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЬрд╛рд░ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрджрд░ рддреБрд░рдВрдд рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рддреЗрдЬрд╝ рдФрд░ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред

рдпрд╣ рдЙрдореНрдореАрдж рдХреА рдЬрд╛ рд░рд╣реА рдереА рдХрд┐ classes.dex рдлрд╝рд╛рдЗрд▓ рдЕрдВрджрд░ рдХреА рдУрд░ рдирд┐рдХрд▓реА рд╣реБрдИ рд╣реИред рдЗрд╕реЗ dex2jar рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдЗрд╕ рдмрд╛рд░ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ рдЬрд╛рд░-рдлрд╝рд╛рдЗрд▓ рдорд┐рд▓реАред

рдзрдиреНрдпрд╡рд╛рдж рдорд╛рд░рд┐рдпреЛ! рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реА рд░рд╛рдЬрдХреБрдорд╛рд░реА рджреВрд╕рд░реЗ рдорд╣рд▓ рдореЗрдВ рд╣реИ!

рдпрд╣рд╛рдВ рдирд┐рд░рд╛рд╢рд╛ рдиреЗ рдореЗрд░рд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд┐рдпрд╛ред рдЕрдВрджрд░ рдкрд╛рдБрдЪ рдореЛрдЯреЗ рд╡рд░реНрдЧ рдереЗ рдЬреЛ рдХрд┐рд╕реА рднреА рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬрд╝ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдирд╣реАрдВ рдХрд░рддреЗ рдереЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣ рдПрдХ рд╡рд░реНрдЧ:

 public class a { public static Long a() { return Long.valueOf(Calendar.getInstance().getTime().getTime() / 1000L); } } 

рдФрд░ рдЗрд╕ рддрд░рд╣:

 public class d { public static String a() { new Build.VERSION(); return Build.VERSION.RELEASE; } } 

рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдорд╛рди Settings.Secure.ANDROID_ID рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ md5 рд╣реИрд╢ рдорд╛рдирддрд╛ рд╣реИред рдПрдХ рдФрд░ рдкреВрд░реА apk рдлрд╝рд╛рдЗрд▓ рдХреЗ SHA-2 рд╣реИрд╢ рдХреЛ рдорд╛рдирддрд╛ рд╣реИред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдЗрди рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд░реНрд╡рд░ рдХреЛ рднреЗрдЬреЗ рдЧрдП рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХреЛрдИ рдЧреБрдкреНрдд рдПрд▓реНрдЧреЛрд░рд┐рджрдо, рдХреЛрдИ рдЫрд┐рдкрд╛ рд╣реБрдЖ рд╕рдВрджреЗрд╢, рдХреБрдЫ рднреА рдирд╣реАрдВред рдРрд╕рд╛ рддреБрдЪреНрдЫ рдХреЛрдб рдХреНрдпреЛрдВ рдЫрд┐рдкрд╛рдпрд╛ рдЬрд╛рдП, рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рд░рд╣рд╕реНрдп рд╣реИред

рдПрдХ рд╕реБрдИ рдореЗрдВ рдПрдХ рдЕрдВрдбрд╛, рдПрдХ рдмрддрдЦ рдореЗрдВ рдПрдХ рдЕрдВрдбрд╛ ...


рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЕрдВрджрд░ рдХреБрдЫ рднреА рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рдерд╛, AdMob рдЕрдкрдиреЗ рдХреЛрдб рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рддрд░реАрдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддрд╛ рд╣реИред рдХреЛрдб рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдПрдХ рдЬрд╛рд░ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд╛рд░ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдбреЗрдХреНрд╕ рдлреЙрд░реНрдореЗрдЯ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдбреЗрдХреНрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЬрд╛рд░ рдореЗрдВ рдкреИрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд╛рд░ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдПрдИрдПрд╕ рджреНрд╡рд╛рд░рд╛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЕрдВрдд рдореЗрдВ рдмреЗрд╕ 64 рдПрдирдХреЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛, рдЦрд╛рд╕рдХрд░ рдпрджрд┐ рдЖрдкрдХреЛ рд╕рд░реНрд╡рд░ рд╕реЗ рдХреБрдВрдЬреА рдорд┐рд▓рддреА рд╣реИред

рдпрджреНрдпрдкрд┐ рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдореБрд╢реНрдХрд┐рд▓ рддрд░реАрдХреЗ Google Play рдбреЗрд╡рд▓рдкрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдиреАрддрд┐рдпреЛрдВ рд╕реЗ рдЦрддрд░рдирд╛рдХ рдЙрддреНрдкрд╛рджреЛрдВ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рддрд╣рдд рдЖрддреЗ рд╣реИрдВ:
Google Play рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рдПрдХ рдРрдк Google Play рдХреЗ рдЕрдкрдбреЗрдЯ рддрдВрддреНрд░ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдПрдкреАрдХреЗ рдмрд╛рдЗрдирд░реА рдХреЛрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд, рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдпрд╛ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдХреЛрдб рдмрджрд▓рддрд╛ рд╣реИ - рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣рд╡рд╛ рд╕реЗ рдмрдирддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдХрдХреНрд╖рд╛рдПрдВ рднрд░реА рд╣реБрдИ рд╣реИрдВред рд▓реЗрдХрд┐рди AdMob рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдРрд╕рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

Source: https://habr.com/ru/post/In179723/


All Articles