要清楚我要问的是什么,我将提供一个真实世界的例子。看看at this并注意以下部分:
热线 - Android SDK集成步骤修改日期:2017年10月6日星期五晚上8:21
集成热线SDK(使用Gradle)先决条件:
- 热线SDK客户端需要运行Android 2.3或更高版本的设备
- 此处的热线应用ID和应用密钥:在哪里可以找到应用ID和应用密钥
- Android Studio和Gradle
醇>如果您在整合期间有任何疑问,请将其发送给我们 - 提交查询
1。将热线SDK添加到您的应用
将maven URL添加到根build.gradle(project / build.gradle)
allprojects { repositories { jcenter() maven { url "https://jitpack.io" } } }
将以下依赖项添加到app模块的build.gradle文件中 (project / app / build.gradle):
apply plugin: 'com.android.application' android { // ... } dependencies { // ... compile 'com.github.freshdesk:hotline-android:1.2.+' }
支持1.1 Android目标版
热线SDK支持定位Android 5.0及更高版本的应用。 SDK 本身兼容姜饼(API级别10)。
当应用定位到Android 7.0 +
时如果没有为Hotline SDK配置FileProvider,请执行以下操作 显示错误代码
"Missing/Bad FileProvider for Hotline. Camera capture will fail in devices running Nougat or later versions of OS (error code 354)"
要解决此问题,请在中添加提供商 AndroidManifest.xml如下所示,并在strings.xml中指定权限。 假设,com.example.demoapp是您的应用程序的包名称 宣言将是
的AndroidManifest.xml
<provider android:name="android.support.v4.content.FileProvider" android:authorities="com.example.demoapp.provider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/hotline_file_provider_paths" /> </provider>
的strings.xml
<string name="hotline_file_provider_authority">com.example.demoapp.provider</string>
当应用定位到Android 8.0 +
时当应用的目标是Android 8.0或更高版本,并且扩展名包含appcompat-v7 r26.0.0。+时,您会看到以下错误
E/UncaughtException: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/freshdesk/hotline/activity/InterstitialActivity;
热线SDK的活动扩展了ActionBarActivity以保留SDK 兼容app定位较旧的Android版本/ appcompat-v7 修订。可以通过添加代理类来解决它 (ActionBarActivity被AppCompatActivity取代并被代理 自appcomapt-v7的24.2.0以来,lib本身,直到它被删除 26.0.0)如果使用支持库26.x.x构建,请手动。
在相应的包中添加以下类
package android.support.v7.app; public class ActionBarActivity extends AppCompatActivity { }
我的问题与热线无关。但在我做了他们所要求的后,我的包结构看起来像这样:
现在你有一些背景让我告诉你我不明白的事情。这是否意味着我重写了android.support.v7.app.ActionBarActivity包中的任何调用?这是否意味着对于任何第三方构建我都可以这样覆盖它的类,只要我知道包和类名? 基本上,将我不拥有的东西的包名称放入我的包结构中意味着什么?它做了什么?
更新:在此处查看此文章为another example。如果您阅读解决方案3,您会发现我们可以使用facebook.login执行相同的操作。我亲自实现了它,它的工作原理。我的测试包结构看起来像这样,它会覆盖facebooks loginCreator等:
即使我实现了它,我仍然不知道发生了什么。有人可以解释一下吗?