Задайте легко идентифицируемое имя приложения, которое необходимо мониторить. Имя приложения будет отображаться в списке приложений и в соответствующем отчёте и будет представлять данное приложение.
Имя приложения может содержать буквы, цифры и китайские иероглифы, максимальная длина - 32 символа. При задании имени приложения рекомендуется избегать повторяющихся названий, чтобы не создавать ненужных сложностей.
Имя приложения можно изменить в любое время в настройках
I. Разработчики должны убедиться, что инструмент сборки Ant установлен корректно, помимо IDE ADT.
“ADT” IDE.
II. Если файл build.xml уже существует, пропустите данную настройку.
Введите следующую команду в корневом каталоге проекта приложения, которое необходимо мониторить:
android update project –p .
Командная строка android находится в подкаталоге tools каталога android sdk. Необходимо настроить переменную окружения PATH, чтобы команду android можно было использовать напрямую.
I. Скачайте и распакуйте архив агента nbs-newlens-android.zip.
II. Извлеките файл nbs-newlens-android.jar и скопируйте его в каталог libs проекта, в который внедряется код. Если такого каталога нет, необходимо создать и добавить новый каталог libs..
После сборки добавьте следующие разрешения в файл AndroidMainfest.xml проекта приложения, которое необходимо мониторить:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.READ_LOGS" />
<uses-permission android:name="android.permission.INTERNET" />
I. В стартовой MainActivity проекта, в который выполняется внедрение кода, импортируйте класс NBSAppAgent
import com.networkbench.agent.impl.NBSAppAgent;
II. Инициализируйте агент Altynview SDK в методе onCreate() класса MainActivity (если метода onCreate() нет — создайте его вручную):
NBSAppAgent.setLicenseKey("AppKey").withLocationServiceEnabled(true).
start(this.getApplicationContext());
//Please get the Appkey from Altynview console
III. Инициализация (необязательно) агента Altynview SDK в методе onCreate() класса Application (также создайте onCreate(), если его нет):
Данная настройка требуется только для мониторинга производительности многопроцессных приложений.
NBSAppAgent.setLicenseKey("AppKey").withLocationServiceEnabled(true).
startInApplication(this.getApplicationContext());
//Please get the Appkey from Altynview console
IV. Если сбор данных о геолокации не требуется, используйте следующую настройку:
NBSAppAgent.setLicenseKey("AppKey").start(this.getApplicationContext());
//Please get the Appkey from Altynview console
Не добавляйте временные переменные в системные переменные, чтобы избежать нежелательных проблем.
I. Настройка переменной в Mac, Linux:
export ANT_OPTS=”-javaagent:/path/to/nbs-android-agent/nbs.newlens.class.rewriter.jar”//path/to/nbs-android-agent/is the absolute directory of the current SDK
II. Настройка временной переменной окружения в Windows:
SETANT_OPTS=”-javaagent:C:\path\to\nbs-android-agent\nbs.newlens.class.rewriter.jar”//path/to/nbs-android-agent/ is the absolute directory of the current SDK
ant clean release install
I. Чтобы предотвратить случайное нарушение работы агента Altynview SDK, убедитесь, что следующие строки добавлены в конфигурационный файл обфускации proguard:
# ProGuard configurations for NetworkBench Lens
-keep class com.networkbench.** { *; }
-dontwarn com.networkbench.**
-keepattributes Exceptions, Signature, InnerClasses
# End NetworkBench Lens
II. Если необходимо сохранить дополнительную информацию о номерах строк, добавьте ещё одну строку в файл proguard.cfg:
-keepattributes SourceFile,LineNumberTable
I. Проверка целостности сервера сбора данных
II. После завершения процесса внедрения кода выходные данные, записанные агентом Altynview SDK, можно посмотреть через встроенный инструмент LogCat; эти данные можно использовать для проверки целостности на сервере сбора данных. Тег для фильтрации в LogCat — “NBSAgent”. Стандартный формат логов следующий:
NBSAgent start
NBSAgent enabled
NBSAgent V “Altynview_Version” //Altynview_Version denotes the current SDK
connect success
III. Проверка целостности функциональности данных
После завершения процесса внедрения кода выходные данные, записанные зондом Altynview SDK (SDK Probe), можно посмотреть через встроенный инструмент LogCat; эти данные можно использовать для проверки целостности функциональности данных. Тег для фильтрации в LogCat — “NBSAgent”. Стандартный формат логов следующий:
D/Altynview: Crash switch is true
D/Altynview: webView switch is true
D/Altynview: ANR monitor switch is true
D/Altynview: UserAction Switch is true
D/Altynview: cdnSwitch Switch is true
I. Описание функции
Пользовательский идентификатор — это единственная информация, которая уникально идентифицирует текущего пользователя. UserID можно задавать в любом месте без влияния на функциональность.
II. Связанный API
//UserID can be composed of 64 characters at most, including English letters and Chinese characters, numbers, underscores. However, space and other escape characters are not permitted.
NBSAppAgent.setUserIdentifier("userIdentifier");
III. Пример кода (Code Sample)
public class MainActivity extends Activity {
public void onCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
String userIdentifier =getUserID(); NBSAppAgent.setLicenseKey("AppKey").withLocationServiceEnabled(true).
start(this.getApplicationContext());
NBSAppAgent.setUserIdentifier(userIdentifier);
}
}
I. Описание функции
Breadcrumb помогает разработчикам выявлять возможные причины случайных (нерегулярных) сбоев, что упрощает воспроизведение событий сбоя при совмещении сведений о путях выполнения кода и стек-трейсах.
II. Связанный API
//At most 100 characters are supported, including English letters, Chinese characters, numbers, and underscores.
NBSAppAgent.leaveBreadcrumb("keyPressed”);
NBSAppAgent.leaveBreadcrumb("loginDone");
III. Пример кода
public MyActivity extends Activity {
publicvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); NBSAppAgent.setLicenseKey("AppKey").withLocationServiceEnabled(true).
start(this.getApplicationContext());
NBSAppAgent.leaveBreadcrumb("login MyActivityonCreate");
}
publicvoid onResume() {
super.onResume();
NBSAppAgent.leaveBreadcrumb("login MyActivityonResume");
}
publicvoid logginPressed(View view) {
NBSAppAgent.leaveBreadcrumb("login MyActivitylogginPressed");
new LoginAsyncTask.execute();
}
publicvoid onStop() {
super.onStop();
NBSAppAgent.leaveBreadcrumb("login MyActivityonStop");
}
}
I. Описание функции
Пользовательские события используются для сбора статистики по произвольным событиям в приложениях. Разработчики могут регистрировать пользовательские события в любой момент, при условии, что агент SDK инициализирован. Кроме того, разработчики могут настраивать параметры, связанные с отправкой данных, например при нажатии пользователем кнопок виджетов или при срабатывании других функциональных событий.
II. Связанный API (Associated API)
//EVENT_ID supports 32 characters at maximum, including English letters, Chinese characters, numbers, and underscores; however, space and escape characters are not permitted.
NBSAppAgent.onEvent(String EVENT_ID);
III. Code Sample
@Override
public void onClick(View v) {
…………
NBSAppAgent.onEvent("Add to Cart");
…………
}
Из-за присущей Custom Trace связности (coupling) важно учитывать, что этот API нельзя использовать через границы метода или процесса; к другим ситуациям относятся асинхронная загрузка и рекурсивные вызовы.
I. Описание функции
По умолчанию Altynview SDK собирает данные о производительности системных классов и методов, но не может собирать аналогичные данные по пользовательским классам и методам, написанным разработчиками. Здесь помогает Custom Trace: она позволяет получать сведения о надёжности кода и данных производительности. Например, если разработчика интересует время выполнения инициализации и его влияние на производительность конкретного метода, можно добавить вызовы Custom Trace в начале и в конце этого метода, чтобы достичь этих целей.
II. Связанный API
//To make it easier to distinguish from the rest of the logging output, the name is often set to the identifier of the current method (it can be set to arbitrary string value). The supported character set includes English letters, Chinese characters, numbers, underscores; space and other escape characters are not supported.
NBSAppAgent.beginTracer("String Name");
NBSAppAgent.endTracer("String Name");
III. Пример кода
//Custom Trace can be added at the beginning or end of any method as long as the SDK is initialized.
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
init();
}
private void init() {
//Add beginTracer call at the beginning of a method.
NBSAppAgent.beginTracer(“这是Init方法”);
try {
………
} catch(NameNotFoundException e) {
e.printStackTrace();
}
//Then add endTracer al the end of a method.
NBSAppAgent.endTracer(“这是Init方法”);
}
Для сбора информации из LogCat требуется специальное разрешение READ_LOGS. Добавьте следующую строку в файл AndroidManifest.xml приложения. По умолчанию собирается 50 строк логов; это количество можно увеличить максимум до 100 строк.
< uses-permissionandroid:name="android.permission.READ_LOGS" >
I. Описание функции
Разработчики могут собирать и просматривать системный отладочный вывод через встроенный Android-инструмент логирования LogCat; информацию о приложении можно анализировать по логам при возникновении ошибок. Кроме того, пользовательский лог-вывод может быть загружен через Altynview SDK.
II. Переключатель интерфейса управления
NBSAppAgent.setLicenseKey("AppKey").withLocationServiceEnabled(true).enableLogging(true).
start(this.getApplicationContext());
III. Связанный API (Associated API)
NBSAppAgent.setLogging(int lineNumber);
NBSAppAgent.setLogging(String filter);
NBSAppAgent.setLogging(int lineNumber,String filter);
IV. Пример кода
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Enablelogging
NBSAppAgent.setLicenseKey("AppKey").withLocationServiceEnabled(true).
enableLogging(true).start(this.getApplicationContext());
// Log last 100messages
NBSAppAgent.setLogging(100);
}
I. Описание функции
Разработчики могут использовать этот API в любом месте при условии, что он вызывается после кода инициализации. Можно добавить до 10 сообщений с дополнительной информацией; каждое сообщение допускает загрузку до 100 байт при возникновении сбоя (crash).
II. Связанный API
NBSAppAgent.setUserCrashMessage(String key,Stringvalue);
III. Пример кода
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main); NBSAppAgent.setLicenseKey("AppKey").withLocationServiceEnabled(true).
start(this.getApplicationContext());
//Custom supplementary information can be inserted at any place after the initialization code
NBSAppAgent.setUserCrashMessage(“张三”,“13700001234”);
}
Создайте файлы конфигурации Altynview.properties как в корневом каталоге проекта, так и в каталоге модуля (module level), в который внедряется код.
Altynview SDK предоставляет два способа настройки анти-обфускации.

I. Выберите модуль “Crash” в интерфейсе отчётов и нажмите “dSYM/Mapping File Management” в “Crash History List”.

II. Сначала найдите соответствующую версию, затем загрузите локальный файл mapping.
I. Добавьте следующие строки в файл Altynview.properties:
authKey=Altynview API authentication key, auto-generated on the reporting page
appKey=Altynview AppKey
mapping_file_auto_upload=true
II. Настройка кода аутентификации AuthKey

a. После входа на страницу отчётов выберите “Authentication Code”.

b. Скопируйте текущий код аутентификации и вставьте его в файл Altynview.properties.
III. Настройка AppKey

Это тот же AppKey, что и в файле Altynview.properties; получите его после нажатия “Change Settings”.
IV. Настройка переключателя
mapping_file_auto_upload=true
V. Включение обфускатора
Переключатель mapping_file_auto_upload будет работать корректно только при включённом обфускаторе. После включения переключателя Altynview SDK автоматически загрузит локальный файл mapping на облачный сервер Altynview. Эта настройка не будет работать, если обфускатор не включён.
По умолчанию Altynview SDK внедряет код в библиотеку OkHttp серии 2.0. Выберите соответствующую версию для настройки; конфигурации, затрагивающие более одной версии, не допускаются.
I. Если используется OkHttp серии 2.0 — пропустите этот шаг.
II. Если используется OkHttp серии 3.0, добавьте следующую строку в Altynview.properties:
okhttp3.0=true
III. Если используется OkHttp серии 1.0, добавьте следующую строку в конфигурационный файл “Altynview.properties”:
okhttp2.0=false
Данные производительности по WebView (H5) собираются через callbacks в JavaScript; включите переключатель JavaScript callback:
WebView.setWebContentsDebuggingEnabled(**true**);
Разрешение JavaScript callbacks может нарушать безопасность системы на Android 4.0; если безопасность является приоритетом, рекомендуется включать эту опцию (или не использовать её) только на Android версии 5.0 или выше.
I. Добавьте следующую строку в Altynview.properties:
webview=true
II. Сбор данных WebView требует дополнительного вызова setWebViewClient. Если приложение не вызывает этот метод, добавьте:
webview.setWebViewClient(new WebViewClient(){});
HttpURLConnection
AndroidHttpClient 4.0
Apache HttpClient ( > 4.0)
Volley+OkHttpClient
OkHttp 2.0 ( > 2.1)
OkHttp 1.0
Retrofit (> 1.9)
WebView(Native)
Android2.0 ~ Android7.0
Android SDK Agent может собирать следующие метрики использования путём внедрения блоков кода в определённые методы; данные на уровне методов, а также записи вызовов можно запрашивать напрямую с серверов отчётности
Application Response Time (время отклика приложения)
DNS Resolution Time (время разрешения DNS)
TCP Connection Establishment Time (время установления TCP-соединения)
SSL Hand-Shake Time (время SSL-рукопожатия)
Initial Packet Arrival Time (время получения первого пакета)
Page Views (просмотры страниц)
Кроме того, Android SDK Agent может использоваться для сбора дополнительных данных по пулам потоков, базам данных, пользовательским параметрам и полям HTTP Request/Response.