#mbltdev: Разработка первоклассных sdk для android (twitter)
DESCRIPTION
#MBLTdev: Конференция мобильных разработчиков Спикер: Ty Smith Старший инженер-программист, Twitter http://mbltdev.ru/TRANSCRIPT
![Page 1: #MBLTdev: Разработка первоклассных SDK для Android (Twitter)](https://reader034.vdocuments.net/reader034/viewer/2022042518/558d1a16d8b42af6058b45bb/html5/thumbnails/1.jpg)
October 28, 2014 @tsmith
Building the Fabric SDKsTy Smith
![Page 2: #MBLTdev: Разработка первоклассных SDK для Android (Twitter)](https://reader034.vdocuments.net/reader034/viewer/2022042518/558d1a16d8b42af6058b45bb/html5/thumbnails/2.jpg)
Ty SmithSr. Android Engineer, Fabric
@tsmith
![Page 3: #MBLTdev: Разработка первоклассных SDK для Android (Twitter)](https://reader034.vdocuments.net/reader034/viewer/2022042518/558d1a16d8b42af6058b45bb/html5/thumbnails/3.jpg)
.io
![Page 4: #MBLTdev: Разработка первоклассных SDK для Android (Twitter)](https://reader034.vdocuments.net/reader034/viewer/2022042518/558d1a16d8b42af6058b45bb/html5/thumbnails/4.jpg)
![Page 5: #MBLTdev: Разработка первоклассных SDK для Android (Twitter)](https://reader034.vdocuments.net/reader034/viewer/2022042518/558d1a16d8b42af6058b45bb/html5/thumbnails/5.jpg)
![Page 6: #MBLTdev: Разработка первоклассных SDK для Android (Twitter)](https://reader034.vdocuments.net/reader034/viewer/2022042518/558d1a16d8b42af6058b45bb/html5/thumbnails/6.jpg)
![Page 7: #MBLTdev: Разработка первоклассных SDK для Android (Twitter)](https://reader034.vdocuments.net/reader034/viewer/2022042518/558d1a16d8b42af6058b45bb/html5/thumbnails/7.jpg)
![Page 8: #MBLTdev: Разработка первоклассных SDK для Android (Twitter)](https://reader034.vdocuments.net/reader034/viewer/2022042518/558d1a16d8b42af6058b45bb/html5/thumbnails/8.jpg)
Fabric Sample AppCannonball
Open source for iOS & Android:github.com/twitterdev
![Page 9: #MBLTdev: Разработка первоклассных SDK для Android (Twitter)](https://reader034.vdocuments.net/reader034/viewer/2022042518/558d1a16d8b42af6058b45bb/html5/thumbnails/9.jpg)
Powerful
Lightweight
![Page 10: #MBLTdev: Разработка первоклассных SDK для Android (Twitter)](https://reader034.vdocuments.net/reader034/viewer/2022042518/558d1a16d8b42af6058b45bb/html5/thumbnails/10.jpg)
Powerful
![Page 11: #MBLTdev: Разработка первоклассных SDK для Android (Twitter)](https://reader034.vdocuments.net/reader034/viewer/2022042518/558d1a16d8b42af6058b45bb/html5/thumbnails/11.jpg)
Ease of Integration
![Page 12: #MBLTdev: Разработка первоклассных SDK для Android (Twitter)](https://reader034.vdocuments.net/reader034/viewer/2022042518/558d1a16d8b42af6058b45bb/html5/thumbnails/12.jpg)
Ease of IntegrationFabric.with(this, new Crashlytics());
![Page 13: #MBLTdev: Разработка первоклассных SDK для Android (Twitter)](https://reader034.vdocuments.net/reader034/viewer/2022042518/558d1a16d8b42af6058b45bb/html5/thumbnails/13.jpg)
Extensible
![Page 14: #MBLTdev: Разработка первоклассных SDK для Android (Twitter)](https://reader034.vdocuments.net/reader034/viewer/2022042518/558d1a16d8b42af6058b45bb/html5/thumbnails/14.jpg)
ExtensibleCrashlytics.start(this);
![Page 15: #MBLTdev: Разработка первоклассных SDK для Android (Twitter)](https://reader034.vdocuments.net/reader034/viewer/2022042518/558d1a16d8b42af6058b45bb/html5/thumbnails/15.jpg)
ExtensibleCrashlytics.start(this, 5);
Crashlytics.setListener(createCrashlyticsListener());Crashlytics.setPinningInfo(createPinningInfoProvider())Crashlytics.getInstance().setDebugMode(true);
![Page 16: #MBLTdev: Разработка первоклассных SDK для Android (Twitter)](https://reader034.vdocuments.net/reader034/viewer/2022042518/558d1a16d8b42af6058b45bb/html5/thumbnails/16.jpg)
ExtensibleCrashlytics.setListener(createCrashlyticsListener());Crashlytics.setPinningInfo(createPinningInfoProvider());Crashlytics.getInstance().setDebugMode(true);
Crashlytics.start(this, 5);
![Page 17: #MBLTdev: Разработка первоклассных SDK для Android (Twitter)](https://reader034.vdocuments.net/reader034/viewer/2022042518/558d1a16d8b42af6058b45bb/html5/thumbnails/17.jpg)
ExtensibleCrashlytics.start(this, delay, listener, pinningInfo,
debugMode);
![Page 18: #MBLTdev: Разработка первоклассных SDK для Android (Twitter)](https://reader034.vdocuments.net/reader034/viewer/2022042518/558d1a16d8b42af6058b45bb/html5/thumbnails/18.jpg)
ExtensibleCrashlytics.start(this, 0, null, null, null, true);
![Page 19: #MBLTdev: Разработка первоклассных SDK для Android (Twitter)](https://reader034.vdocuments.net/reader034/viewer/2022042518/558d1a16d8b42af6058b45bb/html5/thumbnails/19.jpg)
Fluent PatternCrashlytics crashlytics = new Crashlytics.Builder() .delay(1) .listener(createCrashlyticsListener()) .pinningInfo(createPinningInfoProvider()) .build(); Fabric.with(this, crashlytics);
![Page 20: #MBLTdev: Разработка первоклассных SDK для Android (Twitter)](https://reader034.vdocuments.net/reader034/viewer/2022042518/558d1a16d8b42af6058b45bb/html5/thumbnails/20.jpg)
Fluent PatternFabric.with(this, new Fabric.Builder(this)
.kits(new Crashlytics())
.debuggable(true)
.logger(new DefaultLogger(Log.VERBOSE))
.looper(getCustomLooper())
.executor(getCustomExecutorService())
.build());
![Page 21: #MBLTdev: Разработка первоклассных SDK для Android (Twitter)](https://reader034.vdocuments.net/reader034/viewer/2022042518/558d1a16d8b42af6058b45bb/html5/thumbnails/21.jpg)
Gracefully Degrade
![Page 22: #MBLTdev: Разработка первоклассных SDK для Android (Twitter)](https://reader034.vdocuments.net/reader034/viewer/2022042518/558d1a16d8b42af6058b45bb/html5/thumbnails/22.jpg)
Gracefully Degradeif (TextUtils.isEmpty(apiKey) if (debuggable){
throw new IllegalArgumentException(“apiKey is null!");
} else {return null;
}}
![Page 23: #MBLTdev: Разработка первоклассных SDK для Android (Twitter)](https://reader034.vdocuments.net/reader034/viewer/2022042518/558d1a16d8b42af6058b45bb/html5/thumbnails/23.jpg)
Minimizing Permissions
![Page 24: #MBLTdev: Разработка первоклассных SDK для Android (Twitter)](https://reader034.vdocuments.net/reader034/viewer/2022042518/558d1a16d8b42af6058b45bb/html5/thumbnails/24.jpg)
Minimizing Permissions
<uses-permission android:name="android.permission.INTERNET"/>
![Page 25: #MBLTdev: Разработка первоклассных SDK для Android (Twitter)](https://reader034.vdocuments.net/reader034/viewer/2022042518/558d1a16d8b42af6058b45bb/html5/thumbnails/25.jpg)
Minimizing PermissionsCrashlytics.setUserEmail(“[email protected]”);
![Page 26: #MBLTdev: Разработка первоклассных SDK для Android (Twitter)](https://reader034.vdocuments.net/reader034/viewer/2022042518/558d1a16d8b42af6058b45bb/html5/thumbnails/26.jpg)
Permissions: Runtime Detectionprotected boolean canCheckNetworkState() {String permission =
“android.permission.ACCESS_NETWORK_STATE”;int result =
context.checkCallingOrSelfPermission(permission);return (result == PackageManager.PERMISSION_GRANTED);
}
![Page 27: #MBLTdev: Разработка первоклассных SDK для Android (Twitter)](https://reader034.vdocuments.net/reader034/viewer/2022042518/558d1a16d8b42af6058b45bb/html5/thumbnails/27.jpg)
Multiple Application Types
![Page 28: #MBLTdev: Разработка первоклассных SDK для Android (Twitter)](https://reader034.vdocuments.net/reader034/viewer/2022042518/558d1a16d8b42af6058b45bb/html5/thumbnails/28.jpg)
Multiple Application Types
package com.example;
import android.app.Service;
public class MyService extends Service { }
![Page 29: #MBLTdev: Разработка первоклассных SDK для Android (Twitter)](https://reader034.vdocuments.net/reader034/viewer/2022042518/558d1a16d8b42af6058b45bb/html5/thumbnails/29.jpg)
UI from Application Contextprivate WeakReference<Activity> currentActivity = new WeakReference<Activity>();
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)private void registerLifecycleCallbacks() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.FROYO) {final Application app = ((Application)context);app.registerActivityLifecycleCallbacks(
new ActivityLifecycleCallbacks() { @Override public void onActivityResumed(Activity activity) {
currentActivity.set(activity); }
});}
}
![Page 30: #MBLTdev: Разработка первоклассных SDK для Android (Twitter)](https://reader034.vdocuments.net/reader034/viewer/2022042518/558d1a16d8b42af6058b45bb/html5/thumbnails/30.jpg)
Powerful SDKs
Ease of Integration
Extensibility
Support all app types
Permission detection
![Page 31: #MBLTdev: Разработка первоклассных SDK для Android (Twitter)](https://reader034.vdocuments.net/reader034/viewer/2022042518/558d1a16d8b42af6058b45bb/html5/thumbnails/31.jpg)
Lightweight
![Page 32: #MBLTdev: Разработка первоклассных SDK для Android (Twitter)](https://reader034.vdocuments.net/reader034/viewer/2022042518/558d1a16d8b42af6058b45bb/html5/thumbnails/32.jpg)
Binary Size
![Page 33: #MBLTdev: Разработка первоклассных SDK для Android (Twitter)](https://reader034.vdocuments.net/reader034/viewer/2022042518/558d1a16d8b42af6058b45bb/html5/thumbnails/33.jpg)
Binary Size
![Page 34: #MBLTdev: Разработка первоклассных SDK для Android (Twitter)](https://reader034.vdocuments.net/reader034/viewer/2022042518/558d1a16d8b42af6058b45bb/html5/thumbnails/34.jpg)
3rd Party Library Mindfulness
![Page 35: #MBLTdev: Разработка первоклассных SDK для Android (Twitter)](https://reader034.vdocuments.net/reader034/viewer/2022042518/558d1a16d8b42af6058b45bb/html5/thumbnails/35.jpg)
3rd Party Library Mindfulness
0
10
20
30
![Page 36: #MBLTdev: Разработка первоклассных SDK для Android (Twitter)](https://reader034.vdocuments.net/reader034/viewer/2022042518/558d1a16d8b42af6058b45bb/html5/thumbnails/36.jpg)
3rd Party Library Mindfulness
PROTOBUF
KB
OURS
KB
![Page 37: #MBLTdev: Разработка первоклассных SDK для Android (Twitter)](https://reader034.vdocuments.net/reader034/viewer/2022042518/558d1a16d8b42af6058b45bb/html5/thumbnails/37.jpg)
Dalvik Method Count
![Page 38: #MBLTdev: Разработка первоклассных SDK для Android (Twitter)](https://reader034.vdocuments.net/reader034/viewer/2022042518/558d1a16d8b42af6058b45bb/html5/thumbnails/38.jpg)
Dalvik Method Count>./gradlew assemble
…Unable to execute dex: method ID not in [0, 0xffff]: 65536Conversion to Dalvik format failed: Unable to execute dex: method ID not in [0, 0xffff]: 65536
![Page 39: #MBLTdev: Разработка первоклассных SDK для Android (Twitter)](https://reader034.vdocuments.net/reader034/viewer/2022042518/558d1a16d8b42af6058b45bb/html5/thumbnails/39.jpg)
Dalvik Method Count> git clone [email protected]:mihaip/dex-method-counts.git> cd dex-method-counts> ant jar> ./dex-method-counts path/to/App.apk
Read in 65490 method IDs.<root>: 65490 : 3 accessibilityservice: 6 bluetooth: 2 content: 248 pm: 22 res: 45 ... com: 53881 adjust: 283 sdk: 283
![Page 40: #MBLTdev: Разработка первоклассных SDK для Android (Twitter)](https://reader034.vdocuments.net/reader034/viewer/2022042518/558d1a16d8b42af6058b45bb/html5/thumbnails/40.jpg)
Minimize Network Usage
![Page 41: #MBLTdev: Разработка первоклассных SDK для Android (Twitter)](https://reader034.vdocuments.net/reader034/viewer/2022042518/558d1a16d8b42af6058b45bb/html5/thumbnails/41.jpg)
Network Usage
10X SMALLER
100X FASTER
XML PROTOBUF
![Page 42: #MBLTdev: Разработка первоклассных SDK для Android (Twitter)](https://reader034.vdocuments.net/reader034/viewer/2022042518/558d1a16d8b42af6058b45bb/html5/thumbnails/42.jpg)
Reduce Startup Time
![Page 43: #MBLTdev: Разработка первоклассных SDK для Android (Twitter)](https://reader034.vdocuments.net/reader034/viewer/2022042518/558d1a16d8b42af6058b45bb/html5/thumbnails/43.jpg)
Startup Time
Thread.start();
Executors.newSingleThreadExecutor();
![Page 44: #MBLTdev: Разработка первоклассных SDK для Android (Twitter)](https://reader034.vdocuments.net/reader034/viewer/2022042518/558d1a16d8b42af6058b45bb/html5/thumbnails/44.jpg)
Startup Timeclass MyThreadFactory implements ThreadFactory {
@Override public Thread newThread(Runnable runnable) { final Thread thread = new Thread(runnable); thread.setPriority(Process.THREAD_PRIORITY_BACKGROUND); return thread; }}
![Page 45: #MBLTdev: Разработка первоклассных SDK для Android (Twitter)](https://reader034.vdocuments.net/reader034/viewer/2022042518/558d1a16d8b42af6058b45bb/html5/thumbnails/45.jpg)
Lightweight SDKsBinary size
3rd party library mindfulness
Dalvik Method Count
Network usage
Startup time
![Page 46: #MBLTdev: Разработка первоклассных SDK для Android (Twitter)](https://reader034.vdocuments.net/reader034/viewer/2022042518/558d1a16d8b42af6058b45bb/html5/thumbnails/46.jpg)
LightweightPowerful
![Page 47: #MBLTdev: Разработка первоклассных SDK для Android (Twitter)](https://reader034.vdocuments.net/reader034/viewer/2022042518/558d1a16d8b42af6058b45bb/html5/thumbnails/47.jpg)
Thank You@tsmith