Android 源码下载、编译以及编译自己的apk

一、Android源码下载与编译

基于VMware 7.0 ubuntu10.04 64位

1、Git工具。

    若无则安装   ~$ sudo apt-get install git-core gnupg

2、Java  sdk 。

     ~sudo add-apt-repository ppa:ferramroberto/java

     ~$ sudo apt-get update
     ~$ sudo apt-get install sun-java6-jre sun-java6-plugin
     ~$ sudo apt-get install sun-java6-jdk
     另:接受安装条件时,tab键切换焦点。
3、安装其他需要的命令
     ~$ sudo apt-get install flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl
4、调试工具
   ~ $ sudo apt-get install valgrind
5、安装repo工具
     修改/etc/hosts文件,在文件末尾加上(地址有可能会变,先ping一下再加)
     74.125.237.1 dl-ssl.google.com
     74.125.31.82 www.googlesource.com
     74.125.31.82 android.googlesource.com
     203.208.46.172 cache.pack.google.com
     59.24.3.173 cache.pack.google.com

      安装repo:
    ~$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
    ~$ chmod a+x ~/bin/repo
   另外一个地址  :  
$ curl " http://php.webtutor.pl/en/wp-content/uploads/2011/09/repo" > ~/bin/repo
    修改文件.bashrc
    ~$ vi .bashrc
   在最后一行加入 export PATH=$PATH:~/bin
   保存,执行 ~$ ./.bashrc
6、创建下载目录android并初始化repo
    ~$ mkdir android
    ~$ cd android/
    初始化
  ~/android$ repo init -u https://android.googlesource.com/platform/manifest
    ~/android$ repo init -u https://android.googlesource.com/platform/manifest -b android-2.3.1_r1
   下载(慢慢等吧)
     ~/android$ repo sync
    注意:最好是把自己创建的下载目录下面的.repo 里面manifest.xml属性fetch改为:fetch= "https://android.googlesource.com/"
7、编译(这里也慢慢等)
     ~/android$ make
注意:
出现错误,首先,全部赋予可执行权限

      错误:find: `frameworks/base/frameworks/base/docs/html': No such file or directory
        find: `out/target/common/docs/gen': No such file or directory
      此错误忽略,不影响编译

      错误:/bin/bash: prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-gcc: No such file or directory
      解决方法:apt-get install lib32z1-dev

      错误:/usr/include/gnu/stubs.h:7: fatal error: gnu/stubs-32.h: No such file or directory
      解决方法: ~/android$ sudo apt-get install libc6-dev-i386

     错误:external/clearsilver/cgi/cgi.c:22: fatal error: zlib.h: No such file or directory

     解决方法:~/androidsudo apt-get install zlib1g-dev


   错误:/usr/bin/ld: cannot find -lncurses

     解决方法:sudo apt-get install lib32ncurses5-dev


     错误:/usr/bin/ld: cannot find -lstdc++
     collect2: ld returned 1 exit status
     make: *** [out/host/linux-x86/obj/EXECUTABLES/acp_intermediates/acp] Error 1

     解决方法:~/androidsudo ln -s /usr/lib32/libstdc++.so.6 /usr/lib32/libstdc++.so

                   ubuntu 10.04,默认的gcc版本为4.4,gcc-4.4太严格,有可能要从gcc-4.4降到gcc- 4.3
                   1、安装gcc-4.3
                   $ sudo apt-get install gcc-4.3 g++-4.3
                   2、修gcc相关链接
                   $ cd /usr/bin
                   $sudo ln -snf gcc-4.3 gcc
                   $sudo ln -snf g++-4.3 g++
                   $sudo ln -snf cpp-4.3 cpp
                   3、64bit系统需装如下包
                   $ sudo apt-get install g++-multilib g++-4.3-multilib

    中间或许还有其他各种错误,遇到了自己百度去。

   编译成功会有如下输出
     Target system fs image:
     out/target/product/generic/obj/PACKAGING/systemimage_intermediates/system.img
     Install system fs image: out/target/product/generic/system.img
     Target ram disk: out/target/product/generic/ramdisk.img
     Target userdata fs image: out/target/product/generic/userdata.img
     Installed file list: out/target/product/generic/installed-files.txt

8、运行
      启动模拟器,运行$ emulator
       错误:No command 'emulator' found, did you mean:骂人
      Command 'qemulator' from package 'qemulator' (universe)
      emulator: command not found
      解决方法:编辑 /etc/environment
 加入环境变量
      PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:usr/lib/jvm/java-6-sun-1.6.0.26/bin:/home/nanlus2/android/out/host/linux-x86/bin"
      CLASSPATH="/usr/lib/jvm/java-6-sun-1.6.0.26/lib"
      JAVA_HOME="usr/lib/jvm/java-6-sun-1.6.0.26"
      ANDROID_PRODUCT_OUT="/home/nanlus2/android/out/target/product/generic"
注:/home/nanlus2/android为源码目录
保存,重启。运行$ emulator
       错误:SDL init failure, reason is: No available video device尴尬
      解决方法:$ apt-get install ia32-libs lib32stdc++6

再次运行$ emulator 
成功羡慕


二、编译自己的apk
1、编写完成工程。
2、编写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 := helloworld
      LOCAL_CERTIFICATE := platform
      include $(BUILD_PACKAGE)
      # Use the folloing include to make our test apk.
      include $(call all-makefiles-under,$(LOCAL_PATH))

3、编译
拷贝工程至packages/apps/下
      ~$ cp -ri helloworld   ~/android/packages/apps/helloworld
        进入目录  ~/...../helloworld$ mm
        编译成功:out/target/product/product_name/system/app/helloworld.apk
4、运行
安装在机子上运行之。 adb install xxx/helloworld.apk

      在这里也可以一起打包,
      $ make snod
然后,再运行,启动模拟器即可。大笑

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
最值得信赖和最安全的Android优化器,垃圾文件清理器,速度增强器,省电工具和免费的防病毒应用程序,拥有超过7.4亿部手机。 Clean Master(Boost和AppLock)有助于加速Ram并清理垃圾和缓存文件!Clean Master(Boost&AppLock)还使用#1防病毒引擎提供实时保护,并通过AppLock功能保护私人数据。 您是否遇到以下问题? ◆您的设备一直处于滞后状态并处于静止状态 ◆您没有足够的空间来拍摄更多照片或安装应用程序 ◆您的电池开始比以往更快地耗尽电量 ◆您的设备过热并且需要冷却 ◆您想锁定照片和消息从窥探和嘈杂的朋友 Clean Master(Boost&App-lock)要点: ★ 垃圾文件清理删除垃圾文件,残留文件和缓存以释放存储空间,提高速度并改善Android设备和SD卡的性能。保持手机清洁快速。 ★MEMORY BOOST 增强并加速您的Android手机,释放内存(RAM)并节省更多电量。我们的1 Tap Boost和Game Boost功能使您可以轻松地直接从主屏幕进行优化。 ★通知清洁程序 防止在通知切换中显示干扰和烦人的通知。让您的手机远离垃圾桶通知! ★CPU COOLER 通过停止过热的应用程序来降低温度并降低CPU使用率,并延长电池寿命! ★ 抗病毒第七次被AV-TEST排名第一!专业质量的防病毒服务可在8秒内扫描设备,比其他付费防病毒应用程序快500%。扫描系统,预安装和用户安装的应用程序,以使设备免受病毒,木马,漏洞,广告软件和间谍软件的侵害。通过清除设备上的个人信息来保护您的隐私安全。 ★APPLOCK AppLock可以锁定Facebook,SMS,联系人,图库或您选择的任何其他应用程序。使用自己的AppLock PIN码或图案保护您的隐私。保护您的隐私比以往任何时候都容易! ★ 电池保护程序使用电池保护程序,只需1次点击即可分析电池状态并休眠运行中的应用程序,以节省电量,延长电池寿命。 ☆iSWIPE iSwipe使您可以快速访问其他应用程序和工具,而不必返回主屏幕。 ☆APP MANAGER 卸载不需要的应用程序或bloatware并备份重要的应用程序或bloatware。某些具有root用户权限的设备将能够将应用程序移至SD卡。 ☆游戏加速器 在启动游戏时自动将您的游戏速度提高30%以上。 ☆CHARGE MASTER Charge Master显示估计的剩余充电时间并在充电时保护您的设备。您也可以在充电时收到通知。 ☆私人浏览 私人浏览可以立即清除您的浏览历史记录,并防止他人浏览数据间谍。 Clean Master,最好的android清洁剂和助推器,Android手机的安全防护装置,非常适合快速清理和防病毒。希望您在下载和使用我们的应用程序后享受手机的最高性能。 帮助打击欺骗性广告 Cheetah Mobile(以前称为KS Mobile)致力于打击误导性下载。您可以在此处找到有关此问题的完整官方政策:http : //www.cmcm.com/about/promotion-policy.html 如果您遇到这些广告之一,则可以帮助我们将其删除。请将广告的链接和屏幕截图发送到cm_feedback@cmcm.com。非常感谢。 什么是新的: 我们一直在努力提高Clean Master的性能和用户体验。 有了您,我们才能变得更好。 添加SafeConnect VPN –快速安全的VPN代理,以保护您的在线隐私 更强大的扫描和防病毒引擎 优化产品速度和性能 修复一些已知的错误 VIP功能: 无广告 VIP反馈 预定清理 预定防病毒 高级功能: 包括所有VIP功能
框架内部支持中/英文(其他语言只需要在对应的string.xml中取相同的名字即可)内部对话框背景图片、按钮支持自定义了查看版本中的Log只需要过滤AppUpdate开头的Tag重点: 如果没有设置downloadPath则默认为getExternalCacheDir()目录,同时不会申请[存储]权限!目录编译问题效果图功能介绍DownloadManagerUpdateConfiguration使用步骤Demo下载体验版本更新记录结语编译问题因为适配了Android O的通知栏,所以依赖的v7包版本比较高appcompat-v7:26.1.0使用的gradle版本为gradle-4.1-all,所以建议使用Android Studio 3.0及以上的版本打开此项目效果图     功能介绍 支持断点下载 支持后台下载 支持自定义下载过程 支持 设备 >= Android M 动态权限的申请 支持通知栏进度条展示(或者自定义显示进度) 支持Android N 支持Android O 支持中/英文双语 支持自定内置对话框的样式 使用HttpURLConnection下载,未集成其他第三方框架更加详细的文档参阅此处《AppUpdate API文档》DownloadManager:配置文档初始化使用DownloadManager.getInstance(this)属性描述默认值是否必须设置context上下文nulltrueapkUrlapk下载地址nulltrueapkNameapk下载好的名字nulltruedownloadPathapk下载的位置getExternalCacheDir()falseshowNewerToast是否提示用户 "当前已是最新版本"falsefalsesmallIcon通知栏的图标(资源id)-1trueconfiguration这个库的额外配置nullfalseapkVersionCode更新apk的versionCode (如果设置了那么库中将会进行版本判断下面的属性也就需要设置了)1falseapkVersionName更新apk的versionNamenullfalseapkDescription更新描述nullfalseapkSize新版本的安装包大小(单位M)nullfalseauthorities兼容Android N uri授权应用包名falseUpdateConfiguration:配置文档属性描述默认值notifyId通知栏消息id1011notificationChannel适配Android O的渠道通知详情查阅源码httpManager设置自己的下载过程nullbreakpointDownload是否需要支持断点下载trueenableLog是否需要日志输出trueonDownloadListener下载过程的回调nulljumpInstallPage下载完成是否自动弹出安装页面trueshowNotification是否显示通知栏进度(后台下载提示)trueforcedUpgrade是否强制升级falseonButtonClickListener按钮点击事件回调nulldialogImage对话框背景图片资源(图片规范参考demo)-1dialogButtonColor对话框按钮的颜色-1dialogButtonTextColor对话框按钮的文字颜色-1所有版本:点击查看使用步骤第一步: app/build.gradle进行依赖implementation 'com.azhon:appupdate:1.7.3'第二步:创建DownloadManager,更多用法请查看这里示例代码DownloadManager manager = DownloadManager.getInstance(this); manager.setApkName("appupdate.apk")         .setApkUrl("https://raw.githubusercontent.com/azhon/AppUpdate/master/apk/appupdate.apk")         .setSmallIcon(R.mipmap.ic_launcher)         //可设置,可不设置         .setConfiguration(configuration)         .download();第三步:兼容Android N 及以上版本,在你应用的Manifest.xml添加如下代码<--! android:authorities="${applicationId}"  这个值必须与DownloadManager中的authorities一致(不设置则为应用包名)--> <provider     android:name="android.support.v4.content.FileProvider"     android:authorities="${applicationId}"     android:exported="false"     android:grantUriPermissions="true">     <meta-data         android:name="android.support.FILE_PROVIDER_PATHS"         android:resource="@xml/file_paths_public" /> </provider>第四步:资源文件res/xml/file_paths_public.xml内容<?xml version="1.0" encoding="utf-8"?> <paths>     <external-path         name="app_update_external"         path="/" />     <external-cache-path         name="app_update_cache"         path="/" /> </paths>兼容Android O及以上版本,需要设置NotificationChannel(通知渠道);库中已经写好可以前往查阅NotificationUtil.java温馨提示:升级对话框中的内容是可以上下滑动的哦!如果需要实现自己一套下载过程,只需要继承BaseHttpDownloadManager 并使用listener更新进度public class MyDownload extends BaseHttpDownloadManager {}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值