Android 源码中编译Android studio工程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/naruto_ping/article/details/78225928

参考:http://blog.csdn.net/u011913612/article/details/72732177

Android studio 工程导入源码中编译步骤:(以OkhttpDemo工程为例)
1、package/apps目录下新建文件夹(如MyOkhttpDemo),并在MyOkhttpDemo目录下新建src文件夹
2、将OkhttpDemo工程目录中的AndroidManifest.xml文件拷贝到MyOkhttpDemo目录
3、将OkhttpDemo工程目录中的res文件夹拷贝到MyOkhttpDemo目录
4、将OkhttpDemo工程目录中的com文件夹(即包名目录)拷贝到MyOkhttpDemo目录的src文件夹里
5、将OkhttpDemo工程目录中libs文件夹拷贝到MyOkhttpDemo目录里(jar包都放在libs目录下)
6、在MyOkhttpDemo目录下新建一个Android.mk文件


整个工程目录如下:
vendor\amlogic\apps\MyOkhttpDemo
libs文件夹
src文件夹
res文件夹
Android.mk文件
AndroidManifest.xml文件


其中Android.mk文件内容如下:

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := optional

LOCAL_SRC_FILES := $(call all-java-files-under, src)

LOCAL_PACKAGE_NAME := GsonDemo
LOCAL_PRIVILEGED_MODULE := true
LOCAL_CERTIFICATE := platform
# LOCAL_SDK_VERSION := current
LOCAL_DEX_PREOPT := false

LOCAL_RESOURCE_DIR := vendor/amlogic/apps/GsonDemo/res

ifeq ($(TARGET_BUILD_APPS),)
LOCAL_RESOURCE_DIR += frameworks/support/v7/appcompat/res
else
LOCAL_RESOURCE_DIR += prebuilts/sdk/current/support/v7/appcompat/res
endif

LOCAL_STATIC_JAVA_LIBRARIES := \
    android-support-v7-appcompat \
    android-support-v4 \
    libokhttp \
    libokio

LOCAL_AAPT_FLAGS := \
    --auto-add-overlay \
    --extra-packages android.support.v7.appcompat

include $(BUILD_PACKAGE)

include $(CLEAR_VARS)

LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := \
    libokhttp:libs/okhttp-3.9.0.jar \
    libokio:libs/okio-1.13.0.jar

include $(BUILD_MULTI_PREBUILT)

也就是说引入jar包主要依赖的是 LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES 和 LOCAL_STATIC_JAVA_LIBRARIES

如果需要引入so库,只需要把so库放置到libs目录下,然后在Android.mk中通过LOCAL_SHARED_LIBRARIES变量完成引用即可。


编译命令
. build/envsetup.sh
lunch
cd package/apps/MyOkhttpDemo
mm


adb install 安装apk出现
Failure [INSTALL_FAILED_DEXOPT]

log信息:
10-13 16:22:54.477 30849-30849/? E/dex2oat: Failed to open dex from file descriptor for zip file ‘/data/app/com.skynoon.myokhttpdemo-1/base.apk’: Failed to open dex file ‘/data/app/com.skynoon.myokhttpdemo-1/base.apk’ from memory: Unrecognized version number in /data/app/com.skynoon.myokhttpdemo-1/base.apk: 0 3 7
10-13 16:22:54.714 352-352/? E/installd: DexInv: — END ‘/data/app/com.skynoon.myokhttpdemo-1/base.apk’ — status=0x0100, process failed

出现这个问题的原因:
是在7.1平台上编译,然后把apk安装到6.0或者5.0系统上

在7.1平台(release_n_7.1_20170804)下可以编译,但是无法安装。(编译的java版本为1.8)
在6.0平台(release_s905_m_20160907)下可以编译,可以安装,并正常运行在6.0和5.0系统(编译的java版本都是1.7)

阅读更多
换一批

没有更多推荐了,返回首页