请教修改 Android 原生应用的正确方式。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
l8mEQ331

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

  •  
  •   l8mEQ331 Aug 29, 2016 15187 views
    This topic created in 3527 days ago, the information mentioned may be changed or developed.
    最近由于工作的原因要修改一下 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 replies    2016-08-30 09:14:53 +08:00
    dahvlh
        1
    dahvlh  
       Aug 29, 2016   1
    一直都是 IDE 用来改代码 然后源码编译.....在 push 进去 reboot

    IDE 编译比较慢而且....有时候会出现一些蛋疼问题
    bjzhou1990
        2
    bjzhou1990  
       Aug 29, 2016   1
    轻量级修改源码我一般用 Sublime 导入整个项目,现在的 Sublime 代码补全,跳转,快速查找等等都做的挺到位了,如果是大幅度修改就用 IDE
    shanjinwei
        3
    shanjinwei  
       Aug 29, 2016 via Android   1
    我最近也在写 settings 。分享下 源码里打包和编译 studio 修改代码
    bombless
        4
    bombless  
       Aug 30, 2016 via Android
    编译有点慢,也可以共享一台高配的编译服务器,代码提交上去编译,然后 adb 远程连你手机调试
    inmyfree
        5
    inmyfree  
       Aug 30, 2016
    理论上 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  
       Aug 30, 2016
    相同签名可以不用 sync
    直接安装上去就行 反正是测试
    About     Help     Advertise     Blog     API     FAQ     Solana     1035 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 41ms UTC 23:20 PVG 07:20 LAX 16:20 JFK 19:20
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86