安卓 导入旧项目作为新项目依赖 的经验汇总

安卓 导入旧项目作为新项目依赖 的经验汇总,第1张

概述androidstudio的导入过程详见https://blog.csdn.net/lslsd/article/details/107560890依赖项目的AndroidManifest.xml里的默认启动activity,也就是<intent-filter><actionandroid:name="android.intent.action.MAIN"/>

androID studio的导入过程详见

https://blog.csdn.net/lslsd/article/details/107560890

依赖项目的AndroIDManifest.xml里的默认启动activity,也就是

            <intent-filter>                <action androID:name="androID.intent.action.MAIN" />                <category androID:name="androID.intent.category.LAUNCHER" />            </intent-filter>

部分最好注释掉,不然可能出现两个图标

依赖项目的build.gradle里
1.出现报错:Could not get unkNown property for ‘applicationVariants’ for BuildType…
有用androID.applicationVariants.all 的要换成
androID.libraryVariants.all
2.apply plugin: 'com.androID.application’要换成
apply plugin: ‘com.androID.library’
3.applicationID …要去掉

当遇到 依赖项目和当前项目有可能图标冲突时,在AndroIDManifest.xml的application标签里加上这一句可能就能解决冲突问题
tools:replace=“androID:icon,androID:label,androID:theme,androID:name”

The application Could not be installed: INSTALL_Failed_CONFliCTING_PROVIDER …
可能是因为
<provIDer
androID:name=“androIDx.core.content.fileProvIDer” androID:authoritIEs=“XXX”


authoritIEs后面的部分和已经安装到当前设备的另一个app有冲突,极有可能 就是被导入作为依赖的 旧项目

据说comileSdkVersion、buildToolsversion、minSdkVerion、targetSdkVersion这些版本号两个build.gradle文件最好设置成一样的,我的两个项目都一致就不存在这个问题了

当然在主项目的build.gradle的dependencIEs里
implementation project(":[依赖项目名称]")
一下不要忘了

出现报错:
“错误: 需要常量表达式”
R.ID.XXX 识别不了
很遗憾查了很多方法后得到一个同样的答案------如果涉及到R类中的常量,只能把switch语句转化为if语句,一般用switch的地方语句都比较多,转换为if排版时真的难看,如果各位有办法在某个项目作为library后 涉及R文件ID时 仍能保留住switch语句,请在评论里告知吧,万分感谢!!!

大致原因好像是
switch里的case值必须是常数,而在library module的R文件里ID的值不是final类型的,但是主module的R文件里的ID值是final类型的,所以主module里可以用资源ID作为case值而library module却不能。
详见
http://tools.android.com/tips/non-constant-fields

今天学习了模块化开发进行统一管理的方式(主要是使用gradle.propertIEs文件),在这里做一下总结

gradle.propertIEs文件里定义 minSdkVersion, targetSdkVersion,versionCode
versionname,compileSdkVersion, buildToolsversion 等参数的对应变量

例如

#最小SDK版本MIN_SDK_VERSION=15#目标设备SDK版本TARGET_SDK_VERSION=26#SDK编译版本COMPILE_SDK_VERSION=29#BUILD_TOolS_VERSION=29.0.3#所有模块版本号VERSION_CODE=100#所有模块版本名字VERSION_name=1.0#是否是ApplicationIS_APPliCATION=false

这里设置的IS_APPliCATION参数是控制部分本来作为library的module是否变成可单独运行的module,这个参数非常重要,有些module想单独调试时,就可以通过IS_APPliCATION参数设置其可单独运行,这样就可以方便很多,不用再连带启动整个project的无关内容,再一步步跳转到需要调试的module
楼主的设定是IS_APPliCATION为true时将某些 本来作为library的module 变成可以单独运行的module,后面就不再赘述了

在各个module里的build.gradle文件里,让这几个参数赋值gradle.propertIEs文件里的这几个对应变量,注意非String型的要进行类型转换

例如

androID {    compileSdkVersion COMPILE_SDK_VERSION.toInteger()    buildToolsversion BUILD_TOolS_VERSION    defaultConfig {        if (IS_APPliCATION.toBoolean()) {            applicationID "com.example.XXX..."        }        minSdkVersion MIN_SDK_VERSION.toInteger()        targetSdkVersion TARGET_SDK_VERSION.toInteger()        versionCode VERSION_CODE.toInteger()        versionname VERSION_name        ...    }}
build.gradle文件里通过判断IS_APPliCATION的值,确定是否设置applicationID,作为library的module不能设置applicationID

例如

if (IS_APPliCATION.toBoolean()) {            applicationID "com.example.drawingapplication"        }
build.gradle文件里通过判断IS_APPliCATION的值,确定apply的是application还是library

例如

if (IS_APPliCATION.toBoolean()) {    apply plugin: 'com.androID.application'} else {    apply plugin: 'com.androID.library'}

build.gradle文件里的androID.applicationVariants.all {}对应application型module, library型的module需要改成androID.libraryVariants.all {},如果module里本来没有这部分内容就不必理会,这部分一般是控制输出的apk的名称,library型的module一般也用不到

build.gradle文件里通过判断IS_APPliCATION的值,确定是否implementation project(’:XXX’),也就是添加依赖,IS_APPliCATION为true时,有些library型的module变成了application型的module,自然就不能再作为依赖,如果仍旧implementation这些module,自然会报错,这一步也是必要的

例如

if (!IS_APPliCATION.toBoolean()) {        implementation project(':XXX')    }
build.gradle文件里的 sourceSets部分通过判断IS_APPliCATION的值,确定应用哪个AndroIDManifest.xml文件,这里需要说明的是我们需要编写两个AndroIDManifest.xml,一个就是默认的不用管,另一个需要在module作为library时使用,可以新建一个manifest文件夹进行存放,manifest文件夹放在main文件夹下即可
因为作为application型的module和作为library型的module的AndroIDManifest.xml文件还是有所不同的,比如library型的module的AndroIDManifest.xml就不用设置自启动的activity,最好尽可能地简化
sourceSets部分内容如下

例如

sourceSets {        main {            if (IS_APPliCATION.toBoolean()) {                manifest.srcfile "src/main/AndroIDManifest.xml"            } else {                manifest.srcfile "src/main/manifest/AndroIDManifest.xml"            }        }    }

涉及内容较多,后续如有发现遗漏之处会继续补充
这样一通 *** 作后,基本就可以通过修改gradle.propertIEs里的IS_APPliCATION参数来控制module是作为library还是独立运行了
并且可以通过gradle.propertIEs这一个单独的文件 一键设置所有module的compileSdkVersion等参数,也避免了module集成project时 因为这些参数不统一 而导致的项目无法构建 的问题

楼主现在也开始有意让自己习惯这种 用gradle.propertIEs来集中控制module的项目构建方式,无论是单module还是多module的项目,开始可能有些繁琐,但终究会遇到凸显其意义的情景吧

总结

以上是内存溢出为你收集整理的安卓 导入旧项目作为新项目依赖 的经验汇总全部内容,希望文章能够帮你解决安卓 导入旧项目作为新项目依赖 的经验汇总所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1052698.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存