一个 Android Studio 项目包含一个无 Activity 服务,可通过 IMyAidlInterface
(属于 com.example.tutorialspoint7.noactivity 包)进行通信。
另一个 Android Studio 项目包含一个仅 Activity 的应用程序,其唯一目的是测试上述服务(假设使用不同的包,例如 com.example.tutorialspoint7.aidlactivity)
如果没有任何特殊配置,aidlactivity 项目不知道 noactivity 项目,因此,aidlactivity 中对 IMyAidlInterface 的任何引用都会得到“无法解析符号 IMyAidlInterface”。
我寻找一种方法让aidlactivity项目了解该AIDL文件,但我发现的所有“解决方案”实际上都是复制文件并添加它的解决方法,如下例所示:https://stackoverflow.com/a/16906355/5556250
因此,我通过添加以下内容来手动调整应用程序的 build.gradle:
android {
compileSdkVersion 24
buildToolsVersion "25.0.2"
defaultConfig {
applicationId "com.example.tutorialspoint7.aidlactivity"
minSdkVersion 16
targetSdkVersion 24
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
sourceSets {
main.java.srcDirs += '../../NoActivity/app/src/main/aidl/com/example/tutorialspoint7/noactivity'
}
}
然后我同步了它,太棒了,它现在是 aidlactivity 项目的一部分:
但是...AIDLActivity 仍然得到“无法解析符号 IMyAidlInterface”。
我现在需要做什么才能让它识别该文件?
最佳答案
问题“已解决”。方法如下:
- 我撤消手动添加到应用的 build.gradle 中:
源集{ main.java.srcDirs += '../../NoActivity/app/src/main/aidl/com/example/tutorialspoint7/noactivity' }
我手动创建了文件夹
..\AIDLActivity\app\src\main\aidl\com\example\tutorialspoint7\noactivity
,然后将“NoActivity”服务项目中的原始IMyAidlInterface.aidl
文件复制到。在 AIDLActivity.java 中添加
import com.example.tutorialspoint7.noactivity;
不起作用!!! 所以...我解决了这个问题只需使用其完全限定名称引用IMyAidlInterface
:
Gradle 同步项目
AIDLActivity 项目现在构建时没有任何错误。 :-)
感谢 [email protected] 于 2013 年 6 月 18 日发表的这篇文章: https://code.google.com/p/android/issues/detail?id=56755#c1
更新:我通过简单地导入特定接口(interface)而不是包来设法避免显式完全限定名称的丑陋(废话!):
现在一切都很好,但是...为什么只要原始服务中的接口(interface)文件发生更改,我就必须不断复制它,而不是仅仅引用它?我希望有一种方法可以在 Android Studio(版本 2.2.3)中引用(而不是复制)AIDL 文件。
关于Android Studio : How to import AIDL file from a different Android Studio project?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43000893/