- How to make Android apps without IDE from command line
- How to do Android development faster without Gradle
- IntelliJ IDE, but not Gradle
- 1. Install Java
- 2. Install all SDK tools
- Download Android Studio and SDK Tools | Android Studio
- Download the official Android IDE and developer tools to build apps for Android phones, tablets, wearables, TVs, and…
- 3. Code the application
- How to use JavaMail on Android (without Gradle)
- Hello guys!
- 4. Build the code
- 5. Sign the package
- 6. Align the package
- 7. Test the application
- 8. Make a script
- Notes
- Open Source Your Android Code — The Complete Guide
- ADA | Adam Deconstructs Android
- Implementation
- Place code inside an Android Archive Library (AAR) — Step 1 of 6
- About
- Implementation
- Publish library publicly on GitHub with licensing and Docs — Step 2 of 6
- Bintray and Sonatype Setup — Step 3 of 6
- Bintray Implementation
- Sonatype Implementation
- Prepare Project for Upload — Step 4 of 6
- Prepare Library Module With Bintray
- Upload to jcenter— Step 5 of 6
- Why is jcenter better than maven central?
- Implementation
- Use In Project — Step 6 of 6
- Resources
How to make Android apps without IDE from command line
Nov 26, 2017 · 5 min read
A HelloWorld without Android Studio
Update: I’ve made a new course that explain how you can avoid Android Studio and Gradle, but still use IntelliJ iDE:
How to do Android development faster without Gradle
IntelliJ IDE, but not Gradle
In this tutorial, I will show you how you can build/compile an APK (an A n droid app) from your java code using terminal (on Linux) without IDE or in other words without Android Studio. At the end, I will also show you a script to automate the process. In this example, I will use Android API 19 (4.4 Kitkat) to make a simple HelloWorld. I want to say that I will do this tutorial without android command which is deprecated.
1. Install Java
First, you need to install java, in my case, I install the headless version because I don’t use graphics (only command line):
2. Install all SDK tools
Then download the last SDK tools of Android which you can find here:
Download Android Studio and SDK Tools | Android Studio
Download the official Android IDE and developer tools to build apps for Android phones, tablets, wearables, TVs, and…
I recommend to unzip it in the /opt directory inside another directory that we will call “android-sdk”:
Now, we have to install platform tools (which contain ADB), an Android API and build tools.
In fact, if you are on Debian, you can avoid installing platform-tools package and only install ADB like that:
3. Code the application
In this example, I want to compile a simple HelloWorld. So, first, we need to make a project directory:
Then we have to make the files tree:
If you use exernal libraries (.jar files), also make a folder for them:
You have an example here:
How to use JavaMail on Android (without Gradle)
Hello guys!
Make the file src/com/example/helloandroid/MainActivity.java and put that inside:
Make the strings.xml file in the res/values folder. It contains all the text that your application uses:
The activity_main.xml is a layout file which have to be in res/layout:
You also have to add the file AndroidManifest.xml at the root:
4. Build the code
Now, I recommend to store the project path in a variable:
First, we need generate the R.java file which is necessary for our code:
- -m instructs aapt to create directories under the location specified by -J
- -J specifies where the output goes. Saying -J src will create a file like src/com/example/helloandroid/R.java
- -S specifies where is the res directory with the drawables, layouts, etc.
- -I tells aapt where the android.jar is. You can find yours in a location like android-sdk/platforms/android-/android.jar
Now, we have to compile the .java files:
If you have use an external, add it the classpath:
The compiled .class files are in obj folder, but Android can’t read them. We have to translate them in a file called “classes.dex” which will be read by the dalvik Android runtime:
But if you use external libraries, do rather:
If you have the error UNEXPECTED TOP-LEVEL EXCEPTION , it can be because you use old build tools and DX try to translate java 1.7 rather than 1.8. To solve the problem, you have to specify 1.7 java version in the previous javac command:
The -source option specify the java version of your source files. Note that we can use previous versions of Java even we use OpenJDK 8 (or 1.8).
We can now put everything in an APK:
Be aware: until now, we used three AAPT commands, the first and the second one are similar but they don’t do the same. You have to copy the classes.dex file at the root of project like above! Otherwise, AAPT won’t put this file at right place in the APK archive (because an APK is like a .zip file).
The generated package can’t be installed by Android because it’s unaligned and unsigned.
If you want, you can check the content of the package like this:
5. Sign the package
To do so, we firstly create a new keystore with the command keytool given by Java:
Just answer the questions and put a password.
You can sign an APK like this:
Note that apksigner only exist since Build Tools 24.0.3.
6. Align the package
It’s as simple as that:
Alignment increase the performance of the application and may reduce memory use.
7. Test the application
To test the application, connect your smartphone with a USB cable and use ADB:
But before run this command, I recommend to run this one:
If there is an error during installation or running, you see it with that command.
Voila! Here’s the result:
8. Make a script
If you don’t want to run all these steps every time you would like to compile your app, make a script! Here’s mine:
Notes
- You can remove “test” if you just want to compile without testing.
- This script only compile and run the app on the phone. But I can also make a script to automatically generate a new project like this one. I think I have a good idea to do so, but I need to know if you are interested. If it’s the case, please leave a comment or send me an e-mail.
- I can also complete the script for external libraries. Likewise, let me know if you want this.
If you have any questions, don’t hesitate to ask them below or by e-mail ;-)! EDIT: Well I’m very busy actually…
Источник
Open Source Your Android Code — The Complete Guide
ADA | Adam Deconstructs Android
Aug 29, 2017 · 8 min read
9/17/17 Update: JitPack.io appears to be a fast and easy alternative to open source Android code vs. the method below by integrating directly with GitHub. I have not tested JitPack so please share your feedback in the comments if you’ve implemented it.
You’ve spent hours building cool shit. What’s the next step? By open sourcing your work you’ll (hopefully) provide valuable code to the Android community, receive constructive feedback, and collaborate on building something better than what you originally had.
The current state of open sourcing for Android is unintuitive, involving integrating multiple services, waiting for manual approvals, and before this post, spending hours Googling obscure steps. That’s why I created a beginning-to-end guide to expedite the process.
The more open sourced code, the better.
Implementation
I will walk through each step of how I open sourced a CustomRippleView library for Android.
Place code inside an Android Archive Library (AAR) — Step 1 of 6
Besides open sourcing, AARs are useful when building multiple apps or versions with the same components.
About
- Structurally the same as an Android app module
- Includes source code, resource files, manifest (unlike JAR)
- Compiles into Android Archive (AAR) rather than into APK
- Post to some maven repository where devs can pull it as a dependency through Gradle (can also convert an app to a module)
- Code Overlap — The app module will take precedence over a library if a resource ID is defined in both, library defined first will take precedence between libraries.
Implementation
If you’re creating a standalone library outside an existing app you’ll want to both create a new project to host the library module as well as test the library module in an existing app.
1. Build the open sourced library module in an existing project so that you can test the code as you go.
a) Create library module
Click the plus or File > New > Module > Android Library > provide unique Library Module Name ( customrippleview)
b) Ensure local library module shows in project and compile local library in the app module.
build.gradle ( app module)
Add tools:replace=”android:name” to the app module’s Manifest file.
2. Create a new Android project to host the open source code by itself so that it can be uploaded to bintray
Create the default app module with app following the name ( customrippleviewapp) to differentiate the app module name from the open source library module we’ll create in the next step.
- Application name: CustomRippleViewApp
- Company domain: com.ebay.customrippleviewapp ( needs to be a domain you own in order to get approved for open sourcing)
- Package name: com.ebay.customrippleviewapp
3. Add your library module (refer to step 1A above)
4. Place the open source code inside new library module created
5. Remove original app module
Right-click on app module > Open Module Settings > remove original app module.
6. Choose resources to make public (Optional)
All resources default to public: By declaring at least one resource public it makes the rest private
res > values > public.xml
Publish library publicly on GitHub with licensing and Docs — Step 2 of 6
Apache License 2.0 is one of the most popular, similar to the MIT License, but provides grant of patent rights from contributors to users. Apache 2.0 is commonly found in Android, Apache, and Swift.
Make sure library module ( customrippleview/) and build.gradle are not in the ignore list list and edit .gitignore to only contain library module files added.
Bintray and Sonatype Setup — Step 3 of 6
You only need to go through this painful steps once to setup your bintray account. Praise the lord! As this isn’t difficult, but the most annoying step.
Bintray Implementation
2. Create new repository
a) Add New Repository → Type: Maven → Default Licenses: Apache 2.0
b) Use lowercase naming convention: customrippleview
3. Enable auto signing
Enter Repository → Edit → General Settings → select GPG sign uploaded files automatically
a) Generate keys (Only done once for bintray account)
In terminal for project:
Fill in Real name, Email address, and passphrase. If command does not work, run following command to install gpg and retry the command above.
View keys created
Upload the public key to keyservers. Call the following command and replace PUBLIC_KEY_ID with value after 2048 in the pub line.
Export both public and private key.
Enter your passphrase when prompted for private key.
Copy and paste public and private keys into bintray: Under profile Edit > GPG Signing. Make sure to copy and paste from beginning and end tags or else bintray will not accept the keys.
Sonatype Implementation
This step requires filling a Jira ticket. If you thought you could escape Jira in your free coding time, you’re mistaken. It’s not too bad, as both times I’ve submitted a ticket they’ve approved it within the same day.
3. Provide bintray your Sonatype OSS username
In your bintray profile Edit > Accounts > Sonatype OSS User: _____________
Prepare Project for Upload — Step 4 of 6
Prepare Library Module With Bintray
1. Add Jcenter and Maven dependency
Add to project’s build.gradle (not app or library build.gradle)
2. Define your bintray username, api key, and GPG Passphrase.
This info should be secure, which is why we’re adding it to local.properties which should not be tracked in GitHub as it is commonly ignored at the start of an Android project in the .gitignore file.
3. Add repository information and build scripts
Update library’s build.gradle with repository information and add scripts for building library files and uploading the built files to bintray.
4. If using Kotlin in your code, disable Javadocs in library’s build.gradle
Upload to jcenter— Step 5 of 6
Why is jcenter better than maven central?
- Delivers library through CDN → faster loading
- Largest Java Repository on earth
- “Friendly” UI (perhaps in comparison)
Implementation
1. Upload to bintray/jcenter (Once Sonatype Open Source Project Repository Hosting request is approved)
Expected Result: BUILD SUCCESSFUL
Expected Result: BUILD SUCCESSFUL
I kept getting the BUILD FAILED response when attempting to upload. After many hours cursing at my terminal I realized even with this message, the package was being uploaded, so check the bintray package UI.
2. Sync to Jcenter for easy one line implementation in Android
3 hrs — How is this not automated too?!
a) Under the uploaded package settings select Add to JCenter
b) Select Host my snapshot…, fill in group id for package, and Select Send
Once approved, you’ll receive an email.
In the meantime you can check by searching on bintray which will also show when your package is hosted.
3. Maintaining library
Linking to jcenter only needs to be done once. Moving forward, any package changes (updates, deletes), will be reflected in jcenter 2–3 min later.
- Updates: Change the libraryVersion in library module and re-upload using Step 5, part 1.
- Deleting: Remove each version from bintray before removing the entire package.
Use In Project — Step 6 of 6
Declare the library in gradle and call the desired files.
build.gradle ( app module)
- Group_Id — com.ebay.customrippleview(package name followed by group name)
- Artifact_Id: customrippleview
- Version: 1.0
Resources
- JitPack.io — JitPack is an Android specific open sourcing solution that appears to work seamlessly with GitHub repositories. For a premium, JitPack also provides private library hosting. I haven’t given it a try, but thanks to Rakshak and Vikarti for calling it out in the comments below!
- The Cheese Factory Blog — How to distribute your own Android library through jCenter and Maven Central from Android Studio. BIG thanks! There were details that changed since this was published in 2015, but it was a great place to start.
- Android Studio — Create an Android Library
- bintray
- sonatype
- sonatype — request to host new open source project ( only works when logged in to sonatype)
- bintray documentation — Including your Package in JCenter
- CustomRippleView GitHub sample and JCenter hosting
I’m Adam Hurwitz — hit the clapping hands icon and check out the rest of my writing if you enjoyed the above | Thanks!
Источник