Migrar el proyecto Android.mk al proyecto gradle (apkización)

Antecedentes del proyecto:

Android.mkLos archivos ubicados jni/en subdirectorios del directorio del proyecto describen archivos fuente y bibliotecas compartidas para el sistema de compilación.

Gradle es una herramienta de código abierto para la automatización y construcción de proyectos basada en los conceptos de Apache Ant y Apache Maven.

La depuración de código de proyectos MK generalmente utiliza comandos para compilar, lo que a veces lleva mucho tiempo y no se puede depurar. Al migrar el proyecto Android.mk a un proyecto Gradle, puedes depurarlo en Android Studio, lo que mejora hasta cierto punto la velocidad del código de depuración.

Aclare el contenido de la tarea:

1. Convertir mk a gradle

2. Resuelva errores de compilación:

Error de recursos; no se puede encontrar el archivo Java (identificar dependencias y crear e importar paquetes jar)

mk——gradle

1. Definir los resultados de la compilación.

plugins {
    id 'com.android.application'
}
id 'com.android.application' compila y genera apk
id 'com.android.library' Compilar y generar aar
id 'maven-publish' 生成maven

2. Definir constantes

ext {
    APPS_TOOLS_MODEL = "BASIO"
    URBANO = "URBANO"
    EXPLORER = "EXPLORER"
    MIRAIE = "MIRAIE"
    RAFRE = "RAFRE"
    TORQUE = "TORQUE"
    BASIO = "BASIO"
}

A veces, el almacén de códigos de un módulo contiene códigos para varios modelos y, aunque la cantidad de código es relativamente grande, es más fácil de mantener. Definir nombres de módulos en mk y gradle puede controlar la selección de código.

3. Configurar la versión del SDK

    compileSdk 31 //SDK编译版本

    defaultConfig {
        applicationId "xxx.xxx.xxxx"
        minSdkVersion 31 //最小SDK版本
        targetSdkVersion 31  //系统兼容
        versionCode 1
        versionName "0001.0001"
    }

4.Embalaje apk

La apk se puede instalar en el teléfono móvil mediante el paquete.

   signingConfigs {
        debug {
            storeFile file('/home/tsdl/Project/AndroidStudioProject/MkToApk/android_debug_key/platform.keystore')
            storePassword 'android'
            keyAlias 'androiddebugkey'
            keyPassword 'android'
        }
        config {
            storeFile file('../../android_debug_key/platform.keystore')
            storePassword 'android'
            keyAlias 'androiddebugkey'
            keyPassword 'android'
        }
    }

5. Tipo de construcción

buildTypes {
        release {
            minifyEnabled false
            signingConfig signingConfigs.config //指定release时的signingConfigs对应的配置名
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }

        debug {
            minifyEnabled false
            signingConfig signingConfigs.config
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }

        applicationVariants.all {
            variant ->
                variant.outputs.all {
                    output ->
                        if (variant.buildType.name == "release") {
                            outputFileName = "DeskClock-${defaultConfig.versionName}.apk"
                        }
                }
        }

    }

6. Configurar la versión de Java

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

7. Configuración de recursos

sourceSets {
        main{
            java.srcDirs = ["src/main/java"]
            java.srcDirs += ["src/main/java/MODEL"]
            assets.srcDirs = ["src/main/assets"]
            res.srcDirs = ["src/main/res"]
            manifest.srcFile "src/main/AndroidManifest.xml"

            if (APPS_TOOLS_MODEL == EXPLORER) {
//                res.srcDirs += ["src/main/MODEL/EXPLORER/res"]
//                java.srcDirs += ["src/main/java/EXPLORER"]
                manifest.srcFile "src/main/MODEL/AndroidManifest.xml"
            }
            ...
            else if (APPS_TOOLS_MODEL == BASIO){
                res.srcDirs += ["src/main/MODEL/BASIO/res"]
                java.srcDirs += ["src/main/java/BASIO"]
                manifest.srcFile "src/main/MODEL/BASIO/AndroidManifest.xml"
            }else {
//                res.srcDirs += ["src/main/MODEL/BASE/res"]
//                java.srcDirs += ["src/main/java/BASE"]
            }

            aidl.srcDirs = ["src/main/java/com/android/alarmclock/IRegisterReceiverService.aidl",
                            "src/main/java/com/android/deskclock/IAlarmInitShutdownService.aidl"]

        }
    }

Las diferentes versiones de Gradle tienen métodos de escritura ligeramente diferentes. Preste atención a las rutas de los archivos (estructura del proyecto) de java, res, etc.

Dado que hay códigos para varios modelos en mi almacén de códigos, los distinguí en sourceSets. Sin embargo, los recursos no se pueden repetir cuando se compila gradle. Para evitar este tipo de error, primero eliminé los códigos de otros modelos. y luego invertir en él al hacer otros modelos. De hecho, el problema de la duplicación de recursos puede solucionarse.

release.resources.srcDirs=['src/main/xxxxx']

Al establecer la prioridad, elija a qué recurso de resolución llamar

8.configuración de pelusa

    lintOptions {
        // true--错误发生后停止gradle构建
        abortOnError false
    }

9. Importar paquete de recursos

dependencies {
    //noinspection GradleCompatible
    implementation 'com.android.support:support-v13:28.0.0'
    if (APPS_TOOLS_MODEL == EXPLORER ||
            APPS_TOOLS_MODEL == CONCOURSE ||
            APPS_TOOLS_MODEL == URBANO ||
            APPS_TOOLS_MODEL == CEIJI){
        implementation 'designlib_kon:0001.0001'
    }else if (APPS_TOOLS_MODEL == MIRAIE){
        implementation 'designlib_blue35:0001.0001'
    }else if (APPS_TOOLS_MODEL == BASIO){
        implementation 'designlib_biro:0001.0001'
    }
    implementation fileTree(dir: "libs", include: ["*.aar"])
    implementation fileTree(dir: "libs",include: ['*.jar'])
    implementation 'com.android.support:support-v4:28.0.0'
}

En el archivo mk, qué bibliotecas de recursos se introducen a través de LOCAL_STATIC_JAVA_LIBRARIES e incluyen xxx/xxx/xxx.mk, y se introducen en gradle de la manera correspondiente.

Error de compilación: error de recursos

Los errores de recursos duplicados generalmente se informan porque gradle no puede compilar y los nombres de los dos recursos no pueden ser los mismos. Pésalo tú mismo y elimina uno de ellos.

Además, los fabricantes de teléfonos móviles tienen sus propios temas personalizados, si no se importan se informará un error. Sin embargo, el cambio de este tema no afectará la depuración de errores, puedes buscar un tema para reemplazarlo, o si no lo usas, simplemente comentarlo.

Error de compilación: el archivo java no se importó correctamente

Generalmente, este tipo de error de importación de paquetes y algunos métodos no encontrados se deben a que se hace referencia a otros grupos (como: API de framework, etc.)

Generalmente existen varias formas de importar estos recursos:

1. Mire el archivo mk del código dependiente y compile el material generado. Si se genera lib o jar, compílelo directamente, luego coloque el paquete generado en la carpeta libs del proyecto e introduzca este paquete en las dependencias de gradle.

2. Si es un almacén de código el que genera apk, debe convertir mk a gradle de la misma manera, generar el paquete arr y luego importarlo a la carpeta libs del proyecto.

3. Empaquete el proyecto a través de maven (recomendado cuando el anidamiento de dependencias es serio; si el proyecto usa este paquete con frecuencia, no se recomienda maven)

Supongo que te gusta

Origin blog.csdn.net/m0_50408097/article/details/123088576
Recomendado
Clasificación