应该是2016年之前的记录,之前没有写文档记录的习惯,都是随手记录的txt文件,所以没有图片、格式等。甚至现在看来有些地方逻辑不通(可能还因为年少轻狂,有些偏颇的话语),但是这些与现在的我不重要了,所以也不打算再复现、推理,重新编辑等,仅仅是在旧硬盘中发现,删除之前觉得可能还有点价值,记录下来吧。
1:使用正常的项目(在studio中叫module)做library:
@1:修改module为library,编辑build.gradle中apply plugin: ‘com.android.application’改为apply plugin: ‘com.android.library’
@2:去除applicationId。可以直接修改build.gradle,也可以open module settings->Flavors->Application Id
@3:在主项目添加library。可以直接修改build.gradle,
dependencies {
compile fileTree(dir: ‘libs’, include: [’*.jar’])
testCompile ‘junit:junit:4.12’
compile ‘com.android.support:appcompat-v7:23.3.0’
// compile ‘com.google.android.gms:play-services-appindexing:8.1.0’
compile project(‘:zhuo_library’)//这个是添加的。
}
或者open module settings->dependencies按加号->3.module dependency
2:如果library中的Manifest文件也配置了,比如application属性图标等,主activity等。application属性图标会报错,解决办法可以使用:
在Manifest.xml的application标签下添加tools:replace=“android:icon, android:theme”(多个属性用,隔开,并且记住在manifest根标签上加入xmlns:tools=“http://schemas.android.com/tools”,否则会找不到namespace哦),但是activity这些如果不配置就会合并到主Manifest文件,比如出现两个主activity。
先说原因,eclipse和以前版本的android studio默认关闭Manifest Merger(合并)的。
据说eclipse可以在主Project的project.properties里加上manifestmerger.enabled=true 来开启Manifest Merger(合并)。
老版本android studio据说可以在build.gradle根标签上加上useOldManifestMerger true 关闭Manifest Merger(合并),但是新版不行了,该方法取消了。
所以现在关闭的方法只有在节点设置tools:node=“replace”
<application
tools:node=“replace”
或者也可以在manifest节点添加,这样library的manifest就不会合并到主项目了。
更具体的Manifest Merger细节参考:
http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger。
http://blog.csdn.net/maosidiaoxian/article/details/42671999
http://www.open-open.com/lib/view/open1455598198026.html
3:依然存在的问题:点击运行后可以按照apk但是无法启动,看下面的run命令里:
adb shell am start -n “com.zhuo.tong.wifi.adb/com.zhuo.tong.MainActivity” -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
正确的应该:
adb shell am start -n “com.zhuo.tong.wifi.adb/com.zhuo.tong.wifi.adb.MainActivity” -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
不知道为什么还启动库的主activity而不启动主项目的。目前只能手动在手机上点开应用。要不就去掉库中的activity。