我正在尝试了解如何在我正在制作的库中使用 Realm,经过几天的研究,我现在了解了 RealmModules(如果 Realm 的人读到了这篇文章,那么您确实应该改进有关库中使用的文档)。我创建了一个简单的类,为我提供了库配置的领域:
object ChatRealm {
fun getChatRealm(): Realm{
val config = RealmConfiguration.Builder()
.name("mtchat_realmDB")
.schemaVersion(2)
.deleteRealmIfMigrationNeeded()
.modules(ChatModule())
.build()
return Realm.getInstance(config)
}
}
Run Code Online (Sandbox Code Playgroud)
模块是这个
@RealmModule(library = true, allClasses = true)
class ChatModule {}
Run Code Online (Sandbox Code Playgroud)
在项目应用程序类中我设置了这样的领域
class App: Application() {
override fun onCreate() {
super.onCreate()
initRealm()
setupRealm()
}
private fun initRealm() {
Realm.init(this)
}
private fun setupRealm(){
Realm.setDefaultConfiguration(
RealmConfiguration.Builder()
.deleteRealmIfMigrationNeeded()
.modules(Realm.getDefaultModule(), ChatModule())
.build()
)
}
}
Run Code Online (Sandbox Code Playgroud)
现在我遇到的麻烦是,根据我配置 gradle 文件的方式,构建失败或应用程序因各种原因崩溃。
我的 :app gradle 是这样的
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: …Run Code Online (Sandbox Code Playgroud) 库模块不能包含原始资源
我创建了一个示例 android 库模块,其中包含资产(不在应用程序模块中),然后生成 aar 文件。我分析了生成的 aar 文件,瞧,assets/ 文件夹仍然存在,所有文件都完好无损。
那么,到底是允许还是不允许呢?
我正在制作一个由一些活动和布局组成的 android 库。该库模块实际上在我当前正在处理的示例项目上运行良好。
后来我决定在不同的应用程序上使用相同的模块。所以我通过执行以下操作从模块中构建了一个 aar 库./gradlew assemble
我将此 aar 导入到第二个项目中。这导致了一系列错误。
../res/layout/activity_package_select.xml:18: error: attribute layout_scrollFlags (aka dkkdff.ckkkf.co.test:layout_scrollFlags) not found.
../res/layout/activity_package_select.xml:18: error: attribute titleEnabled (aka dkkdff.ckkkf.co.test:titleEnabled) not found.
../res/layout/activity_package_select.xml:35: error: attribute layout_scrollFlags (aka dkkdff.ckkkf.co.test:layout_scrollFlags) not found.
../res/layout/add_text_dialog.xml:16: error: attribute cardBackgroundColor (aka dkkdff.ckkkf.co.test:cardBackgroundColor) not found.
../res/layout/add_text_dialog.xml:16: error: attribute cardUseCompatPadding (aka dkkdff.ckkkf.co.test:cardUseCompatPadding) not found.
../res/layout/add_text_dialog.xml:22: error: attribute hintTextAppearance (aka dkkdff.ckkkf.co.test:hintTextAppearance) not found.
../res/layout/add_text_dialog.xml:44: error: attribute cardBackgroundColor (aka dkkdff.ckkkf.co.test:cardBackgroundColor) not found.
../res/layout/add_text_dialog.xml:44: error: attribute cardUseCompatPadding (aka dkkdff.ckkkf.co.test:cardUseCompatPadding) not found.
../res/layout/add_text_dialog.xml:71: error: attribute cardBackgroundColor (aka …Run Code Online (Sandbox Code Playgroud) 在值中创建public.xml并在其中添加公共资源
<resources>
<public type="drawable" name="image_public"/>
<public type="string" name="external_module_string_res_public"/>
<public type="layout" name="activity_main_public"/>
</resources>
Run Code Online (Sandbox Code Playgroud)
但我仍然可以从主项目中的库模块访问所有资源。
尝试了Chris Banes 的指令 以及stackoverflow 帖子
使用
Android Studio 3.1.4
和
classpath 'com.android.tools.build:gradle:3.1.4'
我正在创建一个aar库,我需要获得文件aar packagename的标志aar。
我正在尝试下面的代码,但getPackageName()方法没有返回aar packagename
Signature[] sigs = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES).signatures;
for (Signature sig : sigs){
Log.i("MyApp", "Signature hashcode : " + sig.hashCode());
}
Run Code Online (Sandbox Code Playgroud) 我正在编写 2 个 Android 库。当我对两者进行混淆时,它们中的混淆代码都包含一个名为 的类a.a.a.a.a,当尝试在同一应用程序中使用这两个库时,该类会导致以下错误:
在模块classes.jar (lib1) 和classes.jar (lib2) 中发现重复的类aaaaa
我怎样才能防止Proguard混淆前 3 个包而最终得到:
my.domain.lib1.a.a和my.domain.lib2.a.a?
编辑:混淆是在构建库的过程中发生的,而不是在构建应用程序时发生的。
在库模块的清单中,我需要使用一个Application类。在 Android 中可以做到这一点吗?
显现:
<application
android:name="com.compnay.app.App"
android:allowBackup="true"
android:label="@string/app_name"
>
</application>
Run Code Online (Sandbox Code Playgroud)
模块库清单:
<application
android:name="com.example.mymodule.App"
android:allowBackup="true"
android:label="@string/app_name"
>
</application>
Run Code Online (Sandbox Code Playgroud)
我想使用 Jetpack Compose 构建一个库并使用 jitpack.io 发布它。我使用的是 android studio 金丝雀版本 android studio 金丝雀版本。我已经构建了该项目,将其推送到 Github,发布了一个版本,然后将我的存储库的链接放在 jitpack.io 中以生成 lib 依赖项链接“implementation 'com.github.user:compose-lib:Tag' “但是出了点问题,我从 jitpack 收到了这个日志错误:
Build starting...
Start: Tue Apr 27 14:25:17 UTC 2021 0c5235afbe25
Git:
0.9.0-0-g13dbaf9
commit 13dbaf941d2c59d8e70ed64b868488abb7f3f2e1
Author: username
Date: Tue Apr 27 14:29:45 2021 +0200
gradle plugin require Java 11 to run
Found Android manifest
Android SDK version: . Build tools: 30.0.3
Installing Build-tools 30.0.3
Found gradle
Gradle build script
Found gradle version: 7.0.
Using gradle wrapper
Picked up JAVA_TOOL_OPTIONS: …Run Code Online (Sandbox Code Playgroud) android gradle android-library jitpack android-jetpack-compose-list
我有一个Android项目.现在我需要创建该项目的第二版.
有什么不同:
新版本的项目应在其中一个活动中具有不同的内容.
我正在考虑创建一个库项目和两个将使用库项目的新项目(project1和project2),但我真的不明白如何设置它.
我应该将原始项目转换为库,然后创建两个新项目然后是什么?如何在同一个地方project1使用activity1和project2使用activity2?
编辑
到目前为止我设置的内容:
MainProject,一个库有MainActivity.java和ChildActivity.java
AndroidManifest.xml中
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.mainproject">
<application>
<activity
android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".ChildActivity">
</activity>
</application>
</manifest>
Run Code Online (Sandbox Code Playgroud)
MainActivity.java
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
((Button)findViewById(R.id.button1)).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, ChildActivity.class);
startActivity(intent);
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
StandAloneProject:它只有ChildActivity.java
<manifest …Run Code Online (Sandbox Code Playgroud) 我在Eclipse的一个项目中开发了一个Android应用程序 - 它是结构化的(来自iPhone),所以一个常量定义它是演示版还是完整版.
现在我遇到的问题是,每次我想创建演示版本时我都需要更改常量,但还需要使用不同的包名创建项目的副本.
显然,原始完整版中的代码更改需要复制到演示中,否则我每次提交应用程序时都必须重做演示应用程序的创建.
我看到三种可能的方法:
1.虽然我已经研究过图书馆项目,但我仍然不清楚在这种情况下这是如何真正提供一个好的解决方案的.
例如,如果我有一个活动结构的完整版本:
A1
A2
A3
Run Code Online (Sandbox Code Playgroud)
使用实用程序类U1,U2
当然U1和U2可以在一个库项目中并从两个项目中引用 - 但是活动,strings.xml,图形,布局需要重复(或者是否有另一种我看不到的方式?)这似乎没有是一个很好的前进方式,遗憾的是,当提出这种方法时,在这个主题的类似问题中没有解释过.
2.另一种方法是根据不同的构建设置(类似于iPhone)创建不同的包名称,但是,这似乎不可能在Eclipse中使用而不是使用一些外部脚本(诚实地说 - 我宁愿避免使用它似乎相当容易出错)同时还必须在Eclipse之外调用编译
3.可能最直接的方法(目前还有很少的努力)只是手动复制项目,更改一个常量,重命名包并在每次提交时编译/导出.然而 - 这似乎是相当"基本"的,当然看起来并不专业(与iPhone/xCode构建设置/目标解决方案相比)
什么是最好的方法(需要最少量的变化,仍然稳定且易于使用)?
非常感谢!
编辑
对于尝试过tim解决方案的每个人来说 - 它运行正常,但我遇到了自定义属性的问题.
检查一下:如何在构建期间解决Android库自定义属性和包名重新映射? 它将解决图书馆的问题
android ×10
android-library ×10
aar ×2
kotlin ×2
android-jetpack-compose-list ×1
assets ×1
build ×1
gradle ×1
jitpack ×1
module ×1
package-name ×1
proguard ×1
realm ×1