Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: ff65681b52
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Summary - Extender code coverage reportSummary
Coveragecom/defold/extender - 43.3%
com/defold/extender/builders - 0%
com/defold/extender/cache - 33.3%
com/defold/extender/cache/info - 100%
com/defold/extender/log - 14.2%
com/defold/extender/metrics - 38.8%
com/defold/extender/process - 73.4%
com/defold/extender/progress - 90.6%
com/defold/extender/remote - 89%
com/defold/extender/services - 58.8%
com/defold/extender/services/cocoapods - 51.9%
com/defold/extender/services/data - 80.7%
com/defold/extender/tracing - 21.8%
com/defold/extender/utils - 0%
|
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: ffdf7fd5e5
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
ekharkunov
left a comment
There was a problem hiding this comment.
Overall good. See comments and suggestions
| File artifact = new File((String) pathValue).getCanonicalFile(); | ||
| GradleArtifact.Kind artifactKind; | ||
| String resourcePackageName = null; | ||
| if ("exploded-aar".equals(kind)) { |
There was a problem hiding this comment.
Is it worth to make strings as constants?
| private static final String JAR_R8_RULE_PREFIX = "META-INF/com.android.tools/r8"; | ||
| private static final String GENERATED_EXTENSION_KEEP_ATTRIBUTES = | ||
| "-keepattributes *Annotation*,Signature,InnerClasses,EnclosingMethod,MethodParameters,Exceptions"; | ||
| static final int MAX_GENERATED_EXTENSION_CLASSES = 32 * 1024; |
There was a problem hiding this comment.
I think it's worth to move parameters to config file. In case if we need change it in production it's easier and faster change configs instead of rebuilding and redeploying jar
| if (k.equals("PROGUARD")) { | ||
| continue; | ||
| } | ||
| boolean r8Environment = k.equals("R8") || k.equals("R8_VERSION"); |
There was a problem hiding this comment.
I don't understand why we need that code here. If merged app manifests doesn't contain R8-related stuff than we even doesn't hit this. If R8 stuff presented - we will render environment value in any case. What is the purpose of this code?
| return context; | ||
| } | ||
|
|
||
| Map<String, Object> createR8BuilderContext(Map<String, Object> src) throws ExtenderException { |
There was a problem hiding this comment.
Why we need such processing specifically for R8-related environment?
|
I made fixes (if I understood all right), thnak you! |
Android builds can now use R8 for code shrinking and obfuscation, replacing the legacy ProGuard path. R8 preserves Android entry points, extension APIs, dependency consumer rules, and ServiceLoader metadata while producing a mapping file for deobfuscation. Builds without
_app/app.keepcontinue to use D8 without shrinking.Fix #566
Technical changes
META-INFmetadata, dex output, andmapping.txt.DM_DEBUG_DISABLE_PROGUARDwithDM_DEBUG_DISABLE_R8.releaseRuntimeClasspath, writes dependency locks and the dependency tree, and emits a deterministic JSON artifact manifest. Gradle is skipped entirely when no dependencies are declared.EXPLODED_AARdirectories and Jetifier-awarePROCESSED_JARartifacts. Standalone JARs remain unprocessed when Jetifier is disabled, whileandroid.useAndroidXstays enabled independently of transformation..gradle/unpackedcache and its extra copy/unpack pass. Artifact paths are canonicalized, validated, deduplicated, and consumed directly from the shared immutable Gradle/AGP cache, reducing duplicate cache storage and filesystem work.jars/classes.jar,jars/libs, resources, assets, JNI libraries, manifests, and consumer rules._app/app.profiles no longer invoke ProGuard, and the R8 path targets Defold’s API 21+ platform baseline.