當前位置:首頁 » 安卓系統 » android編譯java

android編譯java

發布時間: 2025-03-25 16:22:02

㈠ 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發布時編譯為本地機器碼的。

熱點內容
哪個牌子的安卓手機界面好看 發布:2025-03-26 05:10:11 瀏覽:976
小樹茶存儲 發布:2025-03-26 05:04:56 瀏覽:571
pt上傳慢 發布:2025-03-26 04:31:17 瀏覽:53
阿里雲伺服器哪個好用 發布:2025-03-26 04:26:09 瀏覽:242
windows編程技術 發布:2025-03-26 04:19:47 瀏覽:422
養生密碼的產品怎麼樣 發布:2025-03-26 04:10:26 瀏覽:384
php中斷for 發布:2025-03-26 04:04:07 瀏覽:878
怎麼輸入管理員密碼 發布:2025-03-26 04:01:30 瀏覽:672
網路雲存儲伺服器 發布:2025-03-26 04:01:22 瀏覽:641
java獲取數據 發布:2025-03-26 03:59:46 瀏覽:411