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,versionCodeversionname,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,后面就不再赘述了
例如
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的项目,开始可能有些繁琐,但终究会遇到凸显其意义的情景吧
总结以上是内存溢出为你收集整理的安卓 导入旧项目作为新项目依赖 的经验汇总全部内容,希望文章能够帮你解决安卓 导入旧项目作为新项目依赖 的经验汇总所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)