Trang chủ › Hướng dẫn › Tích hợp Android

Tích hợp thư viện vào ứng dụng Android

Chỉ cần một dependency và một dòng khởi tạo, log của ứng dụng bạn đang phát triển sẽ được gửi về trang công cụ theo thời gian thực. Trang này dành cho lập trình viên Android.

Sơ đồ: ứng dụng của bạn gửi log qua app Listener tới máy chủ Receiver và trình duyệt của lập trình viên
Ứng dụng của bạn không tự kết nối mạng; mọi kết nối do app Listener đảm nhận.

Thư viện hoạt động như thế nào?

HVTD-9803 LogCat gồm ba phần:

Vì thư viện đọc log bằng lệnh logcat --pid của tiến trình hiện tại, mọi log ứng dụng ghi qua android.util.Log hoặc Timber đều được thu, bạn không cần đổi cách ghi log trong code.

Yêu cầu

Hạng mụcYêu cầu
minSdk24 (Android 7.0) trở lên
compileSdkNên dùng bản mới; thư viện 2.1 được build với compileSdk 36
Kho thư việnMaven Central
Phiên bản mới nhất2.1
Thiết bị kiểm thửĐã cài app HVTD-9803 Listener từ Google Play
Quyền InternetKhông cần cho ứng dụng của bạn (Listener lo phần mạng)

Bước 1: Khai báo Maven Central

Hầu hết dự án Android đã có sẵn. Nếu chưa, thêm vào settings.gradle.kts:

dependencyResolutionManagement {
    repositories {
        google()
        mavenCentral()
    }
}

Bước 2: Thêm dependency

Thư viện chỉ nên chạy trong bản debug/QA. Có hai cách, chọn một.

Cách A (khuyến nghị): chỉ đóng gói vào bản debug

Bản release hoàn toàn không chứa thư viện. Trong app/build.gradle.kts:

dependencies {
    debugImplementation("com.aigoox.library:hvtd9803-logcat:2.1")
}

Vì lớp của thư viện không tồn tại trong bản release, phần khởi tạo phải đặt trong source set riêng cho từng build type. Tạo hai tệp cùng tên, cùng package:

app/src/debug/java/com/example/app/LogcatBridge.kt

package com.example.app

import android.app.Application
import com.aigoox.hvtd9803_logcat.HVTD9803Controller

object LogcatBridge {
    fun init(app: Application) {
        HVTD9803Controller(isDebug = true, context = app).initialize()
    }
}

app/src/release/java/com/example/app/LogcatBridge.kt

package com.example.app

import android.app.Application

object LogcatBridge {
    fun init(app: Application) = Unit
}

Nếu dự án có thêm build type khác (ví dụ staging), tạo tệp tương ứng trong src/staging/ và chọn stagingImplementation nếu muốn bật log cho bản đó.

Cách B: đóng gói mọi bản, chỉ kích hoạt ở debug

Đơn giản hơn nhưng mã thư viện vẫn nằm trong APK/AAB release (ở trạng thái không hoạt động):

dependencies {
    implementation("com.aigoox.library:hvtd9803-logcat:2.1")
}

Khi đó luôn truyền isDebug = BuildConfig.DEBUG ở bước khởi tạo. Với Android Gradle Plugin 8 trở lên, nhớ bật lớp BuildConfig:

android {
    buildFeatures {
        buildConfig = true
    }
}

Dự án dùng Groovy thì viết debugImplementation 'com.aigoox.library:hvtd9803-logcat:2.1' và buildFeatures { buildConfig true }.

Bước 3: Khởi tạo trong Application

Gọi khởi tạo trong onCreate() của lớp Application, ngay sau super.onCreate():

class RootApplication : Application() {
    override fun onCreate() {
        super.onCreate()
        LogcatBridge.init(this)            // Cách A
        // Cách B:
        // HVTD9803Controller(isDebug = BuildConfig.DEBUG, context = this).initialize()
    }
}

Nếu dự án chưa có lớp Application, khai báo lớp mới trong AndroidManifest.xml:

<application
    android:name=".RootApplication"
    ... >

Đã có lớp Application thì chỉ thêm dòng khởi tạo vào onCreate() hiện có, không tạo lớp thứ hai.

Bước 4: Build và bàn giao cho QA

  1. Sync Gradle và build biến thể debug.
  2. Trên thiết bị kiểm thử, cài HVTD-9803 Listener từ Google Play trước.
  3. Cài APK debug của ứng dụng bạn.
  4. Gửi QA đường dẫn Hướng dẫn sử dụng để thực hiện các bước xác thực.

Những gì thư viện thêm vào ứng dụng

Khi khởi tạo, thư viện:

Manifest của thư viện được gộp vào ứng dụng với các khai báo:

<uses-permission android:name="com.aigoox.hvtd9803.LOG_SERVICE" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<queries>
    <package android:name="com.aigoox.hvtd9803" />
</queries>

Khối <queries> (có từ bản 2.1) cần để Android 11 trở lên cho phép kết nối tới Listener, vì vậy hãy dùng bản 2.1. Với cách A, các khai báo này chỉ có trong bản debug. Nếu không muốn quyền SYSTEM_ALERT_WINDOW xuất hiện, có thể gỡ bằng manifest merger:

<uses-permission
    android:name="android.permission.SYSTEM_ALERT_WINDOW"
    tools:node="remove" />

Ứng dụng nhiều tiến trình

Thư viện chỉ đọc log của tiến trình nơi nó được khởi tạo. Nếu ứng dụng có service chạy ở tiến trình riêng (android:process), lớp Application sẽ chạy lại trong tiến trình đó; hãy chắc chắn bạn khởi tạo ở đúng tiến trình đang ghi log cần theo dõi.

Kiểm tra nhanh

Xử lý sự cố

Hiện tượngCách xử lý
Build release lỗi “Unresolved reference HVTD9803Controller”Bạn dùng debugImplementation nhưng gọi thư viện trong src/main. Chuyển lời gọi vào src/debug như cách A.
Ứng dụng không xuất hiện trong ListenerKiểm tra đang chạy bản debug, Listener được cài trước, dùng thư viện bản 2.1. Mở ứng dụng rồi quay lại Listener.
Toast “Xác thực thất bại”Mã Authen không khớp phiên hiện tại. Tạo phiên mới trên trang công cụ và xác thực lại.
Log Timber bị lặpBỏ lời gọi Timber.plant(DebugTree()) của ứng dụng trong bản debug, vì thư viện đã plant sẵn.
Thiếu log của một số thành phầnThành phần đó chạy ở tiến trình khác; xem mục ứng dụng nhiều tiến trình.

Lưu ý bảo mật

Chỉ bật thư viện cho bản debug/QA. Không ghi mật khẩu, token hay dữ liệu cá nhân vào log, vì người xem phiên sẽ đọc được toàn bộ nội dung log. Xem thêm Bảo vệ log khi truyền qua mạng và Chính sách bảo mật.

Tiếp theo: luồng sử dụng từng bước cho QA và Dev.