Я разрабатываю библиотеку и использую эту библиотеку в качестве aar для своего приложения, как показано ниже в примере проекта.
Библиотечный проект:
public class UserDevice {
private static final String TAG = "UserDevice";
private static Context mContext;
public UserDevice(final Context context) {
mContext = context.getApplicationContext();
}
private static String getAdvertisementId(Context context) {
String _myads = null;
try {
String id = com.google.android.gms.ads.identifier.AdvertisingIdClient.getAdvertisingIdInfo(context).getId();
if (id != null) {
_myads = id;
}
} catch (Exception e) {
Log.e(TAG, "Could not get det ID.", e);
}
return _myads;
}
}
//build.gradle
android {
compileSdkVersion 29
buildToolsVersion "29.0.3"
defaultConfig {
minSdkVersion 16
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles 'consumer-rules.pro'
}
...
}
dependencies {
// default dependencies
// ...
implementation 'com.google.android.gms:play-services-base:17.2.1'
implementation 'com.google.android.gms:play-services-ads:19.0.1'
}
Проект приложения:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val device = UserDevice(this) //
btn_show_ads.setOnClickListener {
label_ads_id.text = device.myads
Log.d("App", "Device Ads id is: ${device.myads}")
}
}
}
/// build.gradle
dependencies {
// default dependencies
// ...
compile(name: 'adslibrary', ext: 'aar')
// compile project(path: ':adslibrary')
}
Но здесь произошло то, что он дает ошибку
2020-05-11 10:11:32.489 21925-21991/com.bhavdip.myadstest E/AndroidRuntime: FATAL EXCEPTION: Thread-2
Process: com.bhavdip.myadstest, PID: 21925
java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/gms/ads/identifier/AdvertisingIdClient;
at com.bhavdip.adslibrary.CRDevice.getAdvertisementId(Unknown Source:2)
at com.bhavdip.adslibrary.CRDevice$1.run(Unknown Source:4)
at java.lang.Thread.run(Thread.java:764)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.ads.identifier.AdvertisingIdClient" on path: DexPathList[[zip file "/data/app/com.bhavdip.myadstest-fP-f0WbH8_ErVLG3QBcgkQ==/base.apk"],nativeLibraryDirectories=[/data/app/com.bhavdip.myadstest-fP-f0WbH8_ErVLG3QBcgkQ==/lib/arm, /system/lib, /vendor/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
Я уже добавил и использую зависимость gms:play-services-ads
в библиотеке. Приложение снова просит меня принудительно добавить эти зависимости.
Если я добавлю зависимость в приложение, оно будет работать нормально, но я не хочу добавлять эту зависимость снова. Я не хочу раскрывать зависимость моей библиотеки конечному пользователю или разработчику. Добавляет приведенную ниже зависимость в my-library.
//For advertisement ID
implementation 'com.google.android.gms:play-services-ads:19.1.0'
implementation 'com.google.android.gms:play-services-base:17.2.1'
Справочные ссылки: я пробовал это и это тоже. Я также проверил все ответы в справочных ссылках.
Я пробовал multidex
, transitive
, а также менял implementation
на api
или compile
. в таком проекте приложения.
// Use transitive
compile(name: 'adslibrary', ext: 'aar') {
transitive = true
}
----- ИЗМЕНИТЬ Вопросы -----
- Что такое
transitive
? Как это устроено? - Как
multidex
работает в библиотеке?
Я мог бы пропустить что-то изменить. Пожалуйста, помогите мне избавиться от этой проблемы.
com.google.android.gms:play-services-ads:19.0.1
- person IntelliJ Amiya   schedule 30.04.2020gms:play-services-ads
до 19.0.1. - person AndyBoy   schedule 01.05.2020