Hi everyone.
I’m developing the google sign plugin on android.
I create the Interface and call the interface functions in event callback.
But compile is always failed because i use the interface.
As you know, It is nothing to need to include the any module in java.
What did i miss?
Hope your help.
////////////////////////////////My_APL.xml//////////////////////////////
<?xml version="1.0" encoding="utf-8"?>
<!-- optional files or directories to copy to Intermediate/Android/APK -->
<resourceCopies>
<copyFile src="$S(PluginDir)/InterfaceModule/ouya-sdk.jar" dst="$S(BuildDir)/InterfaceModule/ouya-sdk.jar" />
<copyFile src="$S(PluginDir)/InterfaceModule/PluginTestGameActivity.java" dst="$S(BuildDir)/InterfaceModule/PluginTestGameActivity.java" />
<copyFile src="$S(PluginDir)/InterfaceModule/TestOnGameActivityListener.java" dst="$S(BuildDir)/InterfaceModule/TestOnGameActivityListener.java" />
</resourceCopies>
org.gradle.parallel=true
android.useAndroidX=true
android.enableJetifier=true
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:4.0.0'
classpath 'com.google.gms:google-services:4.3.8'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
}
}
</insert>
apply plugin: 'com.android.application'
android {
compileSdkVersion 33
buildToolsVersion '33.0.0'
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
coreLibraryDesugaringEnabled true
}
defaultConfig {
applicationId "com.Plugins.GoogleSignIn"
minSdkVersion 21
targetSdkVersion 33
versionCode 1
versionName "1.0"
multiDexEnabled true
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:2.0.4'
implementation 'com.android.support:design:28.0.0'
implementation 'com.google.android.gms:play-services-auth:21.2.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation 'com.android.support:multidex:1.0.3'
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.0.5'
}
</insert>
import android.os.Build.VERSION;
import android.os.Build.VERSION_CODES;
import android.util.DisplayMetrics;
import android.view.WindowMetrics;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import com.google.android.gms.auth.api.signin.GoogleSignIn;
import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
import com.google.android.gms.auth.api.signin.GoogleSignInClient;
import com.google.android.gms.auth.api.signin.GoogleSignInOptions;
import com.google.android.gms.common.api.ApiException;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import java.io.InputStream;
import static java.security.AccessController.getContext;
</insert>
<![CDATA[
/**
UE4 plugins can use the GameActivity's listener to get
the activity lifecycle events.
*/
public interface OnGameActivityListener {
// listeners receive activity result events
boolean onActivityResult(int requestCode, int resultCode, Intent data);
// listeners receive create events
void onCreate(Bundle savedInstanceState);
// listeners receive destroy events
void onDestroy();
// listeners receive pause events
void onPause();
// listeners receive resume events
void onResume();
// listeners receive start events
void onStart();
// listeners receive stop events
void onStop();
}
// The list of game activity listeners
private static sOnGameActivityListeners = new ArrayList();
private GoogleSignInClient mGoogleSignInClient = null;
public void AndroidThunkJava_GoogleSignIn()
{
signIn();
}
public void GoogleSignIn_Request() {
// Configure sign-in to request the user's ID, email address, and basic
// profile. ID and basic profile are included in DEFAULT_SIGN_IN.
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.build();
// Build a GoogleSignInClient with the options specified by gso.
mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
}
@Override
public void onCreate(Bundle savedInstanceState) {
{
super.onCreate(savedInstanceState);
GoogleSignIn_Request();
}
@Override
public void onStart() {
super.onStart();
// [START on_start_sign_in]
// Check for existing Google Sign In account, if the user is already signed in
// the GoogleSignInAccount will be non-null.
GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this);
updateUI(account);
// [END on_start_sign_in]
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// Result returned from launching the Intent from GoogleSignInClient.getSignInIntent(...);
if (requestCode == RC_SIGN_IN) {
// The Task returned from this call is always completed, no need to attach
// a listener.
Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
handleSignInResult(task);
}
}
private void handleSignInResult(Task<GoogleSignInAccount> completedTask) {
try {
GoogleSignInAccount account = completedTask.getResult(ApiException.class);
// Signed in successfully, show authenticated UI.
updateUI(account);
} catch (ApiException e) {
// The ApiException status code indicates the detailed failure reason.
// Please refer to the GoogleSignInStatusCodes class reference for more information.
Log.w(TAG, "signInResult:failed code=" + e.getStatusCode());
updateUI(null);
}
}
private void signIn() {
Intent signInIntent = mGoogleSignInClient.getSignInIntent();
startActivityForResult(signInIntent, RC_SIGN_IN);
}
private void signOut() {
mGoogleSignInClient.signOut()
.addOnCompleteListener(this, new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
// [START_EXCLUDE]
updateUI(null);
// [END_EXCLUDE]
}
});
}
private void revokeAccess() {
mGoogleSignInClient.revokeAccess()
.addOnCompleteListener(this, new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
// [START_EXCLUDE]
updateUI(null);
// [END_EXCLUDE]
}
});
}
private void updateUI(@Nullable GoogleSignInAccount account) {
if (account != null) {
new LoadProfileImage(mImageViewProfile).execute(account.getPhotoUrl().toString());
} else {
//TODO
}
}
/**
* Background Async task to load user profile picture from url
* */
private class LoadProfileImage extends AsyncTask<String, Void, Bitmap> {
ImageView bmImage;
public LoadProfileImage(ImageView bmImage) {
this.bmImage = bmImage;
}
protected Bitmap doInBackground(String... uri) {
String url = uri[0];
Bitmap mIcon11 = null;
try {
InputStream in = new java.net.URL(url).openStream();
mIcon11 = BitmapFactory.decodeStream(in);
} catch (Exception e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
return mIcon11;
}
protected void onPostExecute(Bitmap result) {
if (result != null) {
Bitmap resized = Bitmap.createScaledBitmap(result,200,200, true);
bmImage.setImageBitmap(ImageHelper.getRoundedCornerBitmap(MainActivity.this,
resized,250,200,200,
false, false, false, false));
bmImage.setVisibility(View.VISIBLE);
}
}
}
]]>
</insert>
// notify listeners
for (OnGameActivityListener listener : sOnGameActivityListeners) {
listener.onCreate(savedInstanceState);
}
// notify listeners
for (OnGameActivityListener listener : sOnGameActivityListeners) {
listener.onStart();
}
<gameActivityOnStopAdditions>
<insert>
// notify listeners
for (OnGameActivityListener listener : sOnGameActivityListeners) {
listener.onStop();
}
</insert>
</gameActivityOnStopAdditions>
<gameActivityOnPauseAdditions>
<insert>
// notify listeners
for (OnGameActivityListener listener : sOnGameActivityListeners) {
listener.onPause();
}
</insert>
</gameActivityOnPauseAdditions>
<gameActivityOnResumeAdditions>
<insert>
// notify listeners
for (OnGameActivityListener listener : sOnGameActivityListeners) {
listener.onResume();
}
</insert>
</gameActivityOnResumeAdditions>
// listeners have a chance to process the activity result
for (OnGameActivityListener listener : sOnGameActivityListeners) {
// if a listener returns true, the activity result has been handled
if (listener.onActivityResult(requestCode, resultCode, data)) {
// no further processing needed
return;
}
}
<gameActivityOnDestroyAdditions>
<insert>
// notify listeners
for (OnGameActivityListener listener : sOnGameActivityListeners) {
listener.onDestroy();
}
</insert>
</gameActivityOnDestroyAdditions>
/////////////////////////////compile error///////////////////////////////
UATHelper: Packaging (Android (Multi:ASTC,DXT,ETC2)): > Task :downloader_library:copyDebugJniLibsProjectOnly UP-TO-DATE
UATHelper: Packaging (Android (Multi:ASTC,DXT,ETC2)): > Task :permission_library:copyDebugJniLibsProjectOnly UP-TO-DATE
UATHelper: Packaging (Android (Multi:ASTC,DXT,ETC2)): > Task :app:compileDebugAidl FAILED
UATHelper: Packaging (Android (Multi:ASTC,DXT,ETC2)): FAILURE: Build failed with an exception.
UATHelper: Packaging (Android (Multi:ASTC,DXT,ETC2)): * What went wrong:
UATHelper: Packaging (Android (Multi:ASTC,DXT,ETC2)): Execution failed for task ':app:compileDebugAidl'.
UATHelper: Packaging (Android (Multi:ASTC,DXT,ETC2)): > 1 exception was raised by workers:
UATHelper: Packaging (Android (Multi:ASTC,DXT,ETC2)): 37 actionable tasks: 1 executed, 36 up-to-date
UATHelper: Packaging (Android (Multi:ASTC,DXT,ETC2)): java.lang.RuntimeException: java.lang.RuntimeException: java.io.IOException: com.android.ide.common.process.ProcessException: Error while executing process C:\Users\Administrator\AppData\Local\Android\Sdk\build-tools\33.0.0\aidl.exe with arguments {-pC:\Users\Administrator\AppData\Local\Android\Sdk\plat
forms\android-33\framework.aidl -oZ:\app\build\generated\aidl_source_output_dir\debug\out -IZ:\app\src\main\java -IZ:\app\src\debug\aidl -IC:\Users\Administrator\.gradle\caches\transforms-2\files-2.1\ffc4098914b91b7860907277c6a73623\media-1.0.0\aidl -IC:\Users\Administrator\.gradle\caches\transforms-2\files-2.1\db59709fd9d4cb349176afaa7521632c\core-1.8.0\aid
l -IC:\Users\Administrator\.gradle\caches\transforms-2\files-2.1\f8f1ded60081caa70730f6795c311ce8\versionedparcelable-1.1.1\aidl -IZ:\downloader_library\build\intermediates\aidl_parcelable\debug\out -IZ:\permission_library\build\intermediates\aidl_parcelable\debug\out -dC:\Users\Administrator\AppData\Local\Temp\aidl8924882045696087651.d Z:\app\src\main\java\
com\android\vending\licensing\ILicenseResultListener.aidl}
UATHelper: Packaging (Android (Multi:ASTC,DXT,ETC2)): * Try:
UATHelper: Packaging (Android (Multi:ASTC,DXT,ETC2)): Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
UATHelper: Packaging (Android (Multi:ASTC,DXT,ETC2)): * Get more help at https://help.gradle.org
UATHelper: Packaging (Android (Multi:ASTC,DXT,ETC2)): BUILD FAILED in 25s
UATHelper: Packaging (Android (Multi:ASTC,DXT,ETC2)): ERROR: cmd.exe failed with args /c "C:\Users\Administrator\Downloads\SignIn\Intermediate\Android\armv7\gradle\rungradle.bat" :app:assembleDebug
UATHelper: Packaging (Android (Multi:ASTC,DXT,ETC2)): (see C:\Users\Administrator\AppData\Roaming\Unreal Engine\AutomationTool\Logs\D+UE_4.27\Log.txt for full exception trace)
PackagingResults: Error: cmd.exe failed with args /c "C:\Users\Administrator\Downloads\SignIn\Intermediate\Android\armv7\gradle\rungradle.bat" :app:assembleDebug
UATHelper: Packaging (Android (Multi:ASTC,DXT,ETC2)): AutomationTool exiting with ExitCode=1 (Error_Unknown)
UATHelper: Packaging (Android (Multi:ASTC,DXT,ETC2)): BUILD FAILED
PackagingResults: Error: Unknown Error
////////////////////////////////////////////////////////////////////////