1. 第一次全编译project(随机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) ($@)" #注意:这里必须以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. 又一次完整的编译project(随意eng/user),下载查看效果

 

6. 重要提示,因为第1步保存的classes.jar是没有经过proguard。流出去非常easy被反编译,请做自己proguard,但请不要把接口proguard,否则编译失败!

版权声明:本文博客原创文章。博客,未经同意,不得转载。

android 如何使用jar替换java代码编译的更多相关文章

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

    Java 代码编译是由 Java 源码编译器来完成,流程图如下所示: Java 字节码的执行是由 JVM 执行引擎来完成,流程图如下所示: Java 代码编译和执行的整个过程包含了以下三个重要的机制: ...

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

    转自:http://blog.csdn.net/cutesource/article/details/5904542 版权声明:本文为博主原创文章,未经博主允许不得转载. Java代码编译是由Java ...

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

    Java代码编译是由Java源码编译器来完成,流程图如下所示: Java字节码的执行是由JVM执行引擎来完成,流程图如下所示: Java代码编译和执行的整个过程包含了以下三个重要的机制: Java源码 ...

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

    Java代码编译是由Java源码编译器来完成,流程图如下所示: Java字节码的执行是由JVM执行引擎来完成,流程图如下所示: Java代码编译和执行的整个过程包含了以下三个重要的机制: Java源码 ...

  5. JVM原理(Java代码编译和执行的整个过程+JVM内存管理及垃圾回收机制)

    转载注明出处: http://blog.csdn.net/cutesource/article/details/5904501 JVM工作原理和特点主要是指操作系统装入JVM是通过jdk中Java.e ...

  6. 如何在Android上编写高效的Java代码

    转自:http://www.ituring.com.cn/article/177180 作者/ Erik Hellman Factor10咨询公司资深移动开发顾问,曾任索尼公司Android团队首席架 ...

  7. 六、Android学习笔记_JNI_c调用java代码

    1.编写native方法(java2c)和非native方法(c2java): package com.example.provider; public class CallbackJava { // ...

  8. Android学习笔记_JNI_c调用java代码

    1.编写native方法(java2c)和非native方法(c2java): package com.example.provider; public class CallbackJava { // ...

  9. java代码编译与C/C++代码编译的区别

    Java编译原理 1.Java编译过程与c/c++编译过程不同 Java编译程序将java源程序编译成jvm可执行代码--java字节码. Java在编译过程中一般会按照以下过程进行: (1)JDK根 ...

随机推荐

  1. angular动画知识点以及代码样例

    原文地址 https://www.jianshu.com/p/4400174072e2 大纲 1.angular动画的相关概念 2.angular动画的绑定方式 3.angular动画代码实例 1.a ...

  2. win32 ag + xargs

    需要使用-0 d:\Apps\AutoHotkey\scripts>ag 2b89eaa_r13_ad1 -l -0|xargs -0 sed -i s/2b89eaa_r13_ad1/2b89 ...

  3. Node.js v10.1.0 Documentation

    Modules Stable 在 Node.js 模块系统中,每个文件都会被当做一个独立的模块.假设有一个名为 foo.js: const circle = require('./circle.js' ...

  4. Java中的${pageContext.request.contextPath}

    之前在drp项目中就接触了${pageContext.request.contextPath}.当时没有注意.这次在java版高校云平台ITOO4.0中再次与之相遇,真是无巧不成书啊.再次遇到.我再置 ...

  5. 修改Linux中的用户名 分类: B3_LINUX 2014-07-24 11:40 440人阅读 评论(0) 收藏

    需要修改2个文件: /etc/hosts /etc/sysconfig/network 然后重启 1.修改/etc/sysconfig/network NETWORKING=yes HOSTNAME= ...

  6. 转载:使用bat命令来快速安装和卸载Service服务

    一般我们在编写完Service服务程序后,都是通过cmd命令提示窗口来安装或卸载服务,但频繁的在cmd窗口中去“拼”文件的路径着实让人“不能忍”.所以,我们需要一钟“更快捷”的方式来进行安装或者卸载操 ...

  7. php实现不用加减乘除号做加法(1、善于寻找资源:去搜为什么位运算可以实现加法,里面讲的肯定要详细一万倍)

    php实现不用加减乘除号做加法(1.善于寻找资源:去搜为什么位运算可以实现加法,里面讲的肯定要详细一万倍) 一.总结 1.善于寻找资源:去搜为什么位运算可以实现加法,里面讲的肯定要详细一万倍 二.ph ...

  8. #import &lt;/usr/include/objc/objc-class.h&gt; not such file or directory问题的解决方法

    近期在使用一些开源的demo,打开后出现这个错误,然后能够把 #import </usr/include/objc/objc-class.h> 改动为以下 #import <objc ...

  9. SQLite单表4亿订单,大数据测试

    [转载] SQLite单表4亿订单,大数据测试 http://www.cnblogs.com/nnhy/p/BigData.html

  10. lower_case_table_names(大小写敏感)

    1 简介    在MySQL中,数据库对应数据目录中的目录.数据库中的每个表至少对应数据库目录中的一个文件(也可能是多个,取决于存储引擎).因此,所使用操作系统的大小写敏感性决定了数据库名和表名的大小 ...