AndroidStudio项目手动以Library的方式引用另一个AndroidStudio项目及可能遇到的问题

网上各种资料,各种翻菜单,很是繁琐而且容易出错,这里通过直接配置,以Project1以Library的方式引入Project2为例进行说明。首先确保Project1和Project2都能够正常编译通过,这是成功的前提。

Step1:将Project2中的app重命名为module1,复制到Project1中,然后再Project1工程根目录下的settings.gradle添加", ':module1' "。如下:

include ':app',‘module1’

Step2:修改module1的AndroidManifest.xml文件

删掉以下字段

android:versionCode="1"
 android:versionName="1.0">

    <uses-sdk
        android:targetSdkVersion="27" />

以及application节点的

    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"

Step3:修改build.gradle文件

将“apply plugin: 'com.android.application'”修改为:“apply plugin: 'com.android.library'”,并且去掉其中的applicationId字段,然后将compileSdkVersion等几个版本号改成跟Project1下面的app module中定义的一致即可。

最后再Project的build.gradle(Module:app)中添加引用依赖,重启AndroidStudio即可:

implementation project(':tts')

Q1:报错:Resource IDs cannot be used in a switch statement in Android library module。

在Library中的switch case引用R.id的时候报错,因为switch 中要求case是常量,而library中的R文件是变量,随着主工程的引用而改变的。方法:在Android Studio中选中switch,按Option+Return(Mac),Alt+Enter(Windows),选择Replace ‘switch’ witch ‘if’即可。

Q2:如果不同的module有相同名字的layout文件,则可能报错:

 Process: com.baidu.speech.recognizerdemo, PID: 14189
    java.lang.NoSuchFieldError: No static field synthButton of type I in class Lxxx/R$id; or its superclasses (declaration of 'xxxx.R$id' appears in /data/app/xxxx-2/split_lib_slice_6_apk.apk)
        at xxx.MainActivity.initButtons(MainActivity.java:31)
        at xxxxMainActivity.onCreate(MainActivity.java:26)
        at android.app.Activity.performCreate(Activity.java:6102)

猜你喜欢

转载自blog.csdn.net/pang9998/article/details/89041220