`
如沐春风的小妮
  • 浏览: 69350 次
  • 性别: Icon_minigender_2
  • 来自: 西安
社区版块
存档分类
最新评论

Android SDK Add-on Configure, Compile and Release

阅读更多

找来找去太麻烦了,还是放自己博客自己看,大家看都比较爽啦~~

----------------------------------华丽丽的转载线----------------------------------

 

SDK Add-on 是一个比较小众的话题,一是通常厂商不会公开自己的add-on,二是即便公开了,应用开发者也很少使用。所以通常是厂商自己的技术团队自娱自乐,框架团队抽取公用的控件,制成一个 add-on,然后公布给自家的应用程序开发团队。

由于是小众的,所以网络中关于这方面的资料比较少。这几天由于工作原因,我有幸接触到 Add-on,因此把这方面的知识进行了汇总,整理成如下内容。这些知识来自于我对 sample 示例的理解,并经过项目实践验证,我竭力保证无误,但差错之处也可能存在,如发现,请指正。

以下内容将分成若个步骤:

  1. 添加模块;
  2. 添加资源文件;
  3. 加入编译脚本;
  4. 发布;

在阅读下面内容前,先假设是对 $ANDROID_HOME/device/sample 进行修改。

一、添加模块(Add Module)

在自己 product-name 目录下建立 frameworks 文件夹,从 sample 中拷贝 Android.mk 文件到 frameworks。

依照 sample 的方式,在 frameworks 路径下,建立 PlatformLibrary 文件夹,再次从 sample/frameworks 中拷贝 Android.mk 文件,并将其中的 LOCAL_MODULE 和 LOCAL_DROIDDOC_OPTIONS 修改为自己中意的名字。–这里值得注意的是,LOCAL_MODULE 变量被定义两次,第一次是 library,第二次是 document。

依照 sample/frameworks/com.example.android.platform_library.xml 的形式创建自己的 XML 文件,文件名称、XML 内容中 name 和 file 保持和 LOCAL_MODULE(library) 一致。

完成上述操作之后,建立 java 文件夹,并将自己创建的源文件(java)放入到其中,这里不再赘述。

二、添加 Overlay(Add Resoruce)

代码中可能需要访问图片、字符串等资源,但是这些在原有的 Android 中没有,因此需要想办法自行加入,Android 对此提供了两种方式。

第一种就是直接在 $ANDROID_HOME/framework/base/core/res/res 下进行操作,添加文件,追加字符串。这种方式虽然简单,但是破坏了原有的“纯洁性”,因此不予推荐,在第三节修改编译脚本中我采用了第二种方式。

第二种方式就是使用 overlay。在 product-name 目录下建立 overlay 文件夹,依照 framework 的结构建立各级目录,例如想添加图片,可以先依次建立 base/core/res/res/drawable,然后将图片置于其中,同样可以建立 layout 等文件夹。

如果要添加字符串或者 style 资源,就要稍微复杂一点,需要使用 add-resource 来让系统“明白”新添加的内容。

 

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
    <add-resource type="string" name="numwheel_year" />
    <!-- Strings for number wheel -->
    <string name="numwheel_year">年</string>
</resources>
 

如果没有 add-resource,则会遇到这样的信息:Resource at numwheel_year appears in overlay but not in the base package; use to add.

完了以后,就可以用使用 com.android.internal.R 来访问这些资源了。

三、加入编译脚本(Add build script)

在自己 product-name 目录下建立 sdk_addon 文件夹,并依照 sample/sdk_addon 分别拷贝 manifest.xml 和 hardware.xml,注意 manifest.xml 中的内容必须要根据之前第一步的变更同步修改。

接下来最关键,也是最容易出错的环节到了,那就是修改自己 product 的 mk 文件,需要修改 PRODUCT_PACKAGES、PRODUCT_COPY_FILES、DEVICE_PACKAGE_OVERLAYS 的值,定义 PRODUCT_SDK_ADDON_NAME、PRODUCT_SDK_ADDON_COPY_FILES、 PRODUCT_SDK_ADDON_COPY_MODULES和PRODUCT_SDK_ADDON_DOC_MODULE。修改和定义的区别就在于, 前者使用”+=”,后者使用“:=”。这些变量的值可以参照sample示例。

由于 sample 的示例中没有出现 DEVICE_PACKAGE_OVERLAYS,所以我这里特别解释一下它的作用,除了刚才为 add-on 增加资源以外,它还起到的作用就是替换掉原来的framework中的资源,比如图片等等,惟一的要求就是必须建立和原来图片位置相同的路径。和 add-on 不同的是,如果你是替换原来资源,那么是不用 add-resource 的。DEVICE_PACKAGE_OVERLAYS 的值就是 overlay 文件夹的路径,不包含 $ANDROID_HOME,到 overlay 一级即可。

完成了修改以后,使用 make PRODUCT-product-name-sdk_addon 进行编译。当然也可以直接执行 make sdk_addon,但是需要注意在此之前,你需要使用 chooseproduct 指定 product-name。执行完毕以后,会得到一个 zip 文件,这个就是 add-on 了。

四、发布(Relase)

完成上面的环节以后,剩下临门一脚了。所谓发布,就是通过诸如 HTTPD 一类的 HTTP SERVER 将资源公布出去。从 http://httpd.apache.org 下载 httpd,如何安装以及修改监听端口可参看其 document,在此不予赘述。

现在把刚才生成的 zip 文件,放置到 htdoc 目录下。并且创建一个 repository.xml,其内容和形式参看 https://dl-ssl.google.com/android/repository/repository.xml,我把它删减一下得到以下内 容:

<sdk:sdk-repository
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdk="http://schemas.android.com/sdk/android/repository/2">
 
    <sdk:add-on>
        <sdk:name>Google APIs</sdk:name>
        <sdk:api-level>3</sdk:api-level>
        <sdk:vendor>Google Inc.</sdk:vendor>
        <sdk:revision>03</sdk:revision>
        <sdk:description>Android + Google APIs</sdk:description>
        <sdk:desc-url>http://developer.android.com/</sdk:desc-url>
        <sdk:uses-license ref="android-sdk-license" />
        <sdk:archives>
            <sdk:archive os="any">
                <sdk:size>34908058</sdk:size>
                <sdk:checksum type="sha1">1f92abf3a76be66ae8032257fc7620acbd2b2e3a</sdk:checksum>
                <sdk:url>google_apis-3-r03.zip</sdk:url>
            </sdk:archive>
        </sdk:archives>
        <sdk:libs>
            <sdk:lib>
                <sdk:name>com.google.android.maps</sdk:name>
                <sdk:description>API for Google Maps.</sdk:description>
            </sdk:lib>
        </sdk:libs>
    </sdk:add-on>
 
    <sdk:license type="text" id="android-sdk-license">
        This is the Android Software Development Kit License Agreement.
    </sdk:license>
</sdk:sdk-repository>
 

接下来的事情,就是替换掉里面的 Google 信息为自己,大部分可以从它们的名称中理解其含义,例如 size 是指文件大小,你可以使用ls –l来查看文件大小。checksum 则要麻烦一些,执行 sha1sum ZIP.zip,即使用 sha1 对刚才生成 zip 文件生成校验码。

修改完成以后,通过浏览器访问 http://IP-address:port/repository.xml,确认是否 OK。确认以后,打开 Android SDK and AVD Manager,点击左侧 Available Packages,选择 “Add Add-on Sites” 填入URL,接下来的安装就不费口舌了。完成以后,你可以在 sdk 下的 add-ons 目录下看到刚刚安装的 add-on。

捎带提一下,应用开发方面使用该 add-on 时,调整工程的 Project Build Target 设定即可。

分享到:
评论

相关推荐

    4.2.7Configure Router-on-a-Stick Inter-VLAN Routing

    4.2.7 Packet Tracer - Configure Router-on-a-Stick Inter-VLAN Routing Cisco Packet Tracer 思科模拟器 正确答案文件 可直接上交正确答案文件 本答案版权归mewhaku所有,严禁再次转载!!! Copyright @...

    15.6.1-packet-tracer---configure-ipv4-and-ipv6-static-and-default-routes_zh-CN (1).pka

    15.6.1-packet-tracer---configure-ipv4-and-ipv6-static-and-default-routes_zh-CN (1).pka

    Android代码-Wake On Lan

    You will need to configure your computer to enable Wake On Lan first. Wake On Lan Help Please refer to the following links to help you get started with Wake On Lan. A mini-tutorial for Windows/Debian:...

    6.8.1 Packet Tracer - Configure NAT for IPv4

    6.8.1 Packet Tracer - Configure NAT for IPv4 Cisco Packet Tracer 思科模拟器 正确答案文件 可直接上交正确答案文件 本答案版权归mewhaku所有,严禁再次转载!!! Copyright @mewhaku 2022 All Rights ...

    编译ffmpeg(ffmpeg6.0+android-ndk-r25c)生成的动态链接库.so文件

    在开始编译之前,确保已安装Android Studio,配置好NDK路径,并安装必要的构建工具如Git、CMake、Android SDK Platform Tools等。 4. **获取FFmpeg源码** 使用Git克隆FFmpeg的最新稳定分支,例如: ``` git ...

    Python-2.7.2-xcompile.patch

    执行`./configure`,然后`make`,最后`sudo make install`。 这个补丁可能解决了以下问题: - **硬件兼容性**:可能是为了支持新的CPU指令集或者优化在特定处理器上的性能。 - **编译器兼容性**:可能修复了与特定...

    curl-7.83.1源代码编译的android库,android-ndk-r20b编译64位

    ./configure --prefix=/usr/local/android --host aarch64-linux-android --with-pic --disable-shared make -j4;make install 在wsl下面用ndk20编译的, aarch64-linux-android29-clang++ aarch64-linux-android-...

    2.7.2-packet-tracer---configure-single-area-ospfv2---physical-mode_zh-CN.pka

    2.7.2-packet-tracer---configure-single-area-ospfv2---physical-mode_zh-CN.pka

    ffmpeg学习笔5 编译ffmpeg(Win10+android-ndk-r22)生成的arm64-v8a动、静态库

    ffmpeg学习笔5 编译ffmpeg(Win10+android-ndk-r22)生成的arm64-v8a动、静态库 https://blog.csdn.net/aggs1990/article/details/124577714 CSDN审核可能较慢,如无法下载,可以过段时间再回来看下 仅供相关爱好者...

    android-recyclerview-v7-25.0.0.jar

    - **导入依赖**:首先,需要将`android-recyclerview-v7-25.0.0.jar`添加到Eclipse项目的libs目录下,并将其标记为库(右键点击项目 -&gt; Build Path -&gt; Configure Build Path -&gt; Libraries -&gt; Add Jars)。...

    最新版android sdk安装包完整版

    根据提供的文件信息,我们可以深入探讨有关Android SDK的相关知识点。下面将详细介绍Android SDK的基本概念、重要性、组成部分以及如何获取和安装最新版的Android SDK。 ### Android SDK简介 Android SDK...

    python-3.2.2-xcompile.patch

    在本文中,我们将深入探讨Python 3.2.2版本中的“xcompile”补丁,即“python-3.2.2-xcompile.patch”。这个补丁是针对Python 3.2.2源代码的修改,旨在优化编译过程,提升在不同硬件平台上的兼容性和性能。 首先,...

    openCV4.6.0+android-ndk-r22-windows-x86_64编译的arm64-v8a动、静态库

    openCV4.6.0+android-ndk-r22-windows-x86_64编译的arm64-v8a动、静态库 https://blog.csdn.net/aggs1990/article/details/124527556 CSDN审核可能较慢,如无法下载,可以过段时间再回来看下 仅供相关爱好者交流使用...

    android-support-v7-appcompat(创建Android工程缺失的支持文件).zip

    1. 下载“android-support-v7-appcompat.jar”文件,这通常可以从Android SDK Manager中获取,或者直接从网络上找到。 2. 将jar文件复制到你的工程项目的“libs”目录下。 3. 右键点击项目,选择“Build Path” -&gt; ...

    AndroidStudio+SDK

    - **Android SDK Add-ons**:例如Google API,提供额外的功能支持。 - **Android SDK System Images**:用于创建模拟器的虚拟机镜像。 - **安装与配置**: - 下载最新版本的Android SDK可以通过Android Studio...

    android 5.L最新源码及关联方法

    右击目标工程,Build Path -&gt; Configure Build Path -&gt; Library选项下 -&gt; Android 4.1 -&gt; android.jar -&gt; Source attachment --&gt; Edit --&gt; External Folder 选择这个文件目录C:\Program Files\Android\android-sdk\...

    play-java-compile-di-example.zip_java_play

    标题中的"play-java-compile-di-example.zip_java_play"暗示了这是一个关于使用Java语言在Play框架中实现编译时依赖注入(Dependency Injection, DI)的示例项目。Play框架是一个流行的开源Web应用框架,它基于Scala...

    Android代码-phonegap-android-plugin-examples

    Simply right click on ./libs and select Build Path &gt; Configure Build Path. Choose Java Build Path and select the Libraries tab. Click add Jars and select phonegap.jar. If you are building an Android ...

    openssl-android-master-master

    ./Configure android-armeabi-v7a no-shared ``` 这里的`no-shared`参数表示我们将编译静态库。 2. 定制编译:根据需求,你可能还需要自定义编译选项,比如禁用某些不适用的功能或优化性能。 三、编译OpenSSL ...

    FFmpeg-full-SDK-3.2

    ffmpeg FULL SDK V3.2 (2008-04-12) -------------------------------------------------------------------------------- 继ffmpeg工程组(http://www.ffmpeg.com.cn)2006年5月5日发布ffmpeg+x264 SDK V...

Global site tag (gtag.js) - Google Analytics