您的位置:首页 > 移动开发 > Android开发

Android源码问题集锦

2016-05-26 14:46 561 查看

ThroubleShoot

1.如何编译出android.jar

make sdk


输出jar路径:

Package SDK Stubs: out/target/common/obj/PACKAGING/android_jar_intermediates/android.jar

Package SDK: out/host/linux-x86/sdk/android-sdk_eng.hl_linux-x86.zip

如果出现如下错误

build/core/main.mk:644: * : Module ‘bluetooth-health’ in PRODUCT_PACKAGES has nothing to install!

使用make PRODUCT-sdk-sdk来编译,成功

2.如何进行系统签名

1.

2.

3.

3.如何下载openjdk-8

sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-8-dbg
sudo update-alternatives --config java
sudo update-alternatives --config javac


注:最终openjdk-8的安装路径是:/usr/lib/jvm

注:jre只是java running environment ,jdk是java开发工具包

4.如何添加厂商

5.如何更改输出目录

export ANDROID_PRODUCT_OUT=out


6.如何更改Java heap Size

A_LIBRARIES/framework_intermediates/dex-dir/classes.dex.rsp

Out of memory error (version 1.2-rc4 ‘Carnac’ (298900 f95d7bdecfceb327f9d201a1348397ed8a843843 by android-jack-team@google.com)).

GC overhead limit exceeded.

Try increasing heap size with java option ‘-Xmx’.

在不清理构建的情况下,可以通过export变量的方式来修改,如下

export JACK_SERVER_VM_ARGUMENTS=”-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4096m”

out/host/linux-x86/bin/jack-admin kill-server

out/host/linux-x86/bin/jack-admin start-server

修改源码目录下prebuilts/sdk/tools/jack-admin文件的JACK_SERVER_VM_ARGUMENTS变量,

添加-Xmx4096M(这个根据你自己的情况),接着make clean,make -j48重新构建

7.sdk.atree问题

could not locate source file: ${OUT_DIR}/target/common/obj/PACKAGING/android-support-multidex_intermediates/android-support-multidex.jar

make sdk的时候,出现这个错误。因为我的输出路径是绝对的(/opt/out),所以应该改为相对的就行了。这个问题调试了一天.我不知道google干嘛了,

查看build/tools/atree/atree.cpp,跟踪源码得知对于sdk.atree文件每一行,左边的那一个项都默认加上一个头部来测试是否存在该文件.

files.cpp关键函数:

int locate(FileRecord* rec, const vector<string>& search){
...
//遍历所有头部
for (vector<string>::const_iterator it=search.begin();
it!=search.end(); it++) {
string full = path_append(*it, rec->sourceName);//默认加头部
struct stat st;
err = stat(full.c_str(), &st);
//找到目标文件
if (err == 0) {
rec->sourceBase = *it;
rec->sourcePath = full;
rec->sourceMod = st.st_mtime;
rec->sourceSize = st.st_size;
rec->sourceIsDir = S_ISDIR(st.st_mode);
return 0;
}
}
//都找不到就GG
fprintf(stderr, "%s:%d: couldn't locate source file: %s\n",
rec->listFile.c_str(), rec->listLine, rec->sourceName.c_str());
return 1;
}


sdk.atree:

...
development/tools/emulator/skins/QVGA          platforms/${PLATFORM_NAME}/skins/QVGA
development/tools/emulator/skins/WQVGA432      platforms/${PLATFORM_NAME}/skins/WQVGA432
development/tools/emulator/skins/WQVGA400      platforms/${PLATFORM_NAME}/skins/WQVGA400
development/tools/emulator/skins/HVGA          platforms/${PLATFORM_NAME}/skins/HVGA
${OUT_DIR}/target/common/obj/.../android-support-customtabs.jar    extras/android/support/customtabs/libs/android-support-customtabs.jar
...


意思是把文件(HEAD+development/tools/emulator/skins/QVGA),放到out目录/platforms/PLATFORMNAME/skins/QVGA问题来了(HEAD+{OUT_DIR}/target/common/…),这..就悲剧了.假如我的out目录是/opt/out..绝对路径那么就肯定会错啦.要么你的out目录就是相对的就行了

HEAD+/opt/out…

8.特定厂商特性详细描述

PRODUCT_NAME 最终用户将看到的完整产品名,会出现在“关于手机”信息中。

PRODUCT_MODEL 产品的型号,这也是最终用户将看到的。

PRODUCT_LOCALES 该产品支持的地区,以空格分格,例如:en_GB de_DE es_ES fr_CA。

PRODUCT_PACKAGES 该产品版本中包含的 APK 应用程序,以空格分格,例如:Calendar Contacts。

PRODUCT_DEVICE 该产品的工业设计的名称。

PRODUCT_MANUFACTURER 制造商的名称。

PRODUCT_BRAND 该产品专门定义的商标(如果有的话)。

PRODUCT_PROPERTY_OVERRIDES 对于商品属性的定义。

PRODUCT_COPY_FILES 编译该产品时需要拷贝的文件,以“源路径 : 目标路径”的形式。

PRODUCT_OTA_PUBLIC_KEYS 对于该产品的 OTA 公开 key 的列表。

PRODUCT_POLICY 产品使用的策略。

PRODUCT_PACKAGE_OVERLAYS 指出是否要使用默认的资源或添加产品特定定义来覆盖。

PRODUCT_CONTRIBUTORS_FILE HTML 文件,其中包含项目的贡献者。

PRODUCT_TAGS 该产品的标签,以空格分格。

9.如何阅读android源码

通过AndroidStudio可以方便快捷阅读源码。

首先确保已经编译通过,检查
out/host/linux-x86/framework/idegen.jar
是否存在。

不存在就
mmm development/tools/idegen


接着回到源码根目录,执行
. development/tools/idegen/idegen.sh
,就会出现android.ipr,android.iml两个文件

打开studio,导入工程,选择android.ipr文件

可以参考README

10.jar的jdk版本编译

Unsupported version number [51.0] for class format

由于jar是jdk1.7编译的,在jdk1.6无法使用



11.aidl的添加

LOCAL_SRC_FILES += \

src/com/rsbc/launcher/libs/media/IMediaPlaybackService.aidl

12.libs的添加

LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := \

butterknife-bc:libs/butterknife8-0-1.jar \

gson-bc:libs/gson-2.5.jar \

okhttp-bc:libs/okhttp-2.3.0.jar \

photoview-bc:libs/photoview.jar \

android-support-v4f:libs/android-support-v4.jar

LOCAL_STATIC_JAVA_LIBRARIES := android-support-v4f butterknife-bc gson-bc okhttp-bc photoview-bc

13.修改framework去除底部虚拟键

1.通过修改framework/base/core/res/res/values/dimens.xml,把navigation_bar_heightnavigation_bar_langscape修改为0

2.重新编译,先到framework/base/core/res执行mm命令,再到framework/base执行mm

14.focusInTouchMode模式无法第一时间响应

15.SystemServer

添加系统服务可以在frameworks/base/services/java/com/android/server/SystemServer文件中添加

16.error: insufficient permissions for device: verify udev rules.

参考udev规则

SUBSYSTEM==”usb”, ATTRS{idVendor}==”0502”, MODE=”0666”

bash括号详解

推荐地址学习

文章推荐

1.Andorid系统介绍

Nexus5编译集锦
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: