Red de conocimiento informático - Computadora portátil - Código fuente de 2764

Código fuente de 2764

Compilación en sistemas de 1 y 32 bits

Si necesita compilar el sistema Android en un sistema de 32 bits, debe modificar algunos archivos MAKE antes de la compilación.

Primero modifique build/core/main.mk, el contenido de la modificación es el siguiente:

-ifneq (64, $(findstring 64, $(build_arch)))

ifneq

(i686, $(findstring i686, $(build_arch)))

$(ADVERTENCIA

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ) $(Advertencia de que está intentando compilar en un sistema de 32 bits).

$(Advertencia de que solo se admiten entornos de compilación de 64 bits después de froyo/2.2.)

En segundo lugar, modifique los siguientes cuatro documentos:

External/clearsilver/cgi/Android.mk

External/clearsilver/Java-JNI/Android.MK

External /clearsilver/util/Android .mk

external/clear silver/cs/Android MK #Esto obligará a Java6 a usar la versión de 64 bits

-LOCAL_CFLAGS = -m64<. /p>

-LOCAL_LDFLAGS = -m64

LOCAL_CFLAGS = -m32

LOCAL_LDFLAGS = -m32 Es decir, LOCAL_CFLAGS y LOCAL_LDFLAGS se cambian de -m64 a -m32, especificando así el uso de un sistema de 32 bits para la compilación. Si compilas con un sistema operativo de 64 bits, no necesitas modificarlos, pero recuerda instalarlos: para servidores de 64 bits, es posible que se requieran los siguientes paquetes adicionales:

" sudo apt- get install libc 6-dev-i386 "(libc6-dev-amd64 si CPU AMD)

" sudo apt-get install g -multi lib lib 32 ncurses 5-dev lib 32 z 1-dev "

También hay una versión jdk64bit compilada 2, build/core/base_rules.MK:128:* * FrameWorks/opt/emoticons/JNI:

...libgl2jni ha sido fram works/ base/OpenGL/tests/gl2_JNI/definición de parada JNI.

Desde la perspectiva de las reglas de compilación:

# Asegúrese de que esta combinación IS_HOST/CLASS/MODULE sea única.

ID del módulo: = módulo. $(if\

$(LOCAL_IS_HOST_MODULE), HOST, TARGET). $(LOCAL_MODULE_CLASS).

$(módulo local)

ifdef $(identificador de módulo)

$(Error $(LOCAL_PATH): $(module_id) ya está definido por $($(module_id))

endif

Android.mk definido en fram works/base/OpenGL/tests/gl2 _ JNI/defines:

LOCAL_MODULE:= libgl2jni

Incluyendo $(BUILD_SHARED_LIBRARY)

Es incorrecto copiar la biblioteca dinámica generada. Puede modificar el directorio de prueba sin participar en la compilación. La forma más directa es eliminar el marco works/base/OpenGL/tests. Carpeta /gl2_JNI.

3. Por qué AIDL compila e informa que no se puede encontrar la importación de la clase

"El servicio AIDL solo admite un número limitado de tipos de datos, entonces si Si utiliza el servicio AIDL para transmitir algunos datos complejos, necesita realizar un procesamiento adicional. El servicio AIDL admite los siguientes tipos de datos:

Clases simples de Java (int, char, boolean, etc.). secuencias de cadenas y caracteres.

Sin embargo, tenga en cuenta que los tipos de elementos de los objetos de lista y de mapa deben ser tipos de datos compatibles con la interfaz de generación automática de AIDL. p>Las clases que implementan la interfaz android.os.Parcelable deben importarse.

Los dos últimos tipos de datos deben importarse y los valores de los tipos de datos que no necesitan importarse. También se importan mediante transferencia. Pasar el valor del tipo de datos que debe importarse (por ejemplo, una clase que implementa la interfaz android.os.Parcelable) es un poco más complicado además de crear una clase. implementa la interfaz android.os.parcelable, también necesita crear una clase separada para este archivo Aidl de clase, definido usando la palabra clave Parcelable "

LOCAL_AIDL_INCLUDES = xxx, por lo que mi archivo AIDL empaquetable. no se puede encontrar.

Modifique la compilación en el directorio raíz del código fuente de Android /core/pathmap.mk, agregue su directorio y luego actualice-api. Siempre indique que el método de error @Override no anula el método de su clase principal.

Usar No hay problema al compilar con JDK1.5. informó que el método @Override no cubre el método de su clase principal. De hecho, este método es un método en la interfaz implementada por la clase.

Pero se pueden pasar los siguientes métodos de lenguaje de jdk1.6, lo que significa que jdk1.6 piensa que tanto el método de la clase principal como la llamada al método de la interfaz de implementación se anulan, pero jdk1.5 no.

Yo también lo creo. No sé si esto es un error en jdk1.5, o creo que el método para anular la clase principal es diferente del método para implementar la interfaz. Pero desde

Desde una perspectiva OO, ya sea un método que anula la clase principal o un método que implementa una interfaz, se puede considerar una anulación, porque su propósito es el mismo, ambos para la reutilización. es polimórfico.

Expresión.

Simplemente cambie la versión jdk a 1.6.

5. Error al compilar la biblioteca alsa-lib

El siguiente error ocurrió durante el proceso de compilación de la migración de la biblioteca alsa-lib al desarrollo del sistema Android.

/tmp/cckyaR40.s: Mensaje del ensamblador:

/tmp/cckyaR40.s:2763: Error: El procesador seleccionado no admite 'mrs ip,cpsr'

/tmp/cckyaR40.s:2764: error: se requiere registro sin desplazamiento - 'orr R2,ip,#128'

/tmp/cckyaR40.s:2765: error: el procesador seleccionado no not support "msr cpsr_c, r2

Literalmente significa error de ensamblaje. El procesador seleccionado no admite las instrucciones mrs y msr.

Las instrucciones ARM originales tienen 32. Hay dos modos de instrucción: 16 bits y 16 bits El de 16 bits es un conjunto de instrucciones de pulgar, por lo que el código compilado con el conjunto de instrucciones de pulgar ocupa muy poco espacio y es muy eficiente, por lo que el compilador de brazo de Android se compila de forma predeterminada. El problema es que hay algunos contenidos en el código alsa.

Por lo tanto, el error se informará de la siguiente manera. El método de modificación también es muy simple:

Local_ARM_Mode: = arm

En el sistema de compilación de Android, el valor de la variable LOCAL_arm_MODE es ARM o pulgar, que representan los conjuntos de instrucciones ARM de 32 y 16 bits respectivamente. El valor predeterminado es pulgar

Pre. -built/Linux-x86/cadena de herramientas/arm-eabi-4 0/bin/../lib/gcc/arm-eabi/4.4.0/../../ ../.. /arm-eabi/bin/ld: no se puede establecer el tamaño de la sección dinámica: valor incorrecto

Conjunto 2: ld devolvió 1 estado de salida

make: *[out /target/product/merlin /obj/shared _ bibliotecas/liba sound _ intermedios/linked/liba sound . Error 1.

Para resolver este problema, simplemente descargue el archivo desde alsa-lib/include/config. Elimine la siguiente macro. definiciones en el archivo .h:

#Definition version_symbol

Encontré muchos errores durante el proceso de desarrollo, luego los resumí y registré uno por uno, y algunos de ellos se olvidaron

p>

Compilar en android.mk:

Incluir USD (liquidación VARS)

$(llamar a add-pre build-files, STATIC_LIBRARIES, libyfcdca. a)

p>

Cuando se le solicite, debe definir: LOCAL_MODULE_TAGS := Opcional. El método de modificación general es:

Variables de definición de macro en build\core\definitions.mk:

La definición incluye-pre-compilación

Incluye $$(CLEAR_VARS )

LOCAL_SRC_FILES:= $(1)

LOCAL_build_MODULE_STEM:= $(1)

LOCAL_MODULE_SUFFIX:= $$(Sufijo$ (1))

LOCAL_MODULE: = $ $(nombre base $(1))

LOCAL_MODULE_CLASS: = $(2)

Contiene $ $( BUILD _ pre BUILD)

endef

Agregar etiquetas _módulo_locales aquí es opcional.

Pero esto requiere modificar el código fuente de Android.

Si no es tu propio sistema Android, será problemático. Debes encontrar otras formas de solucionarlo:

#Incluye USD (CLEAR_VARS)

#$(llame a add-pre). build-files , STATIC_LIBRARIES, libyfcdca.a)

Incluye USD (liquidación VARS)

LOCAL_SRC_FILES:= libyfcdca.a

LOCAL_build_MODULE_STEM:= libyfcdca a<. /p>

Sufijo del módulo local: =lib

LOCAL_MODULE:=yfcdca

Clase de módulo local: =biblioteca estática

Etiqueta del módulo local:=opcional

Contiene $(BUILD _ pre BUILD)

Eso es todo. Para su referencia

Compilación en sistemas de 1 y 32 bits

Si necesita compilar el sistema Android en un sistema de 32 bits, debe modificar algunos archivos MAKE antes de la compilación.

Primero modifique build/core/main.mk, el contenido de la modificación es el siguiente:

-ifneq (64, $(findstring 64, $(build_arch)))

ifneq

(i686, $(findstring i686, $(build_arch)))

$(ADVERTENCIA

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ) $(Advertencia de que está intentando compilar en un sistema de 32 bits).

$(Advertencia de que solo se admiten entornos de compilación de 64 bits después de froyo/2.2.)

En segundo lugar, modifique los siguientes cuatro documentos:

External/clearsilver/cgi/Android.mk

External/clearsilver/Java-JNI/Android.MK

External /clearsilver/util/Android .mk

external/clear silver/cs/Android MK #Esto obligará a Java6 a usar la versión de 64 bits

-LOCAL_CFLAGS = -m64<. /p>

-LOCAL_LDFLAGS = -m64

LOCAL_CFLAGS = -m32

LOCAL_LDFLAGS = -m32 Es decir, LOCAL_CFLAGS y LOCAL_LDFLAGS se cambian de -m64 a -m32, especificando así el uso de un sistema de 32 bits para la compilación.

Si compilas con un sistema operativo de 64 bits, no necesitas modificarlos, pero recuerda instalarlos: para servidores de 64 bits, es posible que se requieran los siguientes paquetes adicionales:

" sudo apt- get install libc 6-dev-i386 "(libc6-dev-amd64 si CPU AMD)

" sudo apt-get install g -multi lib lib 32 ncurses 5-dev lib 32 z 1-dev "

También hay una versión jdk64bit compilada 2, build/core/base_rules.MK:128:* * FrameWorks/opt/emoticons/JNI:

...libgl2jni ha sido fram works/ base/OpenGL/tests/gl2_JNI/definición de parada JNI.

Desde la perspectiva de las reglas de compilación:

# Asegúrese de que esta combinación IS_HOST/CLASS/MODULE sea única.

ID del módulo: = módulo. $(if\

$(LOCAL_IS_HOST_MODULE), HOST, TARGET). $(LOCAL_MODULE_CLASS). $(módulo local)

ifdef $(identificador de módulo)

$(Error $(LOCAL_PATH): $(module_id) ya está definido por $($(module_id))

endif

Android.mk definido en fram works/base/OpenGL/tests/gl2 _ JNI/defines:

LOCAL_MODULE:= libgl2jni

Incluyendo $(BUILD_SHARED_LIBRARY)

Es incorrecto copiar la biblioteca dinámica generada. Puede modificar el directorio de prueba sin participar en la compilación. La forma más directa es eliminar el marco works/base/OpenGL/tests. Carpeta /gl2_JNI.

3. Por qué AIDL compila e informa que no se puede encontrar la importación de la clase

"El servicio AIDL solo admite un número limitado de tipos de datos, entonces si Si utiliza el servicio AIDL para transmitir algunos datos complejos, necesita realizar un procesamiento adicional. El servicio AIDL admite los siguientes tipos de datos:

Clases simples de Java (int, char, boolean, etc.). secuencias de cadenas y caracteres.

Sin embargo, tenga en cuenta que los tipos de elementos de los objetos de lista y de mapa deben ser tipos de datos compatibles con la interfaz de generación automática de AIDL. p>Las clases que implementan la interfaz android.os.Parcelable deben importarse.

Los dos últimos tipos de datos deben importarse y los valores de los tipos de datos que no necesitan importarse. También se importan mediante transferencia. Pasar el valor del tipo de datos que debe importarse (por ejemplo, una clase que implementa la interfaz android.os.Parcelable) es un poco más complicado además de crear una clase. implementa la interfaz android.os.parcelable, también necesita crear una clase separada para este archivo Aidl de clase, definido usando la palabra clave Parcelable "

LOCAL_AIDL_INCLUDES = xxx, por lo que mi archivo AIDL empaquetable. no se pudo encontrar.

Modifique build/core/pathmap.mk en el directorio raíz del código fuente de Android, agregue su directorio y luego ejecute update-api.

4. El método de error siempre indica @Override no anula el método de su clase principal.

No hay ningún problema al compilar con JDK1.6. Si se compila con JDK1.5, se informará que el método @Override no anula el método de su clase principal. De hecho, este método es un método en la interfaz implementado por la clase.

Pero se pueden pasar los siguientes métodos de lenguaje de jdk1.6, lo que significa que jdk1.6 piensa que tanto el método de la clase principal como la llamada al método de la interfaz de implementación se anulan, pero jdk1.5 no.

Yo también lo creo. No sé si esto es un error en jdk1.5, o creo que el método para anular la clase principal es diferente del método para implementar la interfaz. Pero desde el punto de vista de OO, ya sea que se trate de sobrecargar el método de la clase principal o el método de implementación de la interfaz, se puede considerar como una sobrecarga, porque su propósito es el mismo, ambos para la reutilización. es polimórfico.

Expresión.

Simplemente cambie la versión jdk a 1.6.

5. Error al compilar la biblioteca alsa-lib

El siguiente error ocurrió durante el proceso de compilación de la migración de la biblioteca alsa-lib al desarrollo del sistema Android.

/tmp/cckyaR40.s: Mensaje del ensamblador:

/tmp/cckyaR40.s:2763: Error: El procesador seleccionado no admite 'mrs ip,cpsr'

/tmp/cckyaR40.s:2764: error: se requiere registro sin desplazamiento - 'orr R2,ip,#128'

/tmp/cckyaR40.s:2765: error: el procesador seleccionado no not support "msr cpsr_c, r2

Literalmente significa error de ensamblaje. El procesador seleccionado no admite las instrucciones mrs y msr.

Las instrucciones ARM originales tienen 32. Hay dos modos de instrucción: 16 bits y 16 bits El de 16 bits es un conjunto de instrucciones de pulgar, por lo que el código compilado con el conjunto de instrucciones de pulgar ocupa muy poco espacio y es muy eficiente, por lo que el compilador de brazo de Android se compila de forma predeterminada. El problema es que hay algunos contenidos en el código alsa.

Por lo tanto, el error se informará de la siguiente manera. El método de modificación también es muy simple:

Local_ARM_Mode: = arm

En el sistema de compilación de Android, el valor de la variable LOCAL_arm_MODE es ARM o pulgar, que representan los conjuntos de instrucciones ARM de 32 y 16 bits respectivamente. El valor predeterminado es pulgar

Pre. -built/Linux-x86/cadena de herramientas/arm-eabi-4 0/bin/../lib/gcc/arm-eabi/4.4.0/../../ ../.. /arm-eabi/bin/ld: no se puede establecer el tamaño de la sección dinámica: valor incorrecto

Conjunto 2: ld devolvió 1 estado de salida

make: *[out /target/product/merlin /obj/shared _ bibliotecas/liba sound _ intermedios/linked/liba sound . Error 1.

Para resolver este problema, simplemente descargue el archivo desde alsa-lib/include/config. Elimine la siguiente macro. definiciones del archivo .h:

#Definition version_symbol

Encontré muchos errores durante el proceso de desarrollo, y luego los resumí y registré uno por uno, pero algunos de ellos se olvidaron .

Compilar en android.mk:

Incluir USD (liquidación VARS)

$ (llamar a add-pre build-files, STATIC_LIBRARIES, libyfcdca.a)

Cuando se le solicite, debe definir: LOCAL_MODULE_TAGS := Opcional. El método de modificación general es:

Variables de definición de macro en build\core\definitions.mk:

La definición incluye-pre-compilación

Incluye $$(CLEAR_VARS )

LOCAL_SRC_FILES:= $(1)

LOCAL_build_MODULE_STEM:= $(1)

LOCAL_MODULE_SUFFIX:= $$(Sufijo$ (1))

LOCAL_MODULE: = $ $(nombre base $(1))

LOCAL_MODULE_CLASS: = $(2)

Contiene $ $( BUILD _ pre BUILD)

endef

Agregar etiquetas _módulo_locales aquí es opcional.

Pero esto requiere modificar el código fuente de Android. Si no es tu propio sistema Android, será problemático. Debes encontrar otras formas de solucionarlo:

#Incluye USD (CLEAR_VARS)

#$(llame a add-pre). build-files , STATIC_LIBRARIES, libyfcdca.a)

Incluye USD (liquidación VARS)

LOCAL_SRC_FILES:= libyfcdca.a

LOCAL_build_MODULE_STEM:= libyfcdca a<. /p>

Sufijo del módulo local: =lib

LOCAL_MODULE:=yfcdca

Clase de módulo local: =biblioteca estática

Etiqueta del módulo local:=opcional

Contiene $(BUILD _ pre BUILD)

Eso es todo.