android 如何用jar包代替java代码编译

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,否则编译失败!

时间: 2024-11-07 15:46:10

android 如何用jar包代替java代码编译的相关文章

如何制作Jar包并在android中调用jar包

android制作jar包: 新建android工程,然后右击,点击导出,选择导出类型为Java下的JAR file,在java file specification 中不要选择androidmanifest.xml和res文件夹,就可以了.否则在调用jar包的时候会出现“Error generating final archive: Found duplicate file for APK: AndroidManifes”这个错误. 如果在android用调用jar包,需要在工程的属性的Jav

Android的WebView通过JS调用java代码

做项目时候会遇到我们用WebView 打开一个web,希望这个web可以调用自己的一些方法,比如我们在进一个web页面,然后当我们点击web上的某个按钮时,希望能判断当前手机端是否已经登录,如果未登录,那么就会跳转到登录页面(登陆页面是另一个Activity).这个时候,一个简单的做法就是在按钮动作事件的js上调用java的方法,从而起到判断是否登录,并决定是否跳转到另一个页面. Google的WebView为我们提供了 addJavascriptInterface(Object obj, St

在LINUX上部署带有JAR包的JAVA项目

         在LINUX上部署带有JAR包的JAVA项目 首先eclipse上要装上一个小插件,叫做Fat Jar 点击Fat Jar 红框里选上主类点击Next 如图把勾打上 在该路径下找到jar包 通过ftp协议把jar包放在linux服务器下 进入到jar包路径 输入指令 java -jar XXX.jar 运行成功! 注意!!!!!!!!!!!!!!!! 当你断开服务器连接时,工程会停止! 所以要用下面的指令 指令:nohup java -jar XXX.jar 通过指令ps -e

Eclipse将引用了第三方jar包的Java项目打包成jar文件的两种方法

方案一:用Eclipse自带的Export功能 步骤1:准备主清单文件 “MANIFEST.MF”, 由于是打包引用了第三方jar包的Java项目,故需要自定义配置文件MANIFEST.MF,在该项目下建立文件MANIFEST.MF,内容如下: Manifest-Version: 1.0 Class-Path: lib/commons-codec.jar lib/commons-httpclient-3.1.jar lib/commons-logging-1.1.jar lib/log4j-1.

如何用jar命令对java工程进行打包

转自:http://www.blogjava.net/gosyl/archive/2008/04/18/194107.html 有时候为了更方便快捷的部署和执行Java程序,要把java应用程序打包成一个jar包.而这个基础的操作有时候也很麻烦,为了方便java程序员们能够方便的打包java应用程序,下面对jar命令进行介绍,并举出几个简单例子针对不同情况进行打包.        一. jar命令用法:         在cmd命令窗口下输入jar,回车,就会提示改命令的用法:         

将引用了第三方jar包的Java项目打包成jar文件的两种方法

方案一:用Eclipse自带的Export功能 步骤1:准备主清单文件 “MANIFEST.MF”, 由于是打包引用了第三方jar包的Java项目,故需要自定义配置文件MANIFEST.MF,在该项目下建立文件MANIFEST.MF,内容如下: Manifest-Version: 1.0 Class-Path: lib/commons-codec.jar lib/commons-httpclient-3.1.jar lib/commons-logging-1.1.jar lib/log4j-1.

(转载)Eclipse将引用了第三方jar包的Java项目打包成可执行jar的两种方法

转载自:http://www.cnblogs.com/lanxuezaipiao/p/3291641.html 方案一:用Eclipse自带的Export功能 步骤1:准备主清单文件 "MANIFEST.MF", 由于是打包引用了第三方jar包的Java项目,故需要自定义配置文件MANIFEST.MF,在该项目下建立文件MANIFEST.MF,内容如下: Manifest-Version: 1.0 Class-Path: lib/commons-codec.jar lib/common

Java代码编译和执行的整个过程

Java代码编译是由Java源码编译器来完成,流程图如下所示: Java字节码的执行是由JVM执行引擎来完成,流程图如下所示: Java代码编译和执行的整个过程包含了以下三个重要的机制: Java源码编译机制 类加载机制 类执行机制 Java源码编译机制 Java 源码编译由以下三个过程组成: 分析和输入到符号表 注解处理 语义分析和生成class文件 流程图如下所示: 最后生成的class文件由以下部分组成: 结构信息.包括class文件格式版本号及各部分的数量与大小的信息 元数据.对应于Ja

JVM学习笔记(二)------Java代码编译和执行的整个过程【转】

转自:http://blog.csdn.net/cutesource/article/details/5904542 版权声明:本文为博主原创文章,未经博主允许不得转载. Java代码编译是由Java源码编译器来完成,流程图如下所示: Java字节码的执行是由JVM执行引擎来完成,流程图如下所示: Java代码编译和执行的整个过程包含了以下三个重要的机制: Java源码编译机制 类加载机制 类执行机制 Java源码编译机制 Java 源码编译由以下三个过程组成: 分析和输入到符号表 注解处理 语