Android diferenciado método de compilación a la optimización del rendimiento de varios canales

I. Introducción:

Una aplicación reciente de la optimización del rendimiento añade varias marco de las pruebas de rendimiento de terceros:

1, (detección de pérdida de memoria) leakcanary

2, (medios de detección de procesado) blockcanary

Debido a que las compilaciones estudio herramienta androide de desarrollo de proyectos, pero en el momento de la compilación completa se compila junto con manera maquillaje y todo el proyecto, por lo que es necesario poner automáticamente la anterior herramienta de pruebas de rendimiento incorporado en conveniente como compilar el desarrollo de la auto-depuración, pero que la versión compilada no puede tomar en la herramienta superior (consejos y los registros de la experiencia del usuario), sino también para satisfacer todos los desarrolladores utilizan el mismo código independientemente unas de otras bibliotecas, Git utilizan el mismo código se puede utilizar la función anterior.

Por la situación anterior requiere la diferenciación de compilación del código, y es compatible con Android Studio y hacer un guión a modo de compilación.

 

Segundo, el análisis

herramientas blockcanary 1.leakcanary y métodos utilizados en la aplicación sólo hay que hacer para inicializar la clase, no implica el otro código, es necesario diferenciar la aplicación distintiva.

2.Application necesidad de ser declarado en AndroidManifest.xml, por lo que es necesario diferenciar archivo AndroidManifest.xml.

3. Añadir herramienta leakcanary y blockcanary de dos maneras:

paquete de descarga (1) Fuente o frasco

(2) se introduce directamente a través de Gradle

Ambos métodos pueden elegir la segunda, debido principalmente a agregar las herramientas anteriores que necesita para desarrollar su propio uso y para otras personas a utilizar el compilador de distinguir, este resumen utiliza múltiples canales están empaquetados.

compilador 4.Make es el cliente o la prueba no necesita compilar las herramientas anteriores deben distinguir.

 

En tercer lugar, la puesta en práctica

Con base en el análisis anterior, tenemos que hacer los siguientes trabajos:

A. Crear un directorio independiente de las diferencias en el código (este directorio no puede ser de otro modo podría ser traducido a otros directorios contenidos dentro del otro código)

Estoy aquí principalmente a la necesidad de modificar los archivos de la aplicación por encima de tan pocos documentos res, bibliotecas, etc. Si se utiliza el directorio también se pueden añadir

1. Debido a que el proyecto no se ha iniciado la reescritura de la aplicación, por lo que una nueva, si ha reescrito antes de tener que añadir nuevo código basado en el original (asegúrese de que la función original)

import android.app.Application;
import android.content.Context;

import com.github.moduth.blockcanary.BlockCanary;
import com.squareup.leakcanary.LeakCanary;


public class LauncherApplication extends Application {

    private static Context mContext;
    @Override
    public void onCreate() {
        super.onCreate();
        mContext = getApplicationContext();

        //耗时检测初始化
        BlockCanary.install(this, new AppContext()).start();
        //内存泄漏初始化
        if (LeakCanary.isInAnalyzerProcess(this)) {
            // This process is dedicated to LeakCanary for heap analysis.
            // You should not init your app in this process.
            return;
        }
        LeakCanary.install(this);

    }

    public static Context getAppContext(){
        return mContext;
    }
}

 2. El siguiente es el nuevo archivo para configurar los parámetros BlockCanary


import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;

import com.android.launcher3.util.RyLogger;
import com.github.moduth.blockcanary.BlockCanaryContext;

public class AppContext extends BlockCanaryContext {
    private static final String TAG = "AppContext";

    @Override
    public String provideQualifier() {
        String qualifier = "";
        try {
            PackageInfo info = LauncherApplication.getAppContext().getPackageManager()
                    .getPackageInfo(LauncherApplication.getAppContext().getPackageName(), 0);
            qualifier += info.versionCode + "_" + info.versionName + "_YYB";
        } catch (PackageManager.NameNotFoundException e) {
            RyLogger.e(TAG, "provideQualifier exception"+e);
        }
        return qualifier;
    }

    @Override
    public int provideBlockThreshold() {
        //阻塞时间超过多少秒发通知
        return 1000;
    }

    @Override
    public boolean displayNotification() {
        return true;
    }

    @Override
    public boolean stopWhenDebugging() {
        return false;
    }
}

3. Por último archivo AndroidManifest.xml también tiene que mantener el código existente y modificar la aplicación, el archivo principal de la aplicación se sustituye

 <application
        android:name=".LauncherApplication"
        android:backupAgent=".LauncherBackupAgent"
        android:fullBackupContent="@xml/backupscheme"
        android:fullBackupOnly="true"
        android:hardwareAccelerated="true"
        android:icon="@drawable/ic_launcher_home"
        android:label="@string/derived_app_name"
        android:theme="@style/AppTheme"
        android:largeHeap="@bool/config_largeHeap"
        android:networkSecurityConfig="@xml/network_security_config"
        android:restoreAnyVersion="true"
        android:supportsRtl="true">

II. Build.gradle Modificar

1. La diferencia principal es añadir el código del compilador, el nuevo código

 //新增目录需要编译内容,src,res,libs,manifest
        debug {
            java.srcDirs = ['debug_src']
            jniLibs.srcDirs = ['libs']
            res.srcDirs = ['res']
            manifest.srcFile "debug_src/AndroidManifest.xml"
        }
sourceSets {

        main {
            res.srcDirs = ['res']
            java.srcDirs = ['src']
            assets.srcDirs = ['assets']
            jniLibs.srcDirs = ['libs']
            manifest.srcFile 'AndroidManifest-common.xml'
            proto {
                srcDir 'protos/'
                srcDir 'proto_overrides/'
            }
        }

        //新增目录需要编译内容,src,res,libs,manifest
        debug {
            java.srcDirs = ['debug_src']
            jniLibs.srcDirs = ['libs']
            res.srcDirs = ['res']
            manifest.srcFile "debug_src/AndroidManifest.xml"
        }

        androidTest {
            res.srcDirs = ['tests/res']
            java.srcDirs = ['tests/src']
            manifest.srcFile "tests/AndroidManifest-common.xml"
        }

        androidTestDebug {
            manifest.srcFile "tests/AndroidManifest.xml"
        }

        aosp {
            java.srcDirs = ['src_flags', "src_ui_overrides"]
        }


}

2. Agregar introdujo camino

Dos paquete frasco de manera que actualmente se utilizan cuando uno se introduce Implementación

dependencies {
    implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs')

    debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.6.1'
    releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.6.1'
    // Optional, if you use support library fragments:
    debugImplementation 'com.squareup.leakcanary:leakcanary-support-fragment:1.6.1'

}

En tercer lugar, hacer que el archivo de diferencias compilado

1. Si es necesario agregar nuevas herramientas para hacer las siguientes necesidades de trabajo por hacer

include $(CLEAR_VARS)
LOCAL_MODULE :=  blockcanary #别名
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := JAVA_LIBRARIES
LOCAL_SRC_FILES := libs/blockcanary.jar #包名
LOCAL_UNINSTALLABLE_MODULE := true
#LOCAL_SDK_VERSION := current
LOCAL_PRIVATE_PLATFORM_APIS:=true
include $(BUILD_PREBUILT)


include $(CLEAR_VARS)
LOCAL_MODULE := libxypatch3
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES_32 := libs/armeabi/libxypatch.so
LOCAL_SRC_FILES_64 := libs/arm64-v8a/libxypatch.so
LOCAL_MULTILIB := both
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_MODULE_SUFFIX := .so
include $(BUILD_PREBUILT)

LOCAL_STATIC_JAVA_LIBRARIES +=  blockcanary \ libxypatch3 #加入静态库
LOCAL_SRC_FILES := \
    $(call all-java-files-under, src) \
    $(call all-java-files-under, src_ui_overrides) \
    $(call all-java-files-under, src_flags) \
    $(call all-proto-files-under, protos) \
    $(call all-proto-files-under, debug_src/src) #新增


LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/debug_src/res #新增

LOCAL_FULL_LIBS_MANIFEST_FILES := $(LOCAL_PATH)/debug_src/AndroidManifest-common.xml #新增

2. Si es necesario agregar para hacer la compilación

La necesidad de prestar atención al nuevo directorio debug_src antes de compilar el directorio que contiene Si ya ha incluido la necesidad de pasar a un directorio diferente, para evitar ser compilado

 

resumen:

Las diferencias compilador para nota:

1. ¿Es la diferencia de que el directorio no es independiente de la otra compilación incluido

2. El código fuente correspondiente, recursos, libs, AndroidManifest.xml, ya sea para modificar la diferenciación y dispuesto dentro de la build.gradle

3. ¿las nuevas características afectarán a la función original

4. Agregue un poco de diferenciación Escribir un comentario

Publicado 92 artículos originales · ganado elogios 27 · Vistas a 90000 +

Supongo que te gusta

Origin blog.csdn.net/zhuxingchong/article/details/103281509
Recomendado
Clasificación