问题:我有两个类 MainActivity 和 BitcoinConfig(见下文)。有人可以帮我解决同步区块链的问题吗?
AndroidManifest.xml 和 build.gradle 文件如下所示。
错误:我在下面附上了完整的 logcat 和 getCause 信息,但主要错误之一是:
W/System.err:java.lang.IllegalStateException:预期服务 [FAILED] 正在运行,但服务已失败(BitcoinConfig 类中的第 50 行 kit.awaitSync())
谢谢(对不起,如果这很明显,这对我来说是全新的)!
主要活动
<code>
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
private BitcoinConfig btcService;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btcService = new BitcoinConfig();
btcService.settingUp();
}
}
</code>
比特币配置
<code>
import android.util.Log;
import org.bitcoinj.core.ECKey;
import org.bitcoinj.core.NetworkParameters;
import org.bitcoinj.core.listeners.DownloadProgressTracker;
import org.bitcoinj.kits.WalletAppKit;
import org.bitcoinj.params.RegTestParams;
import org.bitcoinj.params.TestNet3Params;
import org.bitcoinj.utils.BriefLogFormatter;
import java.io.File;
import java.util.Date;
public class BitcoinConfig {
private NetworkParameters params;
private WalletAppKit kit;
private File walletPath;
private static final String TAG = BitcoinConfig.class.getSimpleName();
public BitcoinConfig() {
}
public void settingUp() {
params = TestNet3Params.get();
Log.d(TAG, "getting network");
BriefLogFormatter.init();
Log.d(TAG, "creating wallet");
kit = new WalletAppKit(params, new File("/home/annab"), "UserWallet") {
@Override
protected void onSetupCompleted() {
if (wallet().getImportedKeys().size() < 1)
wallet().importKey(new ECKey());
Log.d(TAG, "in on set up");
}
};
if (params == RegTestParams.get()) {
kit.connectToLocalHost();
Log.d(TAG, "in connect to regtestnet");
}
kit.setBlockingStartup(false);
Log.d(TAG, "setBlockingStartup(false)");
try {
kit.startAsync();
Log.d(TAG, "startAsync()");
} catch(Throwable t){
Log.d(TAG, "startAsync error"); // never goes here
t.getCause();
}
try {
kit.awaitRunning(); // error: java.lang.IllegalStateException: Expected the service [FAILED] to be RUNNING, but the service has FAILED
Log.d(TAG, "awaitRunning()");
} catch (Throwable t) {
System.out.println("awaitingRunning exception"); // goes here
t.getCause();
}
}
}
<code>
build.gradle(:module)
buildscript {
repositories {
google()
mavenCentral()
}
dependencies {
classpath "com.android.tools.build:gradle:4.2.0"
}
}
allprojects {
repositories {
google()
mavenCentral()
jcenter() // Warning: this repository is going to shut down soon
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
build.gradle(:app)
plugins {
id 'com.android.application'
}
android {
compileSdkVersion 31
buildToolsVersion "31.0.0"
defaultConfig {
applicationId "com.example.walletexample"
minSdkVersion 23
targetSdkVersion 31
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
// already here
implementation 'androidx.appcompat:appcompat:1.3.1'
implementation 'com.google.android.material:material:1.4.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.1'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
implementation "androidx.annotation:annotation:1.2.0"
// BitcoinJ SDK
implementation 'org.bitcoinj:bitcoinj-core:0.15.10'
// logging
implementation 'org.slf4j:slf4j-api:1.7.12'
implementation 'org.slf4j:slf4j-simple:1.7.12'
implementation 'com.google.guava:guava:29.0-android'
testImplementation 'junit:junit:4.13.2'
}
AndroidManifest.xml
<code>
*<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.walletexample">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:exported ="true"
android:theme="@style/Theme.WalletExample">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>*
</code>
LOGCAT
10/30 14:02:39: Launching 'MainActivity' on samsung SM-G9730.
Install successfully finished in 192 ms.
$ adb shell am start -n "com.example.walletexample/com.example.walletexample.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
Connected to process 15603 on device 'samsung-sm_g9730-R28M50DX0ML'.
Capturing and displaying logcat messages from the application. This behavior can be disabled in the "Logcat output" section of the "Debugger" settings page.
W/e.walletexampl: Accessing hidden method Landroid/app/ResourcesManager;->getConfiguration()Landroid/content/res/Configuration; (greylist-max-o, linking, denied)
Accessing hidden method Landroid/app/ResourcesManager;->getDisplayMetrics()Landroid/util/DisplayMetrics; (greylist-max-o, linking, denied)
Accessing hidden method Landroid/app/ActivityThread;->isInDexDisplay()Z (blacklist, linking, denied)
Accessing hidden method Landroid/app/ResourcesManager;->getDisplayMetrics(ILandroid/view/DisplayAdjustments;)Landroid/util/DisplayMetrics; (greylist-max-o, linking, denied)
Accessing hidden method Landroid/app/ResourcesManager;->getAdjustedDisplay(ILandroid/view/DisplayAdjustments;)Landroid/view/Display; (greylist-max-o, linking, denied)
Accessing hidden method Landroid/app/ResourcesManager;->getResources(Landroid/os/IBinder;Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;ILandroid/content/res/Configuration;Landroid/content/res/CompatibilityInfo;Ljava/lang/ClassLoader;Ljava/util/List;)Landroid/content/res/Resources; (blacklist, linking, denied)
Accessing hidden method Landroid/app/ResourcesManager;->getResources(Landroid/os/IBinder;Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;ILandroid/content/res/Configuration;Landroid/content/res/CompatibilityInfo;Ljava/lang/ClassLoader;Ljava/util/List;Ljava/lang/String;)Landroid/content/res/Resources; (blacklist, linking, denied)
W/e.walletexampl: Accessing hidden method Landroid/app/ResourcesManager;->getResources(Landroid/os/IBinder;Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;ILandroid/content/res/Configuration;Landroid/content/res/CompatibilityInfo;Ljava/lang/ClassLoader;Ljava/util/List;Ljava/lang/String;)Landroid/content/res/Resources; (blacklist, linking, denied)
Accessing hidden method Landroid/app/ResourcesManager;->rebaseKeyForActivity(Landroid/os/IBinder;Landroid/content/res/ResourcesKey;)V (blacklist, linking, denied)
Accessing hidden method Landroid/app/ResourcesManager;->createResources(Landroid/os/IBinder;Landroid/content/res/ResourcesKey;Ljava/lang/ClassLoader;)Landroid/content/res/Resources; (blacklist, linking, denied)
Accessing hidden method Landroid/app/ResourcesManager;->rebaseKeyForActivity(Landroid/os/IBinder;Landroid/content/res/ResourcesKey;)V (blacklist, linking, denied)
Accessing hidden method Landroid/app/ResourcesManager;->createResources(Landroid/os/IBinder;Landroid/content/res/ResourcesKey;Ljava/lang/ClassLoader;)Landroid/content/res/Resources; (blacklist, linking, denied)
Accessing hidden method Landroid/app/ResourcesManager;->invalidatePath(Ljava/lang/String;)V (greylist-max-o, linking, denied)
Accessing hidden method Landroid/content/res/ResourcesKey;->isPathReferenced(Ljava/lang/String;)Z (greylist-max-o, linking, denied)
Accessing hidden field Landroid/app/ResourcesManager;->mCachedApkAssets:Landroid/util/ArrayMap; (greylist-max-o, linking, denied)
W/e.walletexampl: Accessing hidden field Landroid/app/ResourcesManager;->mCachedApkAssets:Landroid/util/ArrayMap; (greylist-max-o, linking, denied)
Accessing hidden field Landroid/app/ResourcesManager$ApkKey;->path:Ljava/lang/String; (greylist-max-o, linking, denied)
Accessing hidden field Landroid/app/ResourcesManager;->mCachedApkAssets:Landroid/util/ArrayMap; (greylist-max-o, linking, denied)
Accessing hidden method Landroid/content/res/ApkAssets;->close()V (blacklist, linking, denied)
Accessing hidden field Landroid/app/ResourcesManager;->mCachedApkAssets:Landroid/util/ArrayMap; (greylist-max-o, linking, denied)
Accessing hidden field Landroid/app/ResourcesManager$ApkKey;->path:Ljava/lang/String; (greylist-max-o, linking, denied)
Accessing hidden field Landroid/app/ResourcesManager;->mCachedApkAssets:Landroid/util/ArrayMap; (greylist-max-o, linking, denied)
Accessing hidden method Landroid/content/res/ApkAssets;->close()V (blacklist, linking, denied)
Accessing hidden method Landroid/app/ResourcesManager;->isSameResourcesOverrideConfig(Landroid/os/IBinder;Landroid/content/res/Configuration;)Z (greylist-max-o, linking, denied)
W/e.walletexampl: Accessing hidden field Landroid/app/ResourcesManager$ActivityResources;->overrideConfig:Landroid/content/res/Configuration; (greylist-max-o, linking, denied)
Accessing hidden field Landroid/app/ResourcesManager$ActivityResources;->overrideConfig:Landroid/content/res/Configuration; (greylist-max-o, linking, denied)
Accessing hidden field Landroid/app/ResourcesManager$ActivityResources;->overrideConfig:Landroid/content/res/Configuration; (greylist-max-o, linking, denied)
Accessing hidden method Landroid/content/res/Configuration;->diffPublicOnly(Landroid/content/res/Configuration;)I (greylist-max-o, linking, denied)
Accessing hidden method Landroid/app/ResourcesManager;->leaveLogCurrentState()V (blacklist, linking, denied)
Accessing hidden method Landroid/app/ResourcesManager;->getResourcesHashList()Ljava/lang/String; (blacklist, linking, denied)
Accessing hidden method Landroid/app/ResourcesManager;->overrideTokenDisplayAdjustments(Landroid/os/IBinder;Ljava/util/function/Consumer;)Z (blacklist, linking, denied)
Accessing hidden field Landroid/app/ResourcesManager$ActivityResources;->activityResources:Ljava/util/ArrayList; (greylist-max-o, linking, denied)
W/e.walletexampl: Accessing hidden method Landroid/content/res/Resources;->overrideDisplayAdjustments(Ljava/util/function/Consumer;)V (blacklist, linking, denied)
Accessing hidden method Landroid/app/ResourcesManager;->setDisplayPolicyResources(Landroid/content/res/Resources;I)V (blacklist, linking, denied)
Accessing hidden field Landroid/app/ResourcesManager;->mSavedLogs:Landroid/app/ResourcesManager$EvictingArrayQueue; (blacklist, linking, denied)
Accessing hidden field Landroid/app/ResourcesManager;->mFormatter:Ljava/time/format/DateTimeFormatter; (blacklist, linking, denied)
Accessing hidden method Landroid/app/ResourcesManager$EvictingArrayQueue;-><init>(Landroid/app/ResourcesManager;I)V (blacklist, linking, denied)
Accessing hidden field Landroid/app/ResourcesManager;->mDPResHash:I (blacklist, linking, denied)
Accessing hidden field Landroid/app/ResourcesManager;->mDPImplHash:I (blacklist, linking, denied)
Accessing hidden method Landroid/app/ResourcesManager;->save(Ljava/lang/String;)V (blacklist, linking, denied)
Accessing hidden method Landroid/app/ResourcesManager;->updateResourcesForActivity(Landroid/os/IBinder;Landroid/content/res/Configuration;IZ)V (greylist-max-o, linking, denied)
Accessing hidden method Landroid/app/ResourcesManager;->getOrCreateActivityResourcesStructLocked(Landroid/os/IBinder;)Landroid/app/ResourcesManager$ActivityResources; (greylist-max-o, linking, denied)
W/e.walletexampl: Redefining intrinsic method java.lang.Thread java.lang.Thread.currentThread(). This may cause the unexpected use of the original definition of java.lang.Thread java.lang.Thread.currentThread()in methods that have already been compiled.
Redefining intrinsic method boolean java.lang.Thread.interrupted(). This may cause the unexpected use of the original definition of boolean java.lang.Thread.interrupted()in methods that have already been compiled.
I/studio.deploy: Finished instrumenting
D/ActivityThread: handleBindApplication()++ app=com.example.walletexample
D/LoadedApk: LoadedApk::makeApplication() appContext=android.app.ContextImpl@a359449 appContext.mOpPackageName=com.example.walletexample appContext.mBasePackageName=com.example.walletexample appContext.mPackageInfo=android.app.LoadedApk@574914e
D/NetworkSecurityConfig: No Network Security Config specified, using platform default
D/NetworkSecurityConfig: No Network Security Config specified, using platform default
D/ActivityThread: handleBindApplication() -- skipGraphicsSupport=false
I/AdrenoGLES-0: QUALCOMM build : 4e552d6, I7befcd4846
Build Date : 04/04/21
OpenGL ES Shader Compiler Version: EV031.32.02.02
Local Branch :
Remote Branch : refs/tags/AU_LINUX_ANDROID_LA.UM.9.1.R1.11.00.00.604.073
Remote Branch : NONE
Reconstruct Branch : NOTHING
Build Config : S P 10.0.7 AArch64
Driver Path : /vendor/lib64/egl/libGLESv2_adreno.so
I/AdrenoGLES-0: PFP: 0x016ee190, ME: 0x00000000
I/DecorView: [INFO] isPopOver=false, config=true
I/DecorView: updateCaptionType >> DecorView@76c355f[], isFloating=false, isApplication=true, hasWindowDecorCaption=false, hasWindowControllerCallback=true
D/DecorView: setCaptionType = 0, this = DecorView@76c355f[]
W/e.walletexampl: Accessing hidden method Landroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z (greylist, reflection, allowed)
W/e.walletexampl: Accessing hidden method Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V (greylist, reflection, allowed)
W/System.err: [main] INFO org.bitcoinj.crypto.LinuxSecureRandom - Secure randomness will be read from /dev/urandom only.
D/BitcoinConfig: getting network
D/BitcoinConfig: creating wallet
W/System.err: [main] INFO org.bitcoinj.core.Context - Creating bitcoinj 0.15.10 context.
D/BitcoinConfig: setBlockingStartup(false)
D/BitcoinConfig: startAsync()
W/System.err: java.lang.IllegalStateException: Expected the service [FAILED] to be RUNNING, but the service has FAILED
W/System.err: at com.google.common.util.concurrent.AbstractService.checkCurrentState(AbstractService.java:366)
at com.google.common.util.concurrent.AbstractService.awaitRunning(AbstractService.java:302)
at com.google.common.util.concurrent.AbstractIdleService.awaitRunning(AbstractIdleService.java:163)
at com.example.walletexample.BitcoinConfig.settingUp(BitcoinConfig.java:50)
at com.example.walletexample.MainActivity.onCreate(MainActivity.java:16)
at android.app.Activity.performCreate(Activity.java:8207)
at android.app.Activity.performCreate(Activity.java:8191)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3800)
W/System.err: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4003)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2317)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:246)
at android.app.ActivityThread.main(ActivityThread.java:8595)
at java.lang.reflect.Method.invoke(Native Method)
W/System.err: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
Caused by: java.io.IOException: Could not create directory /home/annab
at org.bitcoinj.kits.WalletAppKit.startUp(WalletAppKit.java:292)
at com.google.common.util.concurrent.AbstractIdleService$DelegateService$1.run(AbstractIdleService.java:60)
at com.google.common.util.concurrent.Callables$4.run(Callables.java:119)
at java.lang.Thread.run(Thread.java:923)
D/InputTransport: Input channel constructed: 'bf476b5', fd=79
I/ViewRootImpl@3c1062f[MainActivity]: setView = com.android.internal.policy.DecorView@76c355f TM=true
I/ViewRootImpl@3c1062f[MainActivity]: stopped(true) old=false
I/SurfaceControl: assignNativeObject: nativeObject = 0 Surface(name=null)/@0x32ebee6 / android.view.SurfaceControl.readFromParcel:1117 android.view.IWindowSession$Stub$Proxy.relayout:1810 android.view.ViewRootImpl.relayoutWindow:9005 android.view.ViewRootImpl.performTraversals:3360 android.view.ViewRootImpl.doTraversal:2618 android.view.ViewRootImpl$TraversalRunnable.run:9971 android.view.Choreographer$CallbackRecord.run:1010 android.view.Choreographer.doCallbacks:809 android.view.Choreographer.doFrame:744 android.view.Choreographer$FrameDisplayEventReceiver.run:995
I/SurfaceControl: assignNativeObject: nativeObject = 0 Surface(name=null)/@0x4f58c27 / android.view.SurfaceControl.readFromParcel:1117 android.view.IWindowSession$Stub$Proxy.relayout:1820 android.view.ViewRootImpl.relayoutWindow:9005 android.view.ViewRootImpl.performTraversals:3360 android.view.ViewRootImpl.doTraversal:2618 android.view.ViewRootImpl$TraversalRunnable.run:9971 android.view.Choreographer$CallbackRecord.run:1010 android.view.Choreographer.doCallbacks:809 android.view.Choreographer.doFrame:744 android.view.Choreographer$FrameDisplayEventReceiver.run:995
I/ViewRootImpl@3c1062f[MainActivity]: Relayout returned: old=(0,0,1080,2280) new=(0,0,1080,2280) req=(0,0)8 dur=17 res=0x1 s={false 0} ch=false fn=-1
W/System: A resource failed to call close.
W/System: A resource failed to call close.