android编译java
㈠ android是用什么语言开发的
Android应用程序开发主要使用java语言。Java类文件编译后会形成.dex文件,并与.apk文件一起打包。此外,Android也兼容C或C++底层开发。然而,Java成为了Android应用开发的主要语言。
Java在Android开发中有着广泛应用,其语法简洁、易于学习,支持面向对象编程,非常适合开发复杂的移动应用。而且,Java拥有丰富的库和框架,如Android SDK,大大简化了开发过程,提高了开发效率。
使用Java开发的Android应用,可以充分利用Android系统提供的各种API,实现丰富的功能和良好的用户体验。开发者可以轻松访问硬件设备、使用多媒体功能、连接网络等,从而构建出功能强大的应用程序。
在Android开发中,虽然C和C++也有所应用,尤其是对于性能要求高的部分,如游戏、图形处理等,它们可以提供更低级别的控制和更高的效率。但大部分应用开发还是以Java为主,因为它能提供更简单、更高效、更安全的开发环境。
总之,Java是Android应用程序开发的首选语言,它不仅提供了丰富的开发资源和工具,而且能够满足各类应用的开发需求。通过学习和使用Java,开发者可以轻松构建出功能强大、用户体验优秀的Android应用程序。
㈡ 手机上有可以安装java开发工具吗
手机上可以安装Java开发工具。x0dx0aAIDE是一个Android Java集成开发环境,可以在Android系统内进行Android软件和游戏的开发,也可以进行Java控制台程序的开发。它不仅仅是一个编辑器,而是支持编写-编译-调试运行整个周期,开发人员可以在Android手机或者平板机上创建新的项目,借助功能丰富的编辑器进行代码编写,支持实时错误检查、代码重构、代码智能导航、生成APK,然后直接安装进行测试。x0dx0aAIDE还内置了Java、Android、javascript、web、c/c++基础教程。当然也支持开发这些语言的项目。x0dx0aAIDE可以在各大软件商城获取,但是要收费。可以在网络AIDE吧获取破解版和汉化版。
㈢ dex能干什么
Dex能做什么:一种应用于移动应用开发的关键技术
Dex是Google推出的应用在Android操作系统中的一种技术。它主要用于编译Java代码,生成适用于Android系统的可执行文件。以下是Dex的具体功能和应用:
一、编译Java代码
Dex能够编译Java代码,将其转化为Android设备可以识别的二进制格式。这使得开发者编写的Java程序能够在Android设备上顺畅运行。通过Dex技术,开发者能够利用Java语言进行应用开发,再将其编译成Android设备上的可执行程序。
二、优化应用性能
Dex不仅仅是一个编译器,它还具有优化功能。它可以对Java代码进行优化,提高应用的运行效率。优化后的代码占用的存储空间更小,加载速度更快,从而提高了用户体验。
三、支持跨平台开发
由于Dex技术是基于Java的,因此它支持跨平台开发。开发者可以在不同的操作系统上编写代码,然后通过Dex技术将代码编译成Android应用。这大大简化了移动应用的开发过程,降低了开发成本。
四、增强应用安全性
Dex技术还有助于提高应用的安全性。通过混淆和加密技术,Dex可以保护应用程序的代码,防止被反编译或篡改,从而保护开发者的知识产权和用户的隐私安全。
总的来说,Dex技术在移动应用开发领域扮演着至关重要的角色。它不仅将Java代码转化为Android设备可执行的程序,还通过优化提高应用性能,支持跨平台开发,并增强应用的安全性。随着移动应用的普及和发展,Dex技术的地位和作用将越来越重要。
㈣ 怎么样将自己开发的Android应用程序编译到系统Image中
1. 搭建编译环境
编译环境: Ubuntu 10.10
Android版本:Android 2.2
编译过程中可能需要在Ubuntu上安装必要的一些软件,我安装过的包含如下软件,不同的系统可能会有差别:
jdk6(Android官方建议装jdk5,但是我在编译时会遇到Java override问题,改用6没有任何问题), bison, lib64z1-dev, libasound2-dev, flex, gperf, libncurses5-dev
2. 应用程序存放目录
SimpleJNI是采用Android NDK和Java编写的程序,包含apk和so库文件,它的源代码在source tree的development/samples/目录下。
实际上package在编译时所放的目录并没有明确限定,编译后apk和so存放的位置是根据目录下Android.mk所指定的编译类型所决定的,例如:
SimpleJNI根目录下的Android.mk中有一行include $(BUILD_PACKAGE),表示将该目录下的模块编译成package,即apk文件,默认存放的位置为/system/app。
SimpleJNI/jni目录下的Android.mk中有一行为include $(BUILD_SHARED_LIBRARY),表示将该目录下的native.cpp编译为共享库文件,即so文件,默认存放的位置为/system/lib
因此,如果我们想要将自己编写的程序编译至image中,只需要将Eclipse下完成的整个工程到source tree下的某个目录即可,我一般习惯放到packages/apps下。
3. 添加Android.mk
完成了上一步,可以知道,Android.mk在编译中起着至关重要的作用,这其实就是Android编译环境中的make file。为了完成我们的工作,需要在源代码中添加Android.mk。添加自己的Android.mk可以仿照SimpleJNI中的Android.mk,稍微修改即可。我们首先看看SimpleJNI目录下的两个Android.mk的内容:
根目录下的Android.mk
TOP_LOCAL_PATH:= $(call my-dir)
# Build activity
LOCAL_PATH:= $(TOP_LOCAL_PATH)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := samples
LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_PACKAGE_NAME := SimpleJNI
LOCAL_JNI_SHARED_LIBRARIES := libsimplejni
LOCAL_PROGUARD_ENABLED := disabled
include $(BUILD_PACKAGE)
# ============================================================
# Also build all of the sub-targets under this one: the shared library.
include $(call all-makefiles-under,$(LOCAL_PATH))
根目录下的Android.mk决定了整个工程编译的配置,其中,
LOCAL_PATH 定义了当前的目录
LOCAL_MUDULE_TAGS 定义了当前模块的类型,编译器在编译时会根据类型的不同有些差别,有些tags的mole甚至不会被编译至系统中。LOCAL_MUDULE_TAGS主要有如下几种:user debug eng tests optional samples shell_ash shell_mksh。optional表示在所有版本的编译条件下都被编译至image中,剩下的表示在该版本中才会被编译只image中,如user表示在user版本下才会被编译至image中。
对于包含LOCAL_PACKAGE_NAME的mk文件,该项默认为optinal,具体可以参看build/core/package.mk。SimpleJNI中定义为samples的具体作用我也不太清楚,为了保险起见,我自己的apk一般定义为optional。
LOCAL_SRC_FILES 定义了编译apk所需要的java代码的目录
LOCAL_PACKAGE_NAME 这里需要改成自己的package的名字
LOCAL_JNI_SHARED_LIBRARIES 定义了要包含的so库文件的名字,如果你的程序没有采用JNI,这行不需要。
LOCAL_PROGUARD_ENABLED 定义了Java开发中的ProGuard压缩方法,主要用来分析压缩程序的,在我自己的应用中我没有加这行。
include $(BUILD_PACKAGE) 这行是build的关键,表示当前java代码build成apk
include $(call all-makefiles-under,$(LOCAL_PATH)) 表示需要build该目录下的子目录的文件,这样编译系统就会在当前目录下的子目录寻找Android.mk来编译so等其它程序。
根据上述所写,创建我自己的Android.mk如下:
TOP_LOCAL_PATH:= $(call my-dir)
# Build activity
LOCAL_PATH:= $(TOP_LOCAL_PATH)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_PACKAGE_NAME := TestJniApp
LOCAL_JNI_SHARED_LIBRARIES := libtestjniapp
include $(BUILD_PACKAGE)
# ============================================================
# Also build all of the sub-targets under this one: the shared library.
include $(call all-makefiles-under,$(LOCAL_PATH))
看起来很简单吧,基本不需要改动即可。
Jni目录下的Android.mk
由于我们的TestJniApp是用JNI完成的,包含C源代码,因此也需要一个jni目录下的Android.mk。同样首先看看SimpleJNI中jni目录下的Android.mk的内容:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := samples
# This is the target being built.
LOCAL_MODULE:= libsimplejni
# All of the source files that we will compile.
LOCAL_SRC_FILES:= /
native.cpp
# All of the shared libraries we link against.
LOCAL_SHARED_LIBRARIES := /
libutils
# No static libraries.
LOCAL_STATIC_LIBRARIES :=
# Also need the JNI headers.
LOCAL_C_INCLUDES += /
$(JNI_H_INCLUDE)
# No special compiler flags.
LOCAL_CFLAGS +=
# Don't prelink this library. For more efficient code, you may want
# to add this library to the prelink map and set this to true. However,
# it's difficult to do this for applications that are not supplied as
# part of a system image.
LOCAL_PRELINK_MODULE := false
include $(BUILD_SHARED_LIBRARY)
LOCAL_MODULE 当前模块的名字,即编译后的so文件的名字
LOCAL_SRC_FILES 所要编译的文件
LOCAL_SHARED_LIBRARIES, LOCAL_STATIC_LIBRARIES 该模块要链接的动态库和静态库。
LOCAL_C_INCLUDES 要包含的头文件
LOCAL_CFLAGS C语言编译选项
LOCAL_PRELINK_MODULE 定义是否使用prelink工具,它用事先链接代替运行时链接的方法来加速共享库的加载,不仅可以加快起动速度,还可以减少部分内存开销。
经过修改后,我自己的TestJniApp中jni目录下的Android.mk如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libtestjniapp
LOCAL_SRC_FILES := com_test_app_Jni.c
LOCAL_C_INCLUDES += $(JNI_H_INCLUDE)
LOCAL_PRELINK_MODULE := false
include $(BUILD_SHARED_LIBRARY)
这里有一点需要注意,如果要将so文件编译入image,必须要修改LOCAL_MODULE_TAGS,将原有的值samples修改为user,或者可以直接删掉 。删掉是因为对于包含LOCAL_MODULE的mk文件,如果没有指定LOCAL_MODULE_TAGS,该项默认为user,而只有定义为user的情况下,才会将so文件编译入image,具体定义可以参看build/core/base_rule.mk。
4. 修改/bulid/target/proct/generic.mk 把工程编译到系统中
至此,还有最后一部工作。为了将工程编译进入image,还需要在/bulid/target/proct/generic.mk文件中将package name添加进去
PRODUCT_PACKAGES := /
AccountAndSyncSettings /
CarHome /
DeskClock /
……
SyncProvider /
TestJniApp
完成上面这些步骤后,在source tree根目录下编译image就可以了。
㈤ 为什么android不将java代码编译成本地代码
1、Java所谓的跨平台主要是指cpu架构(x86\ARM\IBM的cpu等等),而不仅仅是OS。
2、Android手机硬件不标准,编译成机器码到一些手机上无法运行。
3、ART是在app安装时,将app的代码编译成本地机器码,这样就可以因地制宜地将二进制码编译成对应的本地机器码了,解决了问题2。但也不是在app发布时编译为本地机器码的。