導航:首頁 > 操作系統 > androidmk編譯jar

androidmk編譯jar

發布時間:2023-01-05 08:16:37

⑴ 自己寫android.mk來生成Jar包

創建Android.mk文件和java類:

Parent.java

Child.java

我強調一點: Java類的package name並不是必須與所在文件夾一致,習慣上寫成一致。

Android.mk

javalib.jar即為編譯後可用的jar包。

⑵ android.mk ubuntu怎麼編譯

一個Android.mk file用來向編譯系統描述你的源代碼。具體來說:該文件是GNU Makefile的一小部分,會被編譯系統解析一次或多次。你可以在每一個Android.mk file中定義一個或多個模塊。每個模塊屬下列類型之一:
1)APK程序,一般的Android程序,編譯打包生成apk文件
2)Java庫,java類庫,編譯打包生成jar文件
3) CC++應用程序,可執行的CC++應用程序
4)CC++靜態庫,編譯生成CC++靜態庫,並打包成.a文件
5)CC++共享庫,編譯生成共享庫(動態鏈接庫),並打包成.so, 有且只有共享庫才能被安裝/復制到您的應用軟體(APK)包中。
(1)先看一個簡單的例子:一個簡單的"hello world",比如下面的文件:
sources/helloworld/helloworld.c
sources/helloworld/Android.mk
相應的Android.mk文件會像下面這樣:

---------- cut here ------------------

普通的.mk一樣

=====================================m、mm、mmm編譯命令===========================================

android源碼目錄下的build/envsetup.sh文件,描述編譯的命令
- m: Makes from the top of the tree.
- mm: Builds all of the moles in the current directory.
- mmm: Builds all of the moles in the supplied directories.

所以要想使用這些命令,首先需要在android源碼根目錄執行build/envsetup.sh 腳本設置環境。
m:編譯所有的模塊
mm:編譯當前目錄下的模塊,當前目錄下要有Android.mk文件
mmm:編譯指定路徑下的模塊,指定路徑下要有Android.mk文件

下面舉個例子說明,假設我要編譯android下的hardwarelibhardware_legacypower模塊,當前目錄為源碼根目錄,方法如下:
1、. build/envsetup.sh
2、mmm hardware/libhardware_legacy/power/
或者 :
1、. build/envsetup.sh
2、cd hardware/libhardware_legacy/power/
3、mm

m沒有試過。默認上述兩個編譯命令,只編譯發生變化的文件。如果要編譯模塊的所有文件,需要-b選項,例如mm -b或者mmm -b

make命令,也可以用來編譯。如果是include $(BUILD_PACKAGE),用makeLOCAL_PACKAGE_NAME值;如果是include $(BUILD_EXECUTABLE)或者include $(BUILD_JAVA_LIBRARY),用makeLOCAL_MODULE值(未驗證)。

⑶ 求解答,Android源碼編譯時怎的添加第三方jar包

Android.mk添加第三方jar包

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_STATIC_JAVA_LIBRARIES := xsocket jackson-mapper logging jackson-core javatar log4j
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_PACKAGE_NAME := test

LOCAL_CERTIFICATE := platform
include $(BUILD_PACKAGE)
##################################################
include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := xsocket:lib/xSocket-2.8.14.jar \
jackson-mapper:lib/jackson-mapper-asl-1.6.2.jar \
logging:lib/commons-logging.jar \
jackson-core:lib/jackson-core-asl-1.6.2.jar \
javatar:lib/javatar-2.5.jar \
log4j:lib/log4j-1.2.15.jar
include $(BUILD_MULTI_PREBUILT)
# Use the folloing include to make our test apk.
include $(call all-makefiles-under,$(LOCAL_PATH))

以上是我的一個項目中所需要的第三方jar包,主要參考了Android源碼中的Calculator應用,該應用也引用了一個第三方的jar包arity-2.1.2.jar。
需要注意的是,當你要引用的jar包不止一個時,有兩個關鍵的地方需要注意的。
LOCAL_STATIC_JAVA_LIBRARIES := xsocket jackson-mapper logging jackson-core javatar log4j
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := xsocket:lib/xSocket-2.8.14.jar \
jackson-mapper:lib/jackson-mapper-asl-1.6.2.jar \
logging:lib/commons-logging.jar \
jackson-core:lib/jackson-core-asl-1.6.2.jar \
javatar:lib/javatar-2.5.jar \
log4j:lib/log4j-1.2.15.jar
xsocket jackson-mapper logging jackson-core javatar log4j這幾個只是名字,可以隨便取。LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES後面才是真正其作用的地方。如:
xsocket:lib/xSocket-2.8.14.jar 引用的是lib目錄中的xSocket-2.8.14.jar。
還要注意的是 := 不要寫成了+=了哦。

附:編寫各種類型的Android.mk,出處我忘記了,是以前瀏覽是拷貝下來的。
一、編譯一個簡單的APK
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Build all java files in the java subdirectory
LOCAL_SRC_FILES := $(call all-subdir-java-files)
# Name of the APK to build
LOCAL_PACKAGE_NAME := LocalPackage
# Tell it to build an APK
include $(BUILD_PACKAGE)
二、編譯一個依賴靜態.jar文件的APK
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# List of static libraries to include in the package
LOCAL_STATIC_JAVA_LIBRARIES := static-library
# Build all java files in the java subdirectory
LOCAL_SRC_FILES := $(call all-subdir-java-files)
# Name of the APK to build
LOCAL_PACKAGE_NAME := LocalPackage
# Tell it to build an APK
include $(BUILD_PACKAGE)
註:LOCAL_STATIC_JAVA_LIBRARIES 後面應是你的APK程序所需要的JAVA庫的JAR文件名。
三、編譯一個需要platform key簽名的APK
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Build all java files in the java subdirectory
LOCAL_SRC_FILES := $(call all-subdir-java-files)
# Name of the APK to build
LOCAL_PACKAGE_NAME := LocalPackage
LOCAL_CERTIFICATE := platform
# Tell it to build an APK
include $(BUILD_PACKAGE)
註:LOCAL_CERTIFICATE 後面應該是簽名文件的文件名
四、編譯一個需要特殊vendor key簽名的APK
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Build all java files in the java subdirectory
LOCAL_SRC_FILES := $(call all-subdir-java-files)
# Name of the APK to build
LOCAL_PACKAGE_NAME := LocalPackage
LOCAL_CERTIFICATE := vendor/example/certs/app
# Tell it to build an APK
include $(BUILD_PACKAGE)
五、裝載一個普通的第三方APK
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Mole name should match apk name to be installed.
LOCAL_MODULE := LocalMoleName
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := platform
include $(BUILD_PREBUILT)
六、裝載需要.so(動態庫)的第三方apk
LOCAL_PATH := $(my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := input_android_v1.1_1000e
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := platform
include $(BUILD_PREBUILT)
#################################################################
####### the library to /system/lib #########################
#################################################################
include $(CLEAR_VARS)
LOCAL_MODULE := libinputcore.so
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)
LOCAL_SRC_FILES := lib/$(LOCAL_MODULE)
OVERRIDE_BUILD_MODULE_PATH := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)
include $(BUILD_PREBUILT)
七、編譯一個靜態java庫
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Build all java files in the java subdirectory
LOCAL_SRC_FILES := $(call all-subdir-java-files)
# Any libraries that this library depends on
LOCAL_JAVA_LIBRARIES := android.test.runner
# The name of the jar file to create
LOCAL_MODULE := sample
# Build a static jar file.
include $(BUILD_STATIC_JAVA_LIBRARY)
註:LOCAL_JAVA_LIBRARIES表示生成的java庫的jar文件名。

⑷ android怎麼在源碼導入jar包

在Android源碼編譯成功的基礎上重新編譯帶自己API的android.jar需要進行以下幾步操作:

1、添加自己源代碼,在Android源碼frameworks/base目錄下新建一個文件夾保存代碼,如tv,以包的形式命名添加的文件所在的路徑,如/tv/java/android/tv,添加的java文件開頭定義的包即是編譯成功的class文件所在的包。
2、修改makefile文件
2.1 修改build/core/pathmap.mk文件
在FRAMEWORKS_ BASE_ SUBDIRS變數後添加tv\,代碼如下(makefile文件中的語句以Tab鍵空格開頭)
FRAMEWORKS_BASE_SUBDIRS := \ $(addsuffix /java, \ core \ graphics \ location \ media \ opengl \ sax \ telephony \ wifi \ vpn \ keystore \ tv \ )
2.2 修改frameworks/base/Android.mk 文件
在packages_to_ document變數後添加自己源代碼的包名稱,如android/tv,結果如下(makefile文件中的語句以Tab鍵空格開頭)
packages_to_document := \
android \
javax/microedition/khronos android/tv 3 在ubuntu命令行終端使用如下命令進行編譯:
make clean
make update-api
make PRODUCT-sdk-sdk
最後一行也可以用如下兩個命令代替: make –j4 make sdk 4 編譯結果
4.1 android.jar文件所在的目錄為
/out/target/common/obj/PACKAGING/android_jar_intermediates/android.jar並在/out/target/common/obj/JAVA_LIBRARIES/android_stubs_current_interme diates/src目錄下重新以package形式組織所有生成到android.jar中的源代碼。 4.2 SDK所在目錄為
out/host/linux-x86/sdk/,生成的sdk文件目錄和壓縮包為: android-sdk_eng.xxx_linux-x86
android-sdk_eng.xxx_linux-x86.zip(xxx為自己android源碼所在的文件名)

⑸ android.mk 這個文件在哪裡 我怎麼找不到

android.mk 是Android開發中,用來編譯JNI代碼的

在開發工具中,new JNI 即可創建一個 android.mk文件

一個Android.mk文件可以編譯多個模塊,每個模塊屬下列類型之一:

  1. APK程序 一般的Android程序,編譯打包生成apk文件

  2. JAVA庫 java類庫,編譯打包生成jar文件

  3. CC++應用程序 可執行的CC++應用程序

  4. CC++靜態庫 編譯生成CC++靜態庫,並打包成.a文件

  5. CC++共享庫 編譯生成共享庫(動態鏈接庫),並打包成.so文, 有且只有共享庫才能被安裝/復制到您的應用軟體(APK)包中。

⑹ android 怎麼把多個so文件編譯成jar

一共分為2步:

1.在Java中編寫要調用的靜態方法和需要載入的庫,並生成頭文件。

2.配置gradle

3.配置Android.mk文件和application.mk文件

下面一步步的走:

首先需要在Java類中聲明要調用的方法,以及要載入的庫,我們在包下新建一個jniUtil類,如下所示

[plain]view plain

publicclassjniUtil{

//要載入的庫,生成的庫格式為:lib+庫名.so

static{System.loadLibrary("hello-jni");}

//要調用的本地方法,在c文件中該方法名稱格式為:java_包名_類名_方法名

();

}


注意:在編譯時該類中不能有漢字,包括注釋,否則會出現編碼GBK的不可映射字元錯誤。
接下來就是利用external Tools生成頭文件.h,這里可參考點擊打開鏈接
然後就會在main目錄下生成Jni文件夾,並且包含.h文件。下面就是編寫C文件,或者可以拷貝已經寫好的C文件放置在該jni文件夾中.

2.配置gradle
我們這里不用gradle 去編譯,而是只讓他去載入已經生成的so庫,改用android.mk 去編譯(稍後配置android.mk)
在app的build.gradle 下的android 標簽下添加:

[plain]view plain

sourceSets{

main{

jni.srcDirs=[]//禁止gradle自動編譯,使用已經編譯好的So庫

jniLibs.srcDirs=['src/main/jniLibs','libs']//指向要使用的庫文件//的路徑,前邊的是自己項目的,後邊的是第三方的so

}

}


從上面可以看出,我們生成的庫是放在
src/main/jniLibs
目錄下面的,那麼這個是如何配置呢?還是在該gradle下面配置ndk的編譯腳本,注意放在android標簽外面:

[plain]view plain

tasks.withType(JavaCompile){

compileTask->compileTask.dependsOnCopyToJniLibs

}

taskndkBuild(type:Exec,description:'CompileJNIsourceviaNDK'){

Propertiesproperties=newProperties()

properties.load(project.rootProject.file('local.properties').newDataInputStream())

defndkDir=properties.getProperty('ndk.dir')

commandLine"$ndkDir/ndk-build.cmd","NDK_PROJECT_PATH=$projectDir.absolutePath\build","APP_BUILD_SCRIPT=$projectDir.absolutePath\src\main\jni\Android.mk","NDK_APPLICATION_MK=$projectDir.absolutePath\src\main\jni\Application.mk"

//你自己的mk文件目錄

}


在ndkbuild完成後把生成的so文件復制到jniLibs,這里和上面配置的載入so文件路徑要一致哦


[plain]view plain

taskCopyToJniLibs(type:Copy,dependsOn:'ndkBuild',description:'thenativelibstojniLibs'){

fromfileTree(dir:file(buildDir.absolutePath+'/libs'),include:'**/*.so')

intofile('src/main/jniLibs')

}


新建Android.mk和application.mk,這里我把Android.mk和application.mk放在jni文件夾下了,具體可以自己修改。默認生成的SO文件會在build下面的libs中,我們拷貝出來放到src/main/jniLibs下面。

3.配置Android.mk和Application.mk

⑺ android 怎麼編譯so文件

android NDK編譯多個so文件

android編譯系統的makefile文件Android.mk寫法如下

(1)Android.mk文件首先需要指定LOCAL_PATH變數,用於查找源文件。由於一般情況下

Android.mk和需要編譯的源文件在同一目錄下,所以定義成如下形式:

LOCAL_PATH:=$(call my-dir)

上面的語句的意思是將LOCAL_PATH變數定義成本文件所在目錄路徑。

(2)Android.mk中可以定義多個編譯模塊,每個編譯模塊都是以include $(CLEAR_VARS)開始

以include $(BUILD_XXX)結束。

include $(CLEAR_VARS)

CLEAR_VARS由編譯系統提供,指定讓GNU MAKEFILE為你清除除LOCAL_PATH以外的所有LOCAL_XXX變數,

如LOCAL_MODULE,LOCAL_SRC_FILES,LOCAL_SHARED_LIBRARIES,LOCAL_STATIC_LIBRARIES等。

include $(BUILD_STATIC_LIBRARY)表示編譯成靜態庫

include $(BUILD_SHARED_LIBRARY)表示編譯成動態庫。

include $(BUILD_EXECUTABLE)表示編譯成可執行程序

(3)舉例如下(frameworks/base/libs/audioflinger/Android.mk):

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS) 模塊一

ifeq ($(AUDIO_POLICY_TEST),true)

ENABLE_AUDIO_DUMP := true

endif

LOCAL_SRC_FILES:= \

AudioHardwareGeneric.cpp \

AudioHardwareStub.cpp \

AudioHardwareInterface.cpp

ifeq ($(ENABLE_AUDIO_DUMP),true)

LOCAL_SRC_FILES += AudioDumpInterface.cpp

LOCAL_CFLAGS += -DENABLE_AUDIO_DUMP

endif

LOCAL_SHARED_LIBRARIES := \

libcutils \

libutils \

libbinder \

libmedia \

libhardware_legacy

ifeq ($(strip $(BOARD_USES_GENERIC_AUDIO)),true)

LOCAL_CFLAGS += -DGENERIC_AUDIO

endif

LOCAL_MODULE:= libaudiointerface

ifeq ($(BOARD_HAVE_BLUETOOTH),true)

LOCAL_SRC_FILES += A2dpAudioInterface.cpp

LOCAL_SHARED_LIBRARIES += liba2dp

LOCAL_CFLAGS += -DWITH_BLUETOOTH -DWITH_A2DP

LOCAL_C_INCLUDES += $(call include-path-for, bluez)

endif

include $(BUILD_STATIC_LIBRARY) 模塊一編譯成靜態庫

include $(CLEAR_VARS) 模塊二

LOCAL_SRC_FILES:= \

AudioPolicyManagerBase.cpp

LOCAL_SHARED_LIBRARIES := \

libcutils \

libutils \

libmedia

ifeq ($(TARGET_SIMULATOR),true)

LOCAL_LDLIBS += -ldl

else

LOCAL_SHARED_LIBRARIES += libdl

endif

LOCAL_MODULE:= libaudiopolicybase

ifeq ($(BOARD_HAVE_BLUETOOTH),true)

LOCAL_CFLAGS += -DWITH_A2DP

endif

ifeq ($(AUDIO_POLICY_TEST),true)

LOCAL_CFLAGS += -DAUDIO_POLICY_TEST

endif

include $(BUILD_STATIC_LIBRARY) 模塊二編譯成靜態庫

include $(CLEAR_VARS) 模塊三

LOCAL_SRC_FILES:= \

AudioFlinger.cpp \

AudioMixer.cpp.arm \

AudioResampler.cpp.arm \

AudioResamplerSinc.cpp.arm \

AudioResamplerCubic.cpp.arm \

AudioPolicyService.cpp

LOCAL_SHARED_LIBRARIES := \

libcutils \

libutils \

libbinder \

libmedia \

libhardware_legacy

ifeq ($(strip $(BOARD_USES_GENERIC_AUDIO)),true)

LOCAL_STATIC_LIBRARIES += libaudiointerface libaudiopolicybase

LOCAL_CFLAGS += -DGENERIC_AUDIO

else

LOCAL_SHARED_LIBRARIES += libaudio libaudiopolicy

endif

ifeq ($(TARGET_SIMULATOR),true)

LOCAL_LDLIBS += -ldl

else

LOCAL_SHARED_LIBRARIES += libdl

endif

LOCAL_MODULE:= libaudioflinger

ifeq ($(BOARD_HAVE_BLUETOOTH),true)

LOCAL_CFLAGS += -DWITH_BLUETOOTH -DWITH_A2DP

LOCAL_SHARED_LIBRARIES += liba2dp

endif

ifeq ($(AUDIO_POLICY_TEST),true)

LOCAL_CFLAGS += -DAUDIO_POLICY_TEST

endif

ifeq ($(TARGET_SIMULATOR),true)

ifeq ($(HOST_OS),linux)

LOCAL_LDLIBS += -lrt -lpthread

endif

endif

ifeq ($(BOARD_USE_LVMX),true)

LOCAL_CFLAGS += -DLVMX

LOCAL_C_INCLUDES += vendor/nxp

LOCAL_STATIC_LIBRARIES += liblifevibes

LOCAL_SHARED_LIBRARIES += liblvmxservice

# LOCAL_SHARED_LIBRARIES += liblvmxipc

endif

include $(BUILD_SHARED_LIBRARY) 模塊三編譯成動態庫

(4)編譯一個應用程序(APK)

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

# Build all java files in the java subdirectory-->直譯(建立在java子目錄中的所有Java文件)

LOCAL_SRC_FILES := $(call all-subdir-java-files)

# Name of the APK to build-->直譯(創建APK的名稱)

LOCAL_PACKAGE_NAME := LocalPackage

# Tell it to build an APK-->直譯(告訴它來建立一個APK)

include $(BUILD_PACKAGE)

(5)編譯一個依賴於靜態Java庫(static.jar)的應用程序

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

# List of static libraries to include in the package

LOCAL_STATIC_JAVA_LIBRARIES := static-library

# Build all java files in the java subdirectory

LOCAL_SRC_FILES := $(call all-subdir-java-files)

# Name of the APK to build

LOCAL_PACKAGE_NAME := LocalPackage

# Tell it to build an APK

include $(BUILD_PACKAGE)

(6)編譯一個需要用平台的key簽名的應用程序

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

# Build all java files in the java subdirectory

LOCAL_SRC_FILES := $(call all-subdir-java-files)

# Name of the APK to build

LOCAL_PACKAGE_NAME := LocalPackage

LOCAL_CERTIFICATE := platform

# Tell it to build an APK

include $(BUILD_PACKAGE)

(7)編譯一個需要用特定key前面的應用程序

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

# Build all java files in the java subdirectory

LOCAL_SRC_FILES := $(call all-subdir-java-files)

# Name of the APK to build

LOCAL_PACKAGE_NAME := LocalPackage

LOCAL_CERTIFICATE := vendor/example/certs/app

# Tell it to build an APK

include $(BUILD_PACKAGE)

(8)添加一個預編譯應用程序

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

# Mole name should match apk name to be installed.

LOCAL_MODULE := LocalMoleName

LOCAL_SRC_FILES := $(LOCAL_MODULE).apk

LOCAL_MODULE_CLASS := APPS

LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)

include $(BUILD_PREBUILT)

(9)添加一個靜態JAVA庫

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

# Build all java files in the java subdirectory

LOCAL_SRC_FILES := $(call all-subdir-java-files)

# Any libraries that this library depends on

LOCAL_JAVA_LIBRARIES := android.test.runner

# The name of the jar file to create

LOCAL_MODULE := sample

# Build a static jar file.

include $(BUILD_STATIC_JAVA_LIBRARY)

(10)Android.mk的編譯模塊中間可以定義相關的編譯內容,也就是指定相關的變數如下:

LOCAL_AAPT_FLAGS

LOCAL_ACP_UNAVAILABLE

LOCAL_ADDITIONAL_JAVA_DIR

LOCAL_AIDL_INCLUDES

LOCAL_ALLOW_UNDEFINED_SYMBOLS

LOCAL_ARM_MODE

LOCAL_ASFLAGS

LOCAL_ASSET_DIR

LOCAL_ASSET_FILES 在Android.mk文件中編譯應用程序(BUILD_PACKAGE)時設置此變數,表示資源文件,

通常會定義成LOCAL_ASSET_FILES += $(call find-subdir-assets)

LOCAL_BUILT_MODULE_STEM

LOCAL_C_INCLUDES 額外的C/C++編譯頭文件路徑,用LOCAL_PATH表示本文件所在目錄

舉例如下:

LOCAL_C_INCLUDES += extlibs/zlib-1.2.3

LOCAL_C_INCLUDES += $(LOCAL_PATH)/src

LOCAL_CC 指定C編譯器

LOCAL_CERTIFICATE 簽名認證

LOCAL_CFLAGS 為C/C++編譯器定義額外的標志(如宏定義),舉例:LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1

LOCAL_CLASSPATH

LOCAL_COMPRESS_MODULE_SYMBOLS

LOCAL_COPY_HEADERS install應用程序時需要復制的頭文件,必須同時定義LOCAL_COPY_HEADERS_TO

LOCAL_COPY_HEADERS_TO install應用程序時復制頭文件的目的路徑

LOCAL_CPP_EXTENSION 如果你的C++文件不是以cpp為文件後綴,你可以通過LOCAL_CPP_EXTENSION指定C++文件後綴名

如:LOCAL_CPP_EXTENSION := .cc

注意統一模塊中C++文件後綴必須保持一致。

LOCAL_CPPFLAGS 傳遞額外的標志給C++編譯器,如:LOCAL_CPPFLAGS += -ffriend-injection

LOCAL_CXX 指定C++編譯器

LOCAL_DX_FLAGS

LOCAL_EXPORT_PACKAGE_RESOURCES

LOCAL_FORCE_STATIC_EXECUTABLE 如果編譯的可執行程序要進行靜態鏈接(執行時不依賴於任何動態庫),則設置LOCAL_FORCE_STATIC_EXECUTABLE:=true

目前只有libc有靜態庫形式,這個只有文件系統中/sbin目錄下的應用程序會用到,這個目錄下的應用程序在運行時通常

文件系統的其它部分還沒有載入,所以必須進行靜態鏈接。

LOCAL_GENERATED_SOURCES

LOCAL_INSTRUMENTATION_FOR

LOCAL_INSTRUMENTATION_FOR_PACKAGE_NAME

LOCAL_INTERMEDIATE_SOURCES

LOCAL_INTERMEDIATE_TARGETS

LOCAL_IS_HOST_MODULE

LOCAL_JAR_MANIFEST

LOCAL_JARJAR_RULES

LOCAL_JAVA_LIBRARIES 編譯java應用程序和庫的時候指定包含的java類庫,目前有core和framework兩種

多數情況下定義成:LOCAL_JAVA_LIBRARIES := core framework

注意LOCAL_JAVA_LIBRARIES不是必須的,而且編譯APK時不允許定義(系統會自動添加)

LOCAL_JAVA_RESOURCE_DIRS

LOCAL_JAVA_RESOURCE_FILES

LOCAL_JNI_SHARED_LIBRARIES

LOCAL_LDFLAGS 傳遞額外的參數給連接器(務必注意參數的順序)

LOCAL_LDLIBS 為可執行程序或者庫的編譯指定額外的庫,指定庫以"-lxxx"格式,舉例:

LOCAL_LDLIBS += -lcurses -lpthread

LOCAL_LDLIBS += -Wl,-z,origin

LOCAL_MODULE 生成的模塊的名稱(注意應用程序名稱用LOCAL_PACKAGE_NAME而不是LOCAL_MODULE)

LOCAL_MODULE_PATH 生成模塊的路徑

LOCAL_MODULE_STEM

LOCAL_MODULE_TAGS 生成模塊的標記

LOCAL_NO_DEFAULT_COMPILER_FLAGS

LOCAL_NO_EMMA_COMPILE

LOCAL_NO_EMMA_INSTRUMENT

LOCAL_NO_STANDARD_LIBRARIES

LOCAL_OVERRIDES_PACKAGES

LOCAL_PACKAGE_NAME APK應用程序的名稱

LOCAL_POST_PROCESS_COMMAND

LOCAL_PREBUILT_EXECUTABLES 預編譯including $(BUILD_PREBUILT)或者$(BUILD_HOST_PREBUILT)時所用,指定需要復制的可執行文件

LOCAL_PREBUILT_JAVA_LIBRARIES

LOCAL_PREBUILT_LIBS 預編譯including $(BUILD_PREBUILT)或者$(BUILD_HOST_PREBUILT)時所用, 指定需要復制的庫.

LOCAL_PREBUILT_OBJ_FILES

LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES

LOCAL_PRELINK_MODULE 是否需要預連接處理(默認需要,用來做動態庫優化)

LOCAL_REQUIRED_MODULES 指定模塊運行所依賴的模塊(模塊安裝時將會同步安裝它所依賴的模塊)

LOCAL_RESOURCE_DIR

LOCAL_SDK_VERSION

LOCAL_SHARED_LIBRARIES 可鏈接動態庫

LOCAL_SRC_FILES 編譯源文件

LOCAL_STATIC_JAVA_LIBRARIES

LOCAL_STATIC_LIBRARIES 可鏈接靜態庫

LOCAL_UNINSTALLABLE_MODULE

LOCAL_UNSTRIPPED_PATH

LOCAL_WHOLE_STATIC_LIBRARIES 指定模塊所需要載入的完整靜態庫(這些精通庫在鏈接是不允許鏈接器刪除其中無用的代碼)

LOCAL_YACCFLAGS

OVERRIDE_BUILT_MODULE_PATH

⑻ Android源碼開發記錄-自定義系統服務和jar包生成

創建文件 IMyApiService
文件路徑 frameworks/base/core/java/android/os/

定義了一個計算和的方法。

在frameworks/base/Android.mk
LOCAL_SRC_FILES最後加入

創建文件 MyApiService.java
文件路徑 frameworks/base/core/java/com/android/server/

實現aidl的介面,計算參數和。

(1)Context添加服務名
文件路徑 frameworks/base/core/java/android/content/Context.java
添加

(2)添加啟動服務
文件路徑 frameworks/base/services/java/com/android/server/SystemServer.java
在startOtherServices方法中添加

創建 MyApiManager.java文件
文件路徑 frameworks/base/core/java/android/app/

文件路徑 frameworks/base/core/java/android/app/ContextImpl
添加registerService

記住make update-api
編譯打包完成後,燒寫新的固件。

jar主要為了在android studio編譯環境中MyApiManager報錯導致編譯不通過問題。
也可以導入frameworks jar包或使用反射。

在源碼目錄packages/app下新建MyJar文件夾
並新建目錄com/myapi/(包名)

在目錄com/myapi/新建文件MyApi.java

具體Android.mk語法這里不做解釋,可以自行查閱

在MyApi目錄下直接運行mm編譯命令(記得先source build/envsetup.sh)
待編譯完成後,jar生成目錄
out/target/common/obj/JAVA_LIBRARIES/Myapi_intermediates/javalib.jar
可更改為其他名稱。

閱讀全文

與androidmk編譯jar相關的資料

熱點內容
如何用app覆蓋全部曲庫 瀏覽:602
變異布林源碼 瀏覽:684
表格加密設置列印區域 瀏覽:437
卡耐基pdf下載 瀏覽:922
現在最流行的單片機 瀏覽:88
機頂盒刷機源碼 瀏覽:985
編碼pdf下載 瀏覽:944
隔壁同學app怎麼 瀏覽:299
c語言宏命令 瀏覽:542
php卡死源碼 瀏覽:574
time庫中的clock函數python 瀏覽:989
cad視覺移動命令怎麼打開 瀏覽:821
安卓java調用python 瀏覽:395
java標准時間 瀏覽:137
華為伺服器湖北渠道商雲主機 瀏覽:30
韓式面部護理解壓視頻 瀏覽:301
pdf換成jpg圖片 瀏覽:897
dh加密演算法 瀏覽:107
安卓手機如何隱藏微信信息提示 瀏覽:632
nodejs解壓縮 瀏覽:262