dev*_*hik 11 apache-flex android facebook facebook-android-sdk
我想将Facebook的Android SDK(v4.11)集成到我的Android应用程序中,由于flex-sdk依赖性,我的最终apk是通过Flash Builder编译的.
不幸的是,当我的应用程序试图创建初始化Facebook的相关活动时,我在堆栈跟踪中得到了一个ClassNotFoundException
for com.facebook.FacebookActivity
.
我在我的Android源代码和依赖项的Native Extension中包含了classes.jar.在使用Android SDK构建工具中的dexdump通过以下命令反编译最终.apk中的classes.dex文件:
./dexdump classes.dex | grep 'Class descriptor'
Run Code Online (Sandbox Code Playgroud)
我能够看到
Class descriptor : 'Lcom/facebook/FacebookActivity;'
Run Code Online (Sandbox Code Playgroud)
这表明FacebookActivity.class 已在.apk中打包和编译.
我还将所有Facebook-sdk资源和我的项目资源捆绑在我的原生扩展中的res文件夹中(这是我第一次在本机扩展中包含我自己的第三方资源).
我的onCreate()
代码初始化了Facebook-SDK:
FacebookSdk.sdkInitialize(getApplicationContext()); //throws the ClassNotFoundException
AppEventsLogger.activateApp(this);
Run Code Online (Sandbox Code Playgroud)
AndroidManisfest.xml
根据Facebook文档我的条目:
<meta-data android:name="com.facebook.sdk.ApplicationId"
android:value="@string/facebook_app_id"/>
<activity android:name="com.facebook.FacebookActivity"
android:configChanges=
"keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:label="@string/app_name" />
<activity
android:name="com.facebook.CustomTabActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="@string/fb_login_protocol_scheme" />
</intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么吗?
编辑:
我现在使用版本4.12,结果没有变化.
另外,这是我的build.gradle条目:(虽然这不会影响flex包装,因为我必须在facebook sdk JAR上使用ziptree).
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile "com.android.support:support-v4:23.0.+"
compile 'com.facebook.android:facebook-android-sdk:[4,5)'
/**
* newer cardview has compatibility issues with android-sdk default styles.
**/
compile('com.android.support:cardview-v7:23.2.0') {
force = true
}
}
Run Code Online (Sandbox Code Playgroud)
编辑2:
这是我的自定义gradle任务,我用它来打包已编译的依赖项和源类:
task fatJar(type: Jar) {
//external libariries - their jars containing compiled classes obtained from the .idea -> libraries -> <libName>.xml file
from (zipTree("build/intermediates/exploded-aar/com.android.support/support-v4/23.2.0/jars/classes.jar"))
from (zipTree("build/intermediates/exploded-aar/com.android.support/cardview-v7/23.2.0/jars/classes.jar"))
from ("build/intermediates/exploded-aar/com.android.support/cardview-v7/23.2.0/res")
from (zipTree("build/intermediates/exploded-aar/com.android.support/customtabs/23.4.0/jars/classes.jar"))
from ("build/intermediates/exploded-aar/com.android.support/customtabs/23.4.0/res")
from (zipTree("build/intermediates/exploded-aar/com.facebook.android/facebook-android-sdk/4.12.1/jars/classes.jar"))
// from ("build/intermediates/exploded-aar/com.facebook.android/facebook-android-sdk/4.12.0/res")
from(zipTree("/$USER_HOME/.gradle/caches/modules-2/files-2.1/com.parse.bolts/bolts-android/1.4.0/cc174c559b5177982887bf6e1b76003aebad9516/bolts-android-1.4.0.jar"))
from(zipTree("/$USER_HOME/.gradle/caches/modules-2/files-2.1/com.parse.bolts/bolts-applinks/1.4.0/8ad21bf21784dacce5f2043afb97218cc377e835/bolts-applinks-1.4.0.jar"))
from(zipTree("/$USER_HOME/.gradle/caches/modules-2/files-2.1/com.parse.bolts/bolts-tasks/1.4.0/d85884acf6810a3bbbecb587f239005cbc846dc4/bolts-tasks-1.4.0.jar"))
//soucre code
from ('build/intermediates/classes/release/') {
exclude '**/BuildConfig.class'
exclude '**/R$*.class'
exclude '**/R.class'
}
//jar name and destination directory
archiveName = "src_and_dependencies.jar"
destinationDir = file("/$USER_HOME/Ane/build/ane/Android-ARM")
}
//before running fatJar task, the old jar should be deleted and the project should be re-built
fatJar.dependsOn(clearJar, build)
Run Code Online (Sandbox Code Playgroud)
从提供的信息来看,您似乎已将包名称“com.facebook”用于您的自定义应用程序。但是,这可能与 facebook sdk 使用的“com.facebook”包冲突。
请更改您的包名称并尝试。
归档时间: |
|
查看次数: |
1846 次 |
最近记录: |