V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
l8mEQ331
V2EX  ›  Android

请教修改 Android 原生应用的正确方式。

  •  
  •   l8mEQ331 · 2016-08-29 19:23:41 +08:00 · 11178 次点击
    这是一个创建于 3010 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近由于工作的原因要修改一下 Settings 这个应用。我已经下载 Android5.1 的源代码,并且可以在模拟器上运行,包括修改 Settings 后,应用到模拟器上也完成了。

    现在的疑问是如何更方便的修改,并且应用到模拟器上。

    如果是直接对源码进行修改,会进行下述步骤:

    1. mmm packages/app/Settings
    2. adb remount
    3. adb sync

    感觉时间挺长,尤其是"adb sync"似乎特别慢。并且我对代码进行修改也只能使用 vim 或者其它文本编辑器,并不能用 IDE 进行辅助。

    如果考虑使用 IDE ,现在我可以编译成功的是使用 Android Studio 。但是配置也很麻烦,我修改了以下部分:

    1. 引入源码环境中的 library ,比如"framework.jar", "core-libart.jar"等等( jar 名是根据文件夹进行命名的,便于管理)。
    2. 手动删除 strings.xml 中重名的 string 。
    3. 对 gradle 进行配置,使得优先使用 libs 中的依赖。

    其中 2 比较麻烦,除了要手动删除外,还需要删除其它语言的 values ,否则每一种语言都要手动删除根本不可能。感觉这样对源码修改了太多,就算只保留中文,英文,那我还需要禁用切换系统语言的选项。

    即便如此, Android Studio 也不能够直接安装 Settings.apk ,每次修改后我还需要按照下面的步骤进行操作:

    1. 使用 Android Studio 运行一次代码,虽然会失败,但是可以生成 apk
    2. adb remount
    3. adb shell
    4. rm /system/priv-app/Settings/Settings.apk (2,3,4 是为了删除上一次安装的包)
    5. adb push Settings.apk /system/priv-app/Settings/ (手动将编译好的包传到模拟器)

    如果按照这个步骤来做,使用 IDE 感觉更麻烦了,还不如直接修改源码。并且从代码管理上来说,直接将 packages/app/Settings 放到 SVN 显得更清晰,不容易出错。

    所以想请问大家有什么更好的建议吗?
    6 条回复    2016-08-30 09:14:53 +08:00
    dahvlh
        1
    dahvlh  
       2016-08-29 19:37:38 +08:00   ❤️ 1
    一直都是 IDE 用来改代码 然后源码编译.....在 push 进去 reboot

    IDE 编译比较慢而且....有时候会出现一些蛋疼问题
    bjzhou1990
        2
    bjzhou1990  
       2016-08-29 20:13:43 +08:00   ❤️ 1
    轻量级修改源码我一般用 Sublime 导入整个项目,现在的 Sublime 代码补全,跳转,快速查找等等都做的挺到位了,如果是大幅度修改就用 IDE
    shanjinwei
        3
    shanjinwei  
       2016-08-29 21:23:59 +08:00 via Android   ❤️ 1
    我最近也在写 settings 。分享下 源码里打包和编译 studio 修改代码
    bombless
        4
    bombless  
       2016-08-30 00:48:45 +08:00 via Android
    编译有点慢,也可以共享一台高配的编译服务器,代码提交上去编译,然后 adb 远程连你手机调试
    inmyfree
        5
    inmyfree  
       2016-08-30 09:09:11 +08:00
    理论上 AS 是可以直接运行的,但是有个问题就是 Setting 你是 make 出来的, key 应是系统那个 test.key 或者 release.key 但是这个和 AS 的证书不一样,记得是两个文件,一个是.pem,一个是 pk8 文件,具体案列见尾部,所以你可以通过 gradle 配置自动签名任务,然后在运行,可以解决无法直接运行的


    附:http://www.cnblogs.com/wanqieddy/p/3556060.html

    demo :

    signapk.jar 与 eclipse export 插件默认赋予程序一个 DEBUG 权限的签名

    signapk.jar 包含有系统权限( system api, permission ),而 eclipse export 插件默认赋予程序一个 DEBUG 权限的签名。

    D:\work_feixun\GalleryBack>java -jar signapk.jar platform.x509.pem platform.pk8 D:\work_feixun\Gallery2\bin\Gallery.apk Gallery_signed.apk
    注:
    signapk.jar 位于 out/host/linux-86/framework/signapk.jar
    platform.x509.pem platform.pk8 位于 build/target/product/security/platform.x509.pem, platform.pk8
    Gallery.apk 的生成,先在 eclipse 中对 project->clean ,然后 run ->android application.在 bin 目录下会生成 Gallery.apk 。
    最后
    D:\work_feixun\GalleryBack>java -jar signapk.jar platform.x509.pem platform.pk8 D:\work_feixun\Gallery2\bin\Gallery.apk Gallery_signed.apk

    这样包含有系统权限的签名 apk 就完成了。
    yukiww233
        6
    yukiww233  
       2016-08-30 09:14:53 +08:00
    相同签名可以不用 sync
    直接安装上去就行 反正是测试
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1065 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 22:41 · PVG 06:41 · LAX 14:41 · JFK 17:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.