android 如何用jar包代替java代碼編譯

來源:互聯網
上載者:User

標籤:android   os   ar   java   for   檔案   sp   on   代碼   

1. 先完整編譯一遍工程(任意eng/user),然後儲存要替換java代碼的jar包,在alps/out/target/common/obj/JAVA_LIBRARIES/xxx__intermediates目錄下的
classes.jar
javalib.jar
 
2. 請將以下檔案儲存成java_library_prebuilt.mk,並放在alps/build/core/目錄下面:
注意:有11處需要tab鍵開頭(make文法對命令需要tab鍵開頭,但網站不支援tab鍵),請儲存成檔案後開啟編輯,將11處(以下有標誌)重新用tab鍵處理一遍。
##
LOCAL_SRC_FILES := 
ifdef LOCAL_IS_HOST_MODULE
  $(error $(LOCAL_PATH): Just for target java library)
endif
LOCAL_MODULE_SUFFIX := $(COMMON_JAVA_PACKAGE_SUFFIX)
LOCAL_MODULE_CLASS := JAVA_LIBRARIES
LOCAL_BUILT_MODULE_STEM := javalib.jar
intermediates.COMMON := $(call local-intermediates-dir,COMMON)
full_classes_jar := $(intermediates.COMMON)/classes.jar
common_javalib.jar := $(intermediates.COMMON)/$(LOCAL_BUILT_MODULE_STEM)
LOCAL_INTERMEDIATE_TARGETS += $(full_classes_jar) $(common_javalib.jar)
ifneq (true,$(WITH_DEXPREOPT))
  LOCAL_DEX_PREOPT :=
else
ifeq (,$(TARGET_BUILD_APPS))
ifndef LOCAL_DEX_PREOPT
LOCAL_DEX_PREOPT := true
endif
endif
endif
ifeq (false,$(LOCAL_DEX_PREOPT))
LOCAL_DEX_PREOPT :=
endif
include $(BUILD_SYSTEM)/base_rules.mk
$(cleantarget): PRIVATE_CLEAN_FILES += $(intermediates.COMMON)
$(full_classes_jar) : $(LOCAL_PATH)/classes.jar | $(ACP)
 $(call copy-file-to-target) #注意:這裡必須以tab鍵開頭
$(common_javalib.jar) : $(LOCAL_PATH)/$(LOCAL_BUILT_MODULE_STEM) | $(full_classes_jar) $(ACP)
 $(call copy-file-to-target) #注意:這裡必須以tab鍵開頭
ifdef LOCAL_DEX_PREOPT
dexpreopt_boot_jar_module := $(filter $(LOCAL_MODULE),$(DEXPREOPT_BOOT_JARS_MODULES))
ifneq ($(dexpreopt_boot_jar_module),)
dexpreopted_boot_jar := $(DEXPREOPT_BOOT_JAR_DIR_FULL_PATH)/$(dexpreopt_boot_jar_module)_nodex.jar
$(LOCAL_BUILT_MODULE) : $(dexpreopted_boot_jar) | $(ACP)
 $(call copy-file-to-target) #注意:這裡必須以tab鍵開頭
dexpreopted_boot_odex := $(DEXPREOPT_BOOT_JAR_DIR_FULL_PATH)/$(dexpreopt_boot_jar_module).odex
built_odex := $(basename $(LOCAL_BUILT_MODULE)).odex
$(built_odex) : $(dexpreopted_boot_odex) | $(ACP)
 $(call copy-file-to-target) #注意:這裡必須以tab鍵開頭
else
built_odex := $(basename $(LOCAL_BUILT_MODULE)).odex
$(built_odex): PRIVATE_MODULE := $(LOCAL_MODULE)
$(built_odex) : $(DEXPREOPT_BOOT_ODEXS)
$(built_odex) : $(common_javalib.jar) | $(DEXPREOPT) $(DEXOPT)
 @echo "Dexpreopt Jar: $(PRIVATE_MODULE) ([email protected])" #注意:這裡必須以tab鍵開頭
 $(hide) rm -f [email protected] #注意:這裡必須以tab鍵開頭
 @mkdir -p $(dir [email protected]) #注意:這裡必須以tab鍵開頭
 $(call dexpreopt-one-file,$<,[email protected]) #注意:這裡必須以tab鍵開頭
$(LOCAL_BUILT_MODULE) : $(common_javalib.jar) | $(ACP) $(AAPT)
 $(call copy-file-to-target) #注意:這裡必須以tab鍵開頭
ifneq (nostripping,$(LOCAL_DEX_PREOPT))
 $(call dexpreopt-remove-classes.dex,[email protected]) #注意:這裡必須以tab鍵開頭
endif
endif
else
$(LOCAL_BUILT_MODULE) : $(common_javalib.jar) | $(ACP)
 $(call copy-file-to-target) #注意:這裡必須以tab鍵開頭
endif
 
3. 在alps/build/core/config.mk裡添加:
BUILD_JAVA_LIBRARY_PREBUILT:= $(BUILD_SYSTEM)/java_library_prebuilt.mk
 
4. 刪除對應的java代碼及對應的Android.mk,然後在目前的目錄建立新的Android.mk,並複製第1步備份的2隻檔案到Android.mk旁邊(注意,檔案名稱不能修改,否則無法識別!!!),新的Android.mk編寫如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := services
LOCAL_MODULE_PATH := $(TARGET_OUT_JAVA_LIBRARIES)
include $(BUILD_JAVA_LIBRARY_PREBUILT)
 
5. 重新完整的編譯工程(任意eng/user),下載查看效果
 
6. 重要提示,由於第1步儲存的classes.jar是沒有經過proguard,流出去很容易被反編譯,請自行做proguard,但是請不要把介面proguard,否則編譯失敗!

android 如何用jar包代替java代碼編譯

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.