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. WP8.1开发:简单的天气预报应用

    今天小梦给大家分享一个简单的天气预报应用源码:调用的是百度API.整个应用都没有什么难点.只是一个简单的网络请求和json数据处理.在WP8.1有小娜的情况下,天气预报应用还有意义吗?我认为还是有点意 ...

  2. php资源集

    php资源集 一.php资源网站 1.php中文网(js特效,模板,软件工具下载,课程) www.php.cn js特效下载_js特效代码_js特效大全-php中文网免费下载站http://www.p ...

  3. 基于 Android NDK 的学习之旅-----JNI LOG 打印

    程序都是调出来的. 下面我介绍下JNI层的log打印方法的使用,类似与Android sdk提供的log 1.Android 应用层 MainActivity.java 主要功能代码 a)       ...

  4. 妈蛋:kinMaxShow轮播图异常,WebUploader图片上传坑爹,图片被压缩了

    今天晚上在改造轮播图. 原来的代码是这样的: <div> <img src="${static}/image/index/banner/`.jpg" /> ...

  5. Java中sleep()与wait()区别

    学习时正好碰到这两个方法,就查阅相关资料,并通过程序实现,进行区别一下: 1.每个对象都有一个锁来控制同步访问,Synchronized关键字可以和对象的锁交互,来实现同步方法或同步块.sleep() ...

  6. ajax 发送请求无法重定向问题

    原因: ajax请求默认就是不支持重定向的,因为它是局部刷新,不重新加载页面. 解决方案: 开发中需要多处使用重定向的情况下,大多都是在Spring mvc 的拦截器中,或过滤器中使用,此方法是在sp ...

  7. 【vs调试】PDB 文件:每个开发人员都必须知道的

    [vs调试]PDB文件:每个开发人员都必须知道的 GDB:The GNU Project Debugger, 将会包含代码中符号(自定义变量, 数据类型), 还有函数调用或类引用的关联性, 有了pdb ...

  8. WPF随笔(九)--使用路径动画模拟管道流体流向

    原文:WPF随笔(九)--使用路径动画模拟管道流体流向 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/lordwish/article/detail ...

  9. 编写Linux中sh文件执行时出现莫名字符的问题

    今天在项目中需要编写一个sh,执行一些初始化操作,然后调取原来的执行文件,但是我在操作中主要到了首行需要加入#!/bin/sh 的表达式,但是在执行时总是报错,原因是每次执行,表达式后边都会添加一个莫 ...

  10. matlab 高级函数 —— colfilt/blockproc (图像)矩阵的分块处理

    colfilt 执行功能与 blockproc/nlfilter 类似,但效率更高. B = colfilt(A,[m n],block_type,fun),block_type:distinct/s ...