b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

将自己开发的Android应用程序编译到系统Image中是否很好

电脑杂谈  发布时间:2020-05-26 22:04:55  来源:网络整理

android应用程序编译_程序编译到android系统_android编译c程序

xuhaoran0213

接受

1. 建立编译环境

编译环境: Ubuntu 10.10

Android版本: Android 2.2

在编译过程中android应用程序编译,可能需要在Ubuntu上安装一些必要的软件. 我安装的软件包括以下软件. 不同的系统可能会有差异:

jdk6(Android官方建议安装jdk5,但编译时我会遇到Java覆盖问题,6没问题),野牛,lib64z1-dev,libasound2-dev,flex,gperf,libncurses5-dev p>

2. 应用程序存储目录

SimpleJNI是用Android NDK和Java编写的程序,包括apk等库文件,其源代码位于源树的development / samples /目录中.

实际上,在编译过程中放置​​软件包的目录没有明确定义. 编译后apk等的存储位置取决于目录中Android.mk指定的编译类型,例如:

Android.mk中的SimpleJNI根目录目录中有一行$(BUILD_PACKAGE),这意味着该目录中的模块已编译为包,即apk文件,默认存储位置为/ system /应用.

在SimpleJNI / jni目录的Android.mk中有一行包括$(BUILD_SHARED_LIBRARY),这意味着该目录中的native.cpp被编译为共享库文件,即so文件. 默认位置是/ system / lib

因此,如果要编译写入映像中的程序,我们只需要将在Eclipse下完成的整个项目复制到源代码树下的目录中,而我通常在软件包/应用程序下使用它.

3. 添加Android.mk

完成上一步后,您可以知道Android.mk在编译中起着至关重要的作用,它实际上是Android编译环境中的make文件. 为了完成我们的工作android应用程序编译,我们需要在源代码中添加Android.mk. 添加您自己的Android.mk可以在SimpleJNI中模仿Android.mk,只需对其稍加修改即可. 让我们首先看一下SimpleJNI目录下两个Android.mk的内容:

Android.mk在根目录中

TOP_LOCAL_PATH: = $(调用my-dir)

#构建活动

LOCAL_PATH: = $(TOP_LOCAL_PATH)

包括$(CLEAR_VARS)

android编译c程序_android应用程序编译_程序编译到android系统

LOCAL_MODULE_TAGS: =个样本

LOCAL_SRC_FILES: = $(调用all-subdir-java-files)

LOCAL_PACKAGE_NAME: = SimpleJNI

LOCAL_JNI_SHARED_LIBRARIES: = libsimplejni

LOCAL_PROGUARD_ENABLED: =已禁用

包括$(BUILD_PACKAGE)

#============================================== ==== =============

#还要在该子目录下构建所有子目标: 共享库.

包括$(调用所有makefiles-under,$(LOCAL_PATH))

根目录中的

Android.mk确定整个项目编译的配置,

LOCAL_PATH定义当前目录

LOCAL_MUDULE_TAGS定义当前模块的类型,编译器根据编译时的类型而有所不同,并且某些标记模块甚至都不会编译到系统中. LOCAL_MUDULE_TAGS主要具有以下类型: 用户调试引擎测试可选样本shell_ash shell_mksh. 可选表示将在所有版本的编译条件下将其编译到映像中,其余表示仅在此版本中将其编译到映像中,例如user表示将在用户版本下将其编译到映像中

对于包含LOCAL_PACKAGE_NAME的mk文件,此项目默认为optimal. 有关详细信息,请参见build / core / package.mk. 我也不清楚在SimpleJNI中定义为样本的特定角色. 为了保险起见,我自己的apk通常定义为可选.

LOCAL_SRC_FILES定义了编译apk所需的Java代码的目录

此处的LOCAL_PACKAGE_NAME需要更改为您的包裹名称

LOCAL_JNI_SHARED_LIBRARIES定义要包含的so库文件的名称. 如果您的程序不使用JNI,则不需要此行.

LOCAL_PROGUARD_ENABLED在Java开发中定义ProGuard压缩方法,该方法主要用于分析压缩程序. 我没有在自己的应用程序中添加此行.

include $(BUILD_PACKAGE)这行是构建的关键,这意味着当前的Java代码已内置到apk中.

include $(调用all-makefiles-under,$(LOCAL_PATH))表示您需要在此目录的子目录中构建文件,以便编译系统将在当前目录的子目录中找到Android.mk进行编译等等. 其他程序.

基于上述内容,按如下所示创建我自己的Android.mk:

程序编译到android系统_android应用程序编译_android编译c程序

TOP_LOCAL_PATH: = $(调用my-dir)

#构建活动

LOCAL_PATH: = $(TOP_LOCAL_PATH)

包括$(CLEAR_VARS)

LOCAL_MODULE_TAGS: =可选

LOCAL_SRC_FILES: = $(调用all-subdir-java-files)

LOCAL_PACKAGE_NAME: = TestJniApp

LOCAL_JNI_SHARED_LIBRARIES: = libtestjniapp

包括$(BUILD_PACKAGE)

#============================================== ==== =============

#还要在该子目录下构建所有子目标: 共享库.

包括$(调用所有makefiles-under,$(LOCAL_PATH))

它看起来非常简单,基本上不需要更改.

Jni目录下的Android.mk

由于我们的TestJniApp已使用JNI完成并包含C源代码,因此在jni目录中还需要一个Android.mk. 还要首先查看SimpleJNI的jni目录中Android.mk的内容:

LOCAL_PATH: = $(调用my-dir)

包括$(CLEAR_VARS)

LOCAL_MODULE_TAGS: =个样本

#这是正在建立的目标.

LOCAL_MODULE: = libsimplejni

#我们将编译的所有源文件.

程序编译到android系统_android应用程序编译_android编译c程序

LOCAL_SRC_FILES: = /

native.cpp

#我们链接的所有共享库.

LOCAL_SHARED_LIBRARIES: = /

libutils

#没有静态库.

LOCAL_STATIC_LIBRARIES: =

#还需要JNI标头.

LOCAL_C_INCLUDES + = /

$(JNI_H_INCLUDE)

#没有特殊的编译器标志.

LOCAL_CFLAGS + =

#不预链接此库. 要获得更高效的代码,您可能需要

#将此库添加到预链接映射并将其设置为true. 但是,

#对于未提供的应用程序很难做到这一点

#部分系统映像.

LOCAL_PRELINK_MODULE: =错误

包括$(BUILD_SHARED_LIBRARY)

LOCAL_MODULE当前模块的名称,即已编译的so文件的名称

要编译的LOCAL_SRC_FILES个文件

LOCAL_SHARED_LIBRARIES,LOCAL_STATIC_LIBRARIES此模块将链接的动态库和静态库.

android编译c程序_程序编译到android系统_android应用程序编译

要包含的LOCAL_C_INCLUDES头文件

LOCAL_CFLAGS C语言编译选项

LOCAL_PRELINK_MODULE定义是否使用预链接工具,该工具使用预链接而不是运行时链接来加速共享库的加载,这不仅可以加快启动速度,还可以减少一些内存开销.

修改后,我自己的TestJniApp的jni目录中的Android.mk如下:

LOCAL_PATH: = $(调用my-dir)

包括$(CLEAR_VARS)

LOCAL_MODULE: = libtestjniapp

LOCAL_SRC_FILES: = com_test_app_Jni.c

LOCAL_C_INCLUDES + = $(JNI_H_INCLUDE)

LOCAL_PRELINK_MODULE: =错误

包括$(BUILD_SHARED_LIBRARY)

这里要注意的一件事,如果要将so文件编译到映像中,则必须修改LOCAL_MODULE_TAGS,修改原始值样本给用户,或者可以直接将其删除. 删除是因为对于包含LOCAL_MODULE的mk文件,如果未指定LOCAL_MODULE_TAGS,则默认值为user,并且只有将so文件定义为user时,so文件才会编译到映像中. 有关特定的定义,请参见build / core / base_rule. mk.

4. 修改/bulid/target/product/generic.mk,将项目编译到系统中

这时,有最后一项工作. 为了将项目编译到映像中,您还需要在/bulid/target/product/generic.mk文件中添加包名称

PRODUCT_PACKAGES: = /

AccountAndSyncSettings /

CarHome /

桌面时钟/

......

SyncProvider /

TestJniApp

完成上述步骤后,在源树的根目录中编译映像.


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-223302-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...