Skip to content

Commit 066d53d

Browse files
committed
Execute native activity after build
1 parent 4ec1f6f commit 066d53d

File tree

13 files changed

+179
-119
lines changed

13 files changed

+179
-119
lines changed

app/src/main/java/com/duy/ccppcompiler/compiler/CompileManager.java

Lines changed: 42 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,24 @@
1616

1717
package com.duy.ccppcompiler.compiler;
1818

19+
import android.app.NativeActivity;
1920
import android.content.Intent;
21+
import android.widget.Toast;
2022

2123
import com.duy.ccppcompiler.compiler.shell.CommandResult;
2224
import com.duy.ccppcompiler.compiler.shell.CompileResult;
2325
import com.duy.ccppcompiler.compiler.shell.NativeActivityCompileResult;
2426
import com.duy.ccppcompiler.console.TermActivity;
27+
import com.duy.ccppcompiler.packagemanager.Environment;
2528
import com.duy.editor.CodeEditorActivity;
2629
import com.pdaxrom.cctools.BuildConstants;
27-
import com.pdaxrom.cctools.LauncherNativeActivity;
30+
import com.pdaxrom.utils.Utils;
31+
32+
import org.apache.commons.io.IOUtils;
2833

2934
import java.io.File;
35+
import java.io.FileInputStream;
36+
import java.io.FileOutputStream;
3037

3138
/**
3239
* Created by Duy on 25-Apr-18.
@@ -41,25 +48,45 @@ public CompileManager(CodeEditorActivity activity) {
4148
@Override
4249
public void onCompileSuccess(CommandResult result) {
4350
super.onCompileSuccess(result);
51+
File internalBinary = null;
52+
if (result instanceof CompileResult) {
53+
File binFile = ((CompileResult) result).getBinaryFile();
54+
if (binFile == null) {
55+
return;
56+
}
57+
58+
//copy to internal storage
59+
try {
60+
internalBinary = new File(Environment.getTmpExeDir(getActivity()), binFile.getName());
61+
FileInputStream inputStream = new FileInputStream(binFile);
62+
FileOutputStream outputStream = new FileOutputStream(internalBinary);
63+
IOUtils.copy(inputStream, outputStream);
64+
inputStream.close();
65+
outputStream.close();
66+
67+
//set executable
68+
Utils.chmod(internalBinary.getAbsolutePath(), 0x1ed/*0775*/);
69+
} catch (Exception e) {
70+
e.printStackTrace();
71+
Toast.makeText(getActivity(), String.format("Internal error: %s. Please report bug on GitHub",
72+
e.getMessage()), Toast.LENGTH_SHORT).show();
73+
return;
74+
}
75+
}
4476

4577
if (result instanceof NativeActivityCompileResult) {
4678
//now run binary file
47-
File binFile = ((NativeActivityCompileResult) result).getBinaryFile();
48-
if (binFile != null) {
49-
Intent intent = new Intent(getActivity(), LauncherNativeActivity.class);
50-
intent.putExtra(BuildConstants.EXTRA_FILE_NAME, binFile.getAbsolutePath());
51-
intent.putExtra(BuildConstants.EXTRA_WORK_DIR, binFile.getParent());
52-
mActivity.startActivity(intent);
53-
}
79+
Intent intent = new Intent(getActivity(), NativeActivity.class);
80+
//from jni: main.cpp
81+
intent.putExtra("nativeApp", internalBinary.getAbsolutePath());
82+
getActivity().startActivity(intent);
5483

5584
} else if (result instanceof CompileResult) {
56-
File binFile = ((CompileResult) result).getBinaryFile();
57-
if (binFile != null) {
58-
Intent intent = new Intent(getActivity(), TermActivity.class);
59-
intent.putExtra(BuildConstants.EXTRA_FILE_NAME, binFile.getAbsolutePath());
60-
intent.putExtra(BuildConstants.EXTRA_WORK_DIR, binFile.getParent());
61-
mActivity.startActivity(intent);
62-
}
85+
86+
Intent intent = new Intent(getActivity(), TermActivity.class);
87+
intent.putExtra(BuildConstants.EXTRA_FILE_NAME, internalBinary.getAbsolutePath());
88+
intent.putExtra(BuildConstants.EXTRA_WORK_DIR, internalBinary.getParent());
89+
getActivity().startActivity(intent);
6390
}
6491
}
6592

app/src/main/java/com/duy/ccppcompiler/compiler/compilers/CompilerImpl.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
import com.duy.ccppcompiler.compiler.shell.CommandBuilder;
2424
import com.duy.ccppcompiler.compiler.shell.CommandResult;
2525
import com.duy.ccppcompiler.compiler.shell.Shell;
26+
import com.duy.ccppcompiler.packagemanager.Environment;
27+
import com.pdaxrom.utils.Utils;
2628

2729
import java.io.File;
2830

@@ -55,7 +57,13 @@ public CommandResult compile(File[] sourceFiles) {
5557
}
5658

5759
protected void clean() {
60+
Utils.deleteDirectory(new File(Environment.getTmpExeDir(mContext)));
61+
//create
62+
Environment.getTmpExeDir(mContext);
5863

64+
Utils.deleteDirectory(new File(Environment.getSdCardTmpDir()));
65+
//create
66+
Environment.getSdCardTmpDir();
5967
}
6068

6169
protected abstract String buildArgs(File[] sourceFiles);

app/src/main/java/com/duy/ccppcompiler/compiler/compilers/GCCCompiler.java

Lines changed: 32 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -17,28 +17,25 @@
1717
package com.duy.ccppcompiler.compiler.compilers;
1818

1919
import android.content.Context;
20-
import android.os.Build;
2120
import android.support.annotation.Nullable;
2221

2322
import com.duy.ccppcompiler.compiler.ICompileSetting;
2423
import com.duy.ccppcompiler.compiler.shell.CommandBuilder;
24+
import com.duy.ccppcompiler.compiler.shell.CommandResult;
2525
import com.duy.ccppcompiler.compiler.shell.CompileResult;
26+
import com.duy.ccppcompiler.compiler.shell.NativeActivityCompileResult;
2627
import com.duy.ccppcompiler.packagemanager.Environment;
27-
import com.pdaxrom.utils.Utils;
28-
29-
import org.apache.commons.io.IOUtils;
28+
import com.duy.common.DLog;
3029

3130
import java.io.File;
32-
import java.io.FileInputStream;
33-
import java.io.FileOutputStream;
3431

3532
/**
3633
* Created by Duy on 25-Apr-18.
3734
*/
3835

3936
public class GCCCompiler extends CompilerImpl {
4037
private static final String TAG = "GCCCompiler";
41-
private static final String GCC_COMPILER_NAME = "gcc-4.9";
38+
private static final String GCC_COMPILER_NAME = "gcc";
4239

4340
File mOutFile;
4441
ICompileSetting mSetting;
@@ -52,29 +49,17 @@ public GCCCompiler(Context context, boolean nativeActivity, @Nullable ICompileSe
5249

5350
@Override
5451
public CompileResult compile(File[] sourceFiles) {
55-
CompileResult result = new CompileResult(super.compile(sourceFiles));
52+
CommandResult shellResult = super.compile(sourceFiles);
53+
54+
CompileResult result;
55+
if (mBuildNativeActivity) {
56+
result = new NativeActivityCompileResult(shellResult);
57+
} else {
58+
result = new CompileResult(shellResult);
59+
}
60+
5661
if (result.getResultCode() == RESULT_NO_ERROR) {
57-
if (mOutFile != null && mOutFile.exists()) {
58-
try {
59-
File internalBinary = new File(Environment.getTmpExeDir(mContext), mOutFile.getName());
60-
FileInputStream inputStream = new FileInputStream(mOutFile);
61-
FileOutputStream outputStream = new FileOutputStream(internalBinary);
62-
IOUtils.copy(inputStream, outputStream);
63-
inputStream.close();
64-
outputStream.close();
65-
66-
//set executable
67-
Utils.chmod(internalBinary.getAbsolutePath(), 0x1ed/*0775*/);
68-
69-
result.setBinaryFile(internalBinary);
70-
71-
} catch (Exception e) {
72-
e.printStackTrace();
73-
result.setResultCode(-1);
74-
result.setMessage("Application error: " + e.getMessage() +
75-
". Please report bug on GitHub of project");
76-
}
77-
}
62+
result.setBinaryFile(mOutFile);
7863
}
7964
return result;
8065
}
@@ -98,27 +83,31 @@ protected String buildArgs(File[] sourceFiles) {
9883
}
9984

10085
if (mBuildNativeActivity) {
101-
String outFile = nameNoExt;
102-
// mOutFile = new File(source.getParent(), "lib" + nameNoExt + ".so");
103-
outFile = "lib" + outFile + ".so";
104-
String cCtoolsDir = Environment.getCCtoolsDir(mContext);
105-
args.addFlags(String.format("-I%s/sources/native_app_glue", cCtoolsDir))
106-
.addFlags(String.format("%s/sources/native_app_glue/android_native_app_glue.c", cCtoolsDir))
107-
.addFlags(String.format("-Wl,-soname,%s", outFile))
86+
if (DLog.DEBUG) DLog.d(TAG, "buildArgs: build native activity");
87+
String soName = "lib" + nameNoExt + ".so";
88+
mOutFile = new File(source.getParent(), soName);
89+
90+
String cctools = Environment.getCCtoolsDir(mContext);
91+
92+
args.addFlags("-I" + cctools + "/sources/native_app_glue/")
93+
.addFlags(cctools + "/sources/native_app_glue/android_native_app_glue.c")
94+
.addFlags("-Wl,-soname," + soName)
10895
.addFlags("-shared")
109-
.addFlags("-Wl,--no-undefined -Wl,-z,noexecstack")
110-
.addFlags("-llog")
111-
.addFlags("-landroid")
96+
.addFlags("-Wl,--no-undefined")
97+
.addFlags("-Wl,-z,noexecstack")
98+
.addFlags("-llog") //lib log
99+
.addFlags("-landroid") //android
112100
.addFlags("-lm")
113-
.addFlags("-o", outFile);
101+
.addFlags("-o", mOutFile.getAbsolutePath())
102+
;
114103
} else {
115104
mOutFile = new File(source.getParent(), nameNoExt);
116105
args.addFlags("-o", mOutFile.getAbsolutePath());
117106
}
118107

119-
if (Build.VERSION.SDK_INT >= 21) {
120-
args.addFlags("-pie");
121-
}
108+
// if (Build.VERSION.SDK_INT >= 21) {
109+
// args.addFlags("-pie");
110+
// }
122111

123112
return args.build();
124113
}

app/src/main/java/com/duy/ccppcompiler/compiler/compilers/GPlusPlusCompiler.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
import com.duy.ccppcompiler.compiler.ICompileSetting;
2323
import com.duy.ccppcompiler.compiler.shell.CommandBuilder;
24+
import com.duy.ccppcompiler.compiler.shell.CompileResult;
2425
import com.duy.ccppcompiler.packagemanager.Environment;
2526

2627
import java.io.File;
@@ -41,6 +42,11 @@ protected String getCompilerProgram() {
4142
return G_PLUS_PLUS_COMPILER_NAME;
4243
}
4344

45+
@Override
46+
public CompileResult compile(File[] sourceFiles) {
47+
return super.compile(sourceFiles);
48+
}
49+
4450
@Override
4551
protected String buildArgs(File[] sourceFiles) {
4652
File source = sourceFiles[0];

app/src/main/java/com/duy/ccppcompiler/compiler/shell/CommandResult.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121
public class CommandResult {
2222

23-
public String message;
23+
private String message;
2424
private int resultCode;
2525
private long time = 0;
2626

app/src/main/java/com/duy/ccppcompiler/compiler/shell/CompileResult.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ public void setBinaryFile(@Nullable File binaryFile) {
4545
public String toString() {
4646
return "CompileResult{" +
4747
"binaryFile=" + binaryFile +
48-
", message='" + message + '\'' +
49-
'}';
48+
"} " + super.toString();
5049
}
5150
}

app/src/main/java/com/duy/ccppcompiler/compiler/shell/NativeActivityCompileResult.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,4 @@ public NativeActivityCompileResult(CommandResult commandResult) {
99
super(commandResult);
1010
}
1111

12-
@Override
13-
public String toString() {
14-
return "NativeActivityCompileResult{" +
15-
"message='" + message + '\'' +
16-
'}';
17-
}
1812
}

app/src/main/java/com/duy/ccppcompiler/compiler/shell/Shell.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,8 @@ public static CommandResult exec(Context context, File file) {
5858
*/
5959
public static CommandResult exec(Context context, String cwd, String cmd) {
6060
if (DLog.DEBUG) {
61-
DLog.d(TAG, "exec() called with: context = [" + context + "], cwd = [" + cwd + "], cmd = [" + cmd + "]");
61+
if (DLog.DEBUG) DLog.w(TAG, "cwd = " + cwd);
62+
if (DLog.DEBUG) DLog.w(TAG, "cmd = " + cmd);
6263
}
6364

6465
long startTime = System.currentTimeMillis();

app/src/main/java/com/duy/ccppcompiler/packagemanager/Environment.java

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -82,13 +82,6 @@ public static String getTmpExeDir(Context context) {
8282
return mkdirIfNotExist(file);
8383
}
8484

85-
/**
86-
* @return temp directory for execute file
87-
*/
88-
public static String getTmpDir(Context context) {
89-
File file = new File(Environment.getToolchainsDir(context), "t");
90-
return mkdirIfNotExist(file);
91-
}
9285

9386
/**
9487
* External storage
@@ -248,7 +241,7 @@ protected static String getEnv(Context context, String variable) {
248241
String ret = null;
249242
final String cctoolsDir = getCCtoolsDir(context);
250243
String[] envp = {
251-
"TMPDIR=" + android.os.Environment.getExternalStorageDirectory().getPath(),
244+
"TMPDIR=" +getSdCardTmpDir(),
252245
"PATH=" + joinPath(cctoolsDir + "/bin", cctoolsDir + "/sbin", System.getenv("PATH")),
253246
"ANDROID_ASSETS=" + getEnv("ANDROID_ASSETS", "/system/app"),
254247
"ANDROID_BOOTLOGO=" + getEnv("ANDROID_BOOTLOGO", "1"),

0 commit comments

Comments
 (0)