Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android 如何用jar包代替java代碼編譯 M

Android 如何用jar包代替java代碼編譯 M

編輯:關於Android編程

 

正文

 

 

時不希望某個模塊的java代碼被人看到,希望是以jar包release,可以按以下方式修改 注意:最終是編譯成jar包的模塊才能這樣做 [KEYWORD] jar java 編譯 [SOLUTION] 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鍵處理一遍。
##Writen by [email protected]
##
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) ($@) #注意:這裡必須以tab鍵開頭
$(hide) rm -f $@ #注意:這裡必須以tab鍵開頭
@mkdir -p $(dir $@) #注意:這裡必須以tab鍵開頭
$(call dexpreopt-one-file,$<,$@) #注意:這裡必須以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,$@) #注意:這裡必須以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,否則編譯失敗!

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved