Я хочу интегрировать Android Android SDK (v4.11) в свое приложение для Android, и мой последний apk скомпилирован с помощью Flash Builder из-за зависимостей flex-sdk.
К сожалению, я получаю ClassNotFoundException
для com.facebook.FacebookActivity
в моей трассе стека, когда мое приложение пытается создать соответствующее действие, которое инициализирует Facebook.
Я включил class.jar в Native Extension для моего исходного кода и зависимостей Android. При декомпиляции файла classes.dex в финальном .apk с помощью dexdump из инструментов SDK для Android SDK с помощью следующей команды:
./dexdump classes.dex | grep 'Class descriptor'
Я могу видеть
Class descriptor : 'Lcom/facebook/FacebookActivity;'
который указывает, что FacebookActivity.class был упакован и скомпилирован в .apk.
Я также связал все ресурсы Facebook-sdk вместе со своими ресурсами проекта в папке res в моем родном расширении (это первый раз, когда мне пришлось включать сторонние ресурсы с моим собственным в родном расширении).
Мой onCreate()
код, который инициализирует Facebook-SDK:
FacebookSdk.sdkInitialize(getApplicationContext()); //throws the ClassNotFoundException
AppEventsLogger.activateApp(this);
Мои 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>
Я что-то пропустил?
EDIT:
Теперь я использую версию 4.12 без изменений в результатах.
Кроме того, вот моя запись build.gradle: (Хотя это не очень сильно влияет на гибкую упаковку, так как я должен использовать ziptree для jpg facebook sdk).
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
}
}
ИЗМЕНИТЬ 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)