我目前正在将Eclipse应用程序迁移到Android Studio.此应用正在使用应用内结算功能.
我的主要问题是编译项目和aidl文件(我想你们都使用这个文件)
我收到此错误消息:
Gradle: error: cannot find symbol class IInAppBillingService
Gradle: error: package IInAppBillingService does not exist
Run Code Online (Sandbox Code Playgroud)
因此,在一些教程之后,我将此文件从com.mypackage.billing移动到src/main/aidl(请参阅此参考)
但是,就像我那样,我收到这条消息:
Gradle:任务执行失败':xxxxxxxxxxx:compileDebugAidl'.
无法运行命令:(...)C:\ Users\xxxx\AndroidStudioProjects\xxxxxxProject\xxxxxxx\src\main\aidl\IInAppBillingService.aidl:45接口IInAppBillingService应在名为com\xxxxxxxx\billing\IInAppBillingService的文件中声明.aidl.
该消息显然与我上面链接的Google错误页面中的帖子相矛盾.
任何人都过分使这个aidl文件工作,可以帮助我吗?
请注意,我遵循的一些链接:
我在我的电脑上安装了Android Studio.我创建了一个新项目,但下面给出了错误.我能做什么?
Error:Execution failed for task ':app:compileDebugAidl'.
> aidl is missing
Run Code Online (Sandbox Code Playgroud)
我的Android Studio版本是1.1.0
.
这是我的build.gradle
档案:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.1.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
}
}
Run Code Online (Sandbox Code Playgroud)
而且:
apply plugin: 'com.android.application'
android {
compileSdkVersion 21
buildToolsVersion "24.1.2"
defaultConfig {
applicationId "com.example.jo.cloning_a_login_screen"
minSdkVersion 13
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
buildTypes { …
Run Code Online (Sandbox Code Playgroud) android aidl android-studio build.gradle android-gradle-plugin
要了解AIDL
在android中,我想要一个真实的例子,意味着我们需要使用的开发场景AIDL
.
通过阅读Android Docs ...它让我感到困惑和许多问题,所以很难为我阅读整篇文档,任何人都可以帮助我
是用于与手机外部通信.
或与不同的应用程序通信,(为什么我们需要与其他应用程序通信)
他们在docs中说什么样的服务
Environment:
Mac OS 10.10.3
Android studio:1.2.11
grandle:2.2.1
Run Code Online (Sandbox Code Playgroud)
日志:
Information:Gradle tasks [:generateDebugSources, :generateDebugTestSources]
:preBuild
:preDebugBuild
:checkDebugManifest
:prepareDebugDependencies
:compileDebugAidl FAILED
Error:Execution failed for task ':compileDebugAidl'.
> aidl is missing
Run Code Online (Sandbox Code Playgroud)
// Top-level build file where you can add configuration options common to all sub-projects/modules.
import org.gradle.internal.os.OperatingSystem
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.0.0'
}
}
allprojects {
repositories {
jcenter()
}
}
String SDK_DIR = System.getenv("ANDROID_HOME")
if(SDK_DIR == null) {
Properties props = new Properties()
props.load(new FileInputStream(project.rootProject.file("local.properties")))
SDK_DIR = …
Run Code Online (Sandbox Code Playgroud) 我正在编写一个无线电流媒体应用程序.我通过使用AIDL接口技术与服务进行通信,将"无线电播放"作为远程服务运行.但我真的不明白一件事.
AIDL接口参数值中的"out"是什么?
像这样:
String doSomething(in String a, out String[] b);
Run Code Online (Sandbox Code Playgroud)
我理解"在"中,即从活动调用方法时将数据发送到远程.
什么是"out",为什么我们需要在同一方法中"in"和"out"?在哪种情况下使用它们("out/inout")?为什么String[]
"出局"?
请帮忙..
问题1:
我正在学习Android服务,经常看到这样的代码:
private ISampleService.Stub sampleServiceIf = new ISampleService.Stub(){}
Run Code Online (Sandbox Code Playgroud)
什么是.Stub
?
问题2:
我检查了" AIDL ",但我想知道为什么我们必须使用它而不是Java接口文件?
我看到一些SO帖子讨论了如何以程序方式结束电话,例如,这个.是的,人们专注于结果,但没有人真正解释它为什么起作用的原因?
我尝试了代码,效果很好.但是我想了解更多关于底下发生的事情的细节?为什么通过创建ITelephony.aidl,ITelephony
我们的项目中暴露了android隐藏的内部接口?我们如何创建ITelephony.aidl和自动生成的java(/gen/ITelephony.java)链接到 android的ITelephony
界面?是否只是因为名称匹配(包名和援助文件名)?
TelephonyManager tm = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);
Class c = Class.forName(tm.getClass().getName());
Method m = c.getDeclaredMethod("getITelephony");
m.setAccessible(true);
//Why does the android internal ITelephony interface is exposed after created the ITelephony.aidl?
com.android.internal.telephony.ITelephony telephonyService = (ITelephony) m.invoke(tm);
telephonyService.endCall();
Run Code Online (Sandbox Code Playgroud) 所以我为Android操作系统编写了一个服务和一个活动.
我的服务在它自己的进程中运行,因此我的活动和服务之间的所有通信都是通过IPC进行的.我使用标准的Android .aidl机制.
到目前为止一切正常.但是,AIDL使用"throws RemoteException"生成所有方法存根,因此我必须处理它们.
我对整个Android源代码做了快速的grep,并且只发现了三个抛出此异常的情况.这些是我不联系的不同服务.
我也检查了C源代码,因为理论上可以使用JNI接口生成RemoteExceptions.没有出现任何问题.
我的印象是每个人都像这样处理它们:
try {
mService.someMethodCall (someArguments);
} catch (RemoteException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
这不是可靠的代码,我不想在我的代码库中使用这样的东西.
除此之外:我试图通过IPC自己抛出一个RemoteException,我得到的只是一个堆栈跟踪和系统日志消息,它告诉我还不支持异常.我的应用程序从未看到异常,抛出异常的服务最终处于一个非常奇怪的状态(半途工作):-(
问题是:
是否会抛出这些异常?
有没有人见过这样的try-catch块捕获RemoteException?
难道它们不存在而且我们只是被迫处理它们,因为"抛出RemoteException"是死代码还是AIDL编译器内部的遗留问题?
免责声明:我还没有阅读完整的源代码.我使用Grep来查找RemoteException的出现,所以我可能因为不同的空格使用而错过了一些.
我正在开发一个包含大量个人用户信息的应用程序 - 例如Facebook联系人等等......现在,我希望能做的事情之一(并且已经完成,非常有效)使用Android的内置进程间通信协议(AIDL)向"第三方"应用程序开放应用程序的一部分.到现在为止还挺好.
这就是问题所在:因为我们参与处理了大量的个人信息,所以我们必须非常小心谁能够访问它,不能访问它; 具体来说,只有"受信任"的应用程序才能够这样做.因此,执行此操作的自然方法是在我们声明服务的AndroidManifest.xml文件中使用自定义权限.我的问题是这样的:我希望能够实现签名级保护(类似于正常的"签名"权限级别),但有一点点:
我不仅希望使用我们的内部签名签名的应用程序能够访问服务.我希望能够在运行时构建一个"可信签名"列表(或者如果有更好的方法,那么可能还有其他时间?)能够根据可信密钥列表检查传入请求.
这将以与我认为的正常"签名"权限级别相同的方式满足安全性约束 - 只有"可信密钥列表"上的程序才能访问服务,并且密钥很难欺骗(如果可能的话)? ) - 但还有额外的好处,我们不必签署每个使用API和我们内部团队密钥的应用程序.
这在Android中是否可行?如果是这样,有什么特殊要求吗?
谢谢
我想开发一个由GCMIntentService组成的库项目,它执行GCM注册过程并接收通过GCM发送的消息.
我已经使用AIDL将我的库项目服务暴露给宿主应用程序,但我还需要在应用程序项目中声明服务.....我该如何避免这种情况?
此外,我还需要在应用程序清单中声明GCM所需的所有权限.
是否有任何方法可以从宿主应用程序中引用库项目的所有权限和服务,而无需在清单中再次声明它们?
我已经搜索过这个并发现:
1.是否可以在Android框架(库)中封装权限
这清楚地表明我想要实现的目标是不可能的.
2.有用的库项目清单文件是否合并?
@Hayes Haugen的回答说"在ADT工具的第20版中支持AndroidManifest.xml合并"
我正在使用ADT版本20.0.3
无论如何我可以实现提供GCM集成的库项目吗?
android aidl android-library google-cloud-messaging android-permissions
aidl ×10
android ×10
service ×2
build.gradle ×1
compilation ×1
gradle ×1
interface ×1
ipc ×1
java ×1
performance ×1
security ×1
stub ×1