This gist shows how to create a GIF screencast using only free OS X tools: QuickTime, ffmpeg, and gifsicle.
To capture the video (filesize: 19MB), using the free "QuickTime Player" application:
| /* | |
| * Copyright 2013 Google Inc. | |
| * | |
| * Licensed under the Apache License, Version 2.0 (the "License"); | |
| * you may not use this file except in compliance with the License. | |
| * You may obtain a copy of the License at | |
| * | |
| * http://www.apache.org/licenses/LICENSE-2.0 | |
| * | |
| * Unless required by applicable law or agreed to in writing, software |
| --- | |
| language: objective-c | |
| before_script: | |
| - ./scripts/travis/add-key.sh | |
| after_script: | |
| - ./scripts/travis/remove-key.sh | |
| after_success: | |
| - ./scripts/travis/testflight.sh | |
| env: | |
| global: |
| android { | |
| signingConfigs { | |
| release | |
| } | |
| buildTypes { | |
| release { | |
| signingConfig signingConfigs.release | |
| } |
| // Android app | |
| private void setupParse(Context context) { | |
| Parse.initialize(this, <PARSE_APP_ID>, <PARSE_CLIENT_KEY>); | |
| ParseInstallation.getCurrentInstallation().put("uniqueId", getWifiMacAddress(context)); | |
| ParseInstallation.getCurrentInstallation().saveInBackground(); | |
| } | |
| private String getWifiMacAddress(Context context) { | |
| WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); | |
| if (wifiManager != null && wifiManager.getConnectionInfo() != null) { |
| import android.app.Activity; | |
| import android.app.Application; | |
| import android.content.Context; | |
| import android.content.ContextWrapper; | |
| import android.os.Bundle; | |
| import android.os.Looper; | |
| import android.os.MessageQueue; | |
| import android.util.Log; | |
| import android.view.View; | |
| import android.view.ViewTreeObserver; |
| import android.content.Context; | |
| import android.os.Debug; | |
| import java.io.File; | |
| public class OomExceptionHandler implements Thread.UncaughtExceptionHandler { | |
| private static final String FILENAME = "out-of-memory.hprof"; | |
| public static void install(Context context) { | |
| Thread.UncaughtExceptionHandler defaultHandler = Thread.getDefaultUncaughtExceptionHandler(); |
| #!/bin/sh | |
| # Just copy and paste the lines below (all at once, it won't work line by line!) | |
| # MAKE SURE YOU ARE HAPPY WITH WHAT IT DOES FIRST! THERE IS NO WARRANTY! | |
| function abort { | |
| echo "$1" | |
| exit 1 | |
| } | |
| set -e |
| import java.util.ArrayList; | |
| import java.util.Collections; | |
| import java.util.HashMap; | |
| import android.view.View; | |
| import android.view.ViewGroup; | |
| import android.widget.BaseAdapter; | |
| public abstract class HashMapAdapter<K, V> extends BaseAdapter{ |
| function dex-method-count() { | |
| cat $1 | head -c 92 | tail -c 4 | hexdump -e '1/4 "%d\n"' | |
| } | |
| function dex-method-count-by-package() { | |
| dir=$(mktemp -d -t dex) | |
| baksmali $1 -o $dir | |
| for pkg in `find $dir/* -type d`; do | |
| smali $pkg -o $pkg/classes.dex | |
| count=$(dex-method-count $pkg/classes.dex) | |
| name=$(echo ${pkg:(${#dir} + 1)} | tr '/' '.') |