• 以最小代价解决同一apk不同资源定制共存问题


    今天在公司上班,因项目需求需要,同一套源码只是修改软件图标,以及服务器访问ip,端口等基础配置,编译出不同的定制版本。因为apk的唯一性是由工程包名来标记的,包名相同的apk不能够在同一台设备上安装,这就造成了项目演示不便,那么同事就抛出这个问题给我,并且也给我提供了几个方案:

    方案一:修改包名,这无疑是最直接的,但却是工作量最大的,改完AndroidManifest.xml下package="包名"配置,还要修改整个项目的类导包,以及R.java的重新生成。

    结果:我没有尝试,直接否定了。

    方案二:在同一工程中建两个包,一个是主项目包,另一个是定制部分,AndroidManifest.xml下用定制包命名,但经考虑这个方案只解决了普通类的导包问题,并不能解决R.jave的路径,而R却是大量的在工程中引用的类。

    结果:相比方案一进步不大,也否定了。

    方案三:建立两个工程,一个主工程,保持原来的代码结构,改成library工程,通过工程依赖来实现项目关联。

    具体实施:Base工程为非定制工程,改为library工程(只在eclipse中有用),新建A工程添加依赖Base工程,去掉所有res及其子目录下的文件(目的是为了防止定制工程中的资源文件生成的R.java与Base工程不同),将所有需要定制的资源放到Base工程内引用。然后将Base工程的AndroidManifest.xml复制一份到A工程中,修改package为A工程包名,然后将Base工程中用到的类库libs贴到A工程下并且添加buildpath,新建入口Activity使入口Activity在完成定制工作后(比如修改Base工程中的服务器配置),跳转到Base工程的入口Activity。大功告成,成功在同一台设备安装运行多个相同源码apk。

  • 相关阅读:
    nodejs利用windows API读取文件属性(dll)
    nodejs调用delphi编写的dll
    Ubuntu 安装配置Jenkins
    electron将网站打包成桌面应用
    NW.js将网站打包成桌面应用
    Jenkins配置邮件SMTP(使用QQ邮箱)
    Jenkins搭建Nodejs自动化测试
    Ubuntu 安装node.js
    使用superobject 解析Json数据
    使用superobject 新建Json数据(数组)
  • 原文地址:https://www.cnblogs.com/changewu/p/3337800.html
Copyright © 2020-2023  润新知