一个Android Studio项目包含无活动服务,可通过IMyAidlInterface
(属于com.example.tutorialspoint7.noactivity包)进行通信。
另一个Android Studio项目包含一个仅限活动的应用程序,仅用于测试上述服务(假设使用不同的包,例如com.example.tutorialspoint7.aidlactivity)
没有任何特殊配置,aidlactivity项目不知道noactivity项目,因此,援助文件中对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仍然会“无法解析符号IMyAidlInterface”。
现在我需要做些什么来让它识别文件?
答案 0 :(得分:1)
问题“解决了”。方法如下:
sourceSets { 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 sync the projects
AIDLActivity项目现在可以毫无错误地构建。 : - )
积分将于2013年6月18日由dominik2发布... @ gmail.com:https://code.google.com/p/android/issues/detail?id=56755#c1
更新:我设法通过简单地导入特定的界面而不是包(duh!)来避免明确的完全限定名称丑陋:
一切都很好,但是......为什么我必须在原始服务中更改时不断复制接口文件,而不仅仅是引用它?我希望有一种方法可以在Android Studio(版本2.2.3)中引用(而不是复制)AIDL文件。