最近工作中遇到了需要将一个完整的androidstudio项目移植到自己项目中去,因为考虑到自己已经有的项目和需要引入的项目资源都很庞大,为了方便代码管理,决定将需要引入的项目作为一个module导入到自己现有项目中来。
操作步骤:
1,在主项目下新建一个module随意命名,然后将需要导入的项目的src,res,AndroidManifest等文件全部copy过来(这一步可能有其他更好方法),然后将build.gradle文件里的 apply plugin: 'com.android.application' 改为 apply plugin: 'com.android.library' 然后将compileSdkVersion,buildToolsVersion,minSdkVersion,targetSdkVersion 都改为与主项目一样就好,去掉applicationid也是必须,其他配置可以不变就好,主要是去掉原来的作为application的一些配置。还要将AndroidManifest文件里面application下面的Launcher等属性都去掉,只注册activity等其他需要注册的组件就好!(这一步很简答,不详细多说)
2,在主项目中compile一下你建好的module,试着运行一下,可能会出现错误,,
这个问题很简单,是因为你原项目用了switch (view.getId()),当作为module的时候view的id变成了非常量,而switch下面的case需要常量。所以没说的,改为if()else()去判断就好了!改完了之后再尝试去跑一下,你会发现又有新的问题,
Warning:Exception while processing task java.io.IOException: Can't write [F:\save\HG-appsoft\app\build\intermediates\transforms\proguard\GOOGLEPLAY\debug\jars\3\1f\main.jar] (Can't read [F:\save\HG-appsoft\app\build\intermediates\classes\GOOGLEPLAY\debug(;;;;;;**.class)] (Duplicate zip entry [com/******/camplayer/HiCamPlayer$HiCamPlayerStateListener.class]))这个问题看起来会让人一脸懵逼,本人各种百度,google也没有得出具体准确解法,花费了一天多时间,最后突然发现HiCamPlayerStateListener这个类是有重复的,原来在我主项目中就已经有这个类了,我点进去查看发现同事之前有将module下的这部分代码放进主项目,知道了之后将所有重复了类文件全部删除。然后再程序,这次就顺利了,安装APP成功。
3,到了这里,将一个独立androidstudio项目添加到自己项目中去的想法已经算是实现了,点击看看module代码的功能是否正常运行吧!一测试又发现了问题,居然报出了NullPointerException ,通过log查看发现在我的某一个类中通过findviewbyid找到的控件对象是null。。刚开始以为这个是简单问题好坚决,一番调试,查找问题原因,发现这个null实在没道理,最后将代码拷出来写了简单demo测试发现是正常的,最后我使用了一个神奇的解决办法,那就是将layout文件名称换了一个,原封不动的复制了xml里面的代码,然后就正常了。不会为空了,最后我估计问题应该还是跟上面那个问题一样,有相同的资源id,导致拿到了错误的资源对象,所以会为空!
ok,,到这里就都完了,很早之前就有想法写Blog,一直到现在才真正实现,以后再接再厉吧!