Задайте легко идентифицируемое имя приложения, которое необходимо мониторить. Имя приложения будет отображаться в списке приложений и в соответствующем отчёте и будет представлять данное приложение.
Имя приложения может содержать буквы, цифры и китайские иероглифы, максимальная длина - 32 символа. При задании имени приложения рекомендуется избегать повторяющихся названий, чтобы не создавать ненужных сложностей.
Имя прило
Разработчики должны убедиться, что инструмент сборки “Gradle” установлен корректно, помимо IDE “IntelliJ IDEA”.
I. Загрузите и распакуйте архив агента nbs-newlens-android.zip.
II. Скопируйте распакованный файл “nbs-newlens-agent.jar” в подкаталог “libs” проекта, в который вы хотите внедрить код агента Altynview SDK. Если этот подкаталог отсутствует, необходимо сначала вручную создать “libs”, прежде чем копировать в него библиотеку “jar”.
I. Нажмите IntelliJ IDEA -> Preferences…

II. Измените параметр “Additional VM” на:
-javaagent:/path/nbs.newlens.class.rewriter.jar (the absolute directory path of the file just mentioned)

После завершения процесса сборки добавьте следующие разрешения в файл “AndroidMainfest.xml”, относящийся к приложению, которое необходимо мониторить.
<uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permissionandroid:name="android.permission.READ_PHONE_STATE"/>
<uses-permissionandroid:name="android.permission.READ_LOGS" />
<uses-permissionandroid:name="android.permission.INTERNET" />
I. В стартовой “MainActivity” проекта, в который будет внедрён код, импортируйте класс NBSAppAgent:
import com.networkbench.agent.impl.NBSAppAgent;
II. Инициализируйте агент Altynview SDK в методе onCreate() класса “MainActivity” (если onCreate() не найден, вручную создайте метод onCreate()):
NBSAppAgent.setLicenseKey("AppKey").withLocationServiceEnabled(true).
start(this.getApplicationContext());
//Please get the Appkey from Altynview console
III. Инициализируйте (необязательно) агент Altynview SDK в методе onCreate() класса “Application” (если onCreate() не найден, вручную создайте метод onCreate()):
Эта конфигурация требуется только для мониторинга производительности многопроцессных приложений.
NBSAppAgent.setLicenseKey("AppKey").withLocationServiceEnabled(true).
startInApplication(this.getApplicationContext());
//Please get the Appkey from Altynview console
III. Используйте следующую конфигурацию в случае, если сбор данных о географическом местоположении не требуется:
NBSAppAgent.setLicenseKey("AppKey").start(this.getApplicationContext());
//Please get the Appkey from Altynview console
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 version
connect success
III. Проверка целостности функциональности данных
После завершения процесса внедрения кода итоговый вывод, записанный агентом Altynview SDK, можно просмотреть через встроенный инструмент “LogCat”; эту информацию можно использовать для проверки целостности функциональности данных. Тег, используемый для фильтрации итогового вывода в “LogCat”, — “Altynview”. Стандартный вывод логов должен быть в следующем формате:
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. Пример кода
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
//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. Пример кода
@Override
public void onClick(View v) {
…………
NBSAppAgent.onEvent("Add to Cart");
…………
}
Из-за присущей Custom Trace связности важно отметить, что этот 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”; информацию о приложении можно анализировать по log-выводу при появлении ошибок; кроме того, пользовательский log-вывод можно загружать через Altynview SDK.
II. Переключатель интерфейса управления
NBSAppAgent.setLicenseKey("AppKey").withLocationServiceEnabled(true).
enableLogging(true).start(this.getApplicationContext());
III. Связанный 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”:
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
TCP Connection EstablishmentTime
SSL Hand-Shake Time
Initial Packet Arrival Time
Page Views
Кроме того, Android SDK Agent может использоваться для сбора дополнительных данных по пулам потоков, базам данных, пользовательским параметрам, а также полям HTTP Request/Response.