## PRO-TIPS for your (non-pro) Windows RT ## - Windows RT Development and Hacking

Well I guess this is more of a 'list of utilities, commands, and features' that might be buried so deeply into windows rt that you didn't know it was there. I don't know about other surface/winrt users but I have gotten more advanced configuring my surface rt than I ever did on an x86. Now I usually end up needing to configure my x86 devices to provide the same functionality I expect on my tablets.
So I don't think we have a list like this and I'm sure a lot of you have your own 'pro-tips', so maybe we can compile a list of hidden gems we can use with windows rt into this thread so that we collectively can reference or individually don't forget
So here is a short list to start off :
Utilities -- Many more utilities can be found by browsing c:\ProgramData\Microsoft\Windows\Start Menu\Programs
WF.msc (type at command prompt or Win-R key run window) : (Windows Firewall with Advanced Security) although they removed the control panel applet it seems they left in this mmc plugin.
gpedit.msc : group policy editor... somewhat hidden but they left this in
resmon (Resource Monitor)
msconfig (System Configuration)
msinfo32 (System Information)
steps (Steps Recorder) : this is a utility that will capture your activity as screenshots to play back or upload for others to see.
Modify whether links or html files open in Desktop or Metro versions of Internet Explorer :
Open desktop Internet Explorer, click on gear icon and choose Internet options. Now click on 'Programs' tab and select your preference from the 'Opening Internet Explorer' section dropdown.
Keyboard Shortcuts :
Metro snap via keyboard : Hold Windows and tap . (period) Keep holding down windows key and tap left, right, up, or down
Win-Tab : While alt-tab lets you cycle 'desktop' programs, Windows key + Tab cycles through 'metro' app list
Win-X : Show advanced start menu (same as right clicking start menu)
Win-D : Show/Hide desktop
Win-P : Pick from various multi-monitor configurations (duplicate/extend/pc only/external monitor only)
Console Commands
'HELP' : Show a list of all commands you can get more help on.
'WHERE' : Type where wf.msc (for example) and it will tell you where that program/file exists if it is in any of your PATH'ed folders.
'WMIC' : a very deep well of information, type WMIC /? to see list of all modules
wmic volume list brief (shows all mounted drives/volumes)
wmic qfe list brief (shows all installed windows updates)
'SYSTEMINFO' : another system info command, sort of a command line version of msinfo32
'TREE' : show an 'ascii-art' tree of sub-folders for the folder you are in.
'ASSOC' : command line ability to set file associations
'CERTUTIL' : can be used (among other things) for computing file hashes
certutil -hashfile [filename] [MD5|SHA1|SHA256] so for example :
certutil -hashfile myfile.zip sha1
Associations / Context menu / 'Send To' programs :
Create a shortcut to control.exe /name Microsoft.DefaultPrograms to quickly go to this control panel applet.
Use command line ASSOC to set file associations
Manage 'Send To' folder by opening 'windows' explorer, typing shell:sendto into the location bar to be taken to a folder showing all your 'send to' programs'. You can drop shortcuts to other programs (provided those programs accept command line arguments). Now you can right click a file in windows explorer and 'send to' programs like 7-Zip, Paint.NET, notepad++, etc.
Add an "Open with Notepad++" or other top level context menu for all files :
Open registry editor and browse to : HKEY_CLASSES_ROOT\*\shell.
Right-click on “shell” and choose to create a new key, calling it “Open with Notepad++”
Create a new key below that one called “command”
Double-click on the (Default) value in the right-hand pane and enter "c:\path_to_npp\notepad++.exe" $1
To have the menu item show the notepad++ icon do these extra steps :
Right click the "Open with Notepad++" key (which you created) and add a new string value called "icon"
Double click new "icon" value and set its string value to "c:\path_to_npp\notepad++.exe"
In all steps above make sure you enter the path to notepad++ on your machine instead of the path entered.
http://www.howtogeek.com/howto/wind...th-notepad-to-the-context-menu-for-all-files/
Make 'command prompt here' context menu when right clicking folder in windows explorer : http://www.howtogeek.com/howto/wind...-always-display-for-folders-in-windows-vista/
Enable 7-Zip Context Menu :
Run regedit (Registry Editor), and drill into / expand HKEY_CLASSES_ROOT\*\shellex\ContextMenuHandlers.
Now right click on 'ContextMenuHandlers' and choose 'permissions'.
Click 'Advanced' button.
On advanced Security Settings screen (at the top) choose Change (owner) link.
When selecting a user or group screen comes up click 'Advanced', then 'Find Now', and in search results choose 'Administrators' (may need to widen column to distinguish from singular 'Administrator').
After highlighting Administrators, click OK button to go back to Advanced Security Settings screen.
Now you are able to click on 'Administrators' and click 'Edit' and select 'Full Control' and click ok to apply permission.
Keep clicking ok on dialogs till you are back at registry editor.
Now run 7-Zip as administrator, go into tools menu and select options.
Then on 7-Zip tab choose 'Integrate 7-Zip to shell context menu' and click ok to close dialog.
Context menu should now appear when right clicking on files in windows explorer.
Disabling Connected Standby :
This is only a good idea if your tablet will always be left on a charger or 'shut down' when not in use. If you turn off connected standby and set your display to turn off after... say 5 minutes, then after 5 minutes your display will really power off (backlight as well) but any desktop programs will continue to run. You might want to do this if you are running a web server or some other process in background. When you disable connected standby, many other options appear in your power options 'advanced power settings' page. If you do this I recommend you 'Create a power plan' on the 'Choose or customize a power plan screen first'.
To toggle connected standby feature on or off, modify the :
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\CsEnabled key, setting to 0 for 'off' or 1 for 'on' and reboot to take effect.
Node Chakracore :
This is really an undocumented bonus 'add-on', made by Microsoft which you can run even on windows rt devices which are not in test-signing mode. For those who are not familiar, NodeJS is a console-based javascript scripting environment. Standard Node.js uses v8 javascript engine (same as google chrome), however this 'node-chakracore' version uses the chakra javascript engine (which is the latest version used in edge browsers). Microsoft is providing this for raspberry pi users running Windows 10 on ARM but they also work on Windows RT.
I made a utility here if you prefer to try an automated means of installing
Install Node.JS (node-chakracore) :
Download the latest ARM release from : https://github.com/nodejs/node-chakracore/releases
Extract that archive to (for example) c:\nodejs
Add that directory (which you extracted to) to your path environment variable.
(Optional) Install/Setup NPM (lets you install packages from npm repository) :
Download https://github.com/npm/npm/archive/master.zip, save somewhere.
Extract it to (for example) c:\npm.
Open windows explorer and type %AppData% into the address bar and hit enter.
Within your AppData directory, create an "npm" directory.
Double click on npm folder you just created from windows explorer
Click into the address bar to see the full path and remember (or copy) this path for next step and later.
Save the following to file named "npm.bat" and save into the directory you just created/copied
Code:
@node c:\npm\npm-master\cli.js %*
(If you extracted npm elsewhere, update the batch file to reflect actual location)
Create an etc directory under this appdata npm folder
Create an separate etc directory under your node folder (c:\nodejs if you used suggested default)
Copy .npmrc file from c:\npm\npm-master to c:\node
Rename and get rid of the '.' from the filename so the filename is just npmrc
edit that npmrc file In notepad and add the following lines :
Code:
globalconfig=c:\users\username\appdata\roaming\npm\etc\npmrc
prefix=c:\users\username\appdata\roaming\npm
(make sure to substitute your username in the above this base folder is the folder I told you to remember/copy in previous steps)
Having saved those changes to npmrc under c:\node\etc, copy that file to your appdata\npm\etc directory as well.
Add the path of your appdata\npm directory your path environment variable. If you install global packages they will install commands/batch files into this folder. If it is pathed you can exec them as native commands. This path is also where we put the npm.bat so it can be run from anywhere.
A useful demonstration if you have configured the both npm and node correctly is to install cash (an implementation of unix shell commands) by typing from a command prompt :
Code:
npm install -g cash
That should take a several minutes to complete (hopefully successfully). When done you can run 'cash' or just '$' at a command prompt to bring up simulated Linux prompt from which you can type 'help' to see supported commands. These commands interop with windows commands as well so you can mix (see cash link above).​
(Thanks to @black_blob for discovering this node/npm)
I will add more info or cleanup as needed, feel free to post your own, if needed I can compile it into first post to work towards a guide if anyone wanted to make one.

I modded the Windows 10 Chakra(non-core) to run on 8.1 as a part of my earlier NodeJS port. By the way, I also had Microsoft Edge running with it at a time.(EdgeHTML)
I wonder if I should continue my backports from Win10

You mean other programs/frameworks? You have brought over some great stuff, so yes absolutely! Anything you have in mind?

nazoraios said:
You mean other programs/frameworks? You have brought over some great stuff, so yes absolutely! Anything you have in mind?
Click to expand...
Click to collapse
I have in mind to backport the UWP framework, or maybe even a FrankenKernel(10 kernel, 8.1 userspace). Microsoft Edge works without needing UWP, as you can use edgehtml like mshtml for embedding

You would definitely be my hero if you could bring over Edge, preferably with somewhat recent (EdgeHTML? rendering) and Chakra javascript engine.
Not sure how FrankenKernel and UWP support could work out but both could potentially be awesome... guess its the details which I'm sure you have a better idea than me. So do you think we would be able to run (open source?) Windows 10 apps and would the 'developer mode' be brought over with the kernel or is that 8.1 userspace which would require 8.1 developer license signing (and renewing every 6 months)? Or would the UWP part just be for console or node-chakracore like it is on IOT?

nazoraios said:
You would definitely be my hero if you could bring over Edge, preferably with somewhat recent (EdgeHTML? rendering) and Chakra javascript engine.
Not sure how FrankenKernel and UWP support could work out but both could potentially be awesome... guess its the details which I'm sure you have a better idea than me. So do you think we would be able to run (open source?) Windows 10 apps and would the 'developer mode' be brought over with the kernel or is that 8.1 userspace which would require 8.1 developer license signing (and renewing every 6 months)? Or would the UWP part just be for console or node-chakracore like it is on IOT?
Click to expand...
Click to collapse
Windows 10 kernel & system, Windows 8.1 explorer.exe, dwm and other tiny GUI bits
I have a Windows Server ARM64 build, but that's not 32-bit

Yea that sounds daring... Don't brick your device please Too bad no 32bit gui bits to borrow. I doubt they would bring the Ubuntu for Windows 10 subsystem to arm, but technically i'm sure they could since Ubuntu has arm and pi2 image.... still would be neat. Also I think they added ssh server to pi2 but not sure if it would be easy to 'extract' and borrow.
We will be watching you commander...

nazoraios said:
Yea that sounds daring... Don't brick your device please Too bad no 32bit gui bits to borrow. I doubt they would bring the Ubuntu for Windows 10 subsystem to arm, but technically i'm sure they could since Ubuntu has arm and pi2 image.... still would be neat. Also I think they added ssh server to pi2 but not sure if it would be easy to 'extract' and borrow.
We will be watching you commander...
Click to expand...
Click to collapse
The Ubuntu support uses the Linux binary compatibility SubSystem, also known as Astoria

black_blob said:
I have in mind to backport the UWP framework, or maybe even a FrankenKernel(10 kernel, 8.1 userspace). Microsoft Edge works without needing UWP, as you can use edgehtml like mshtml for embedding
Click to expand...
Click to collapse
That would be even more amazing than a running build of Windows 10 Mobile. So you'd have a "full" OS with the befinits of running UWP. That would def. insure the future of Windows RT.
It would be even better if astoria would work on it too. So you'd even able to run android apps.

I need help for the nodejs and the npm instructions. Can you explain it out in details for morons?

Sorry late reply... which steps are you getting confused at (for node/npm install) ? So for starters :
- if you open a command prompt and type "node -v" does it tell you the version of node your running? If so, what version does it say?
- if you type "npm -v" does it tell you the version of npm you are running or give an error? Tell version or error.
So i'll start with that to make sure your paths are set up.

I created an installer utility to install node-chakracore along with NPM. Hopefully this will make it easier for other or myself to install or upgrade as new versions of node-chakracore and npm come out.
The final step in the process (updating the system PATH environment variable) requires admin permissions so right click executable and run 'As Administrator'. If you prefer to set the environment variables yourself, this step will tell you the paths it would add.
9/13/16 : Updated default node chakracore download link to new 7.0.0-pre9 release, added a 'Complete' tab with links to further resources and made UI fix

Related

[APP] Flash Whitelist Manager for Win RT / 8

I have had this coded for a while now but it only became infinitely more useful after the Surface and other RT devices can be jailbroken and run Python! Jailbreak your Surface, install Python 2.7.3, and when you open the .pyc file, have it open with python.exe!
If you find any bugs or have suggestions or comments, please let me know!
*****
Name: Whitelist Manager
Compatibility: Windows 8 / Windows RT
Version: 1.0 beta 3
Code: Python 2.7.3
*****
This simple program allows you to add to and remove from a local list of domain names that automatically synchronize with the IE10 (Modern UI) flash whitelist.
If your IE whitelist is ever overwritten through a Microsoft update, running this program will automatically restore all the sites back into the whitelist.
Domain names should be entered as follows (without quotes):
"microsoft.com"
Before using this program, open IE10 in desktop mode, and go to: "Tools -> Compatibility View Settings"
From there, UNCHECK the option to download updated lists. This only needs to be done once.
Finally, any time changes are made to the whitelist, they only become active after going to "Settings -> Internet Options"
in the Modern UI browser and deleting the browsing history.
NOTE:
This program ONLY synchronizes its whitelist with IE if you exit it via the menu option.
Pressing the close button or exiting in any other way than the built in method will not synchronize with the IE whitelist.
Synchronization works both for added and removed domain names.
DISCLAIMER:
This program is provided AS IS with no warranty express or implied, to be used at your own risk.

[Guide] Debian Kit & Limbo PC Emulator (QEMU x86) for Dual-booting Linux on Android

[Guide] Debian Kit & Limbo PC Emulator (QEMU x86) for Dual-booting Linux on Android
Note to mobile readers: view in light mode with XDA app (settings, near the top), view online with a browser (press menu and view online), or download google drive from the marketplace and follow the link to the main document in this guide, you should be prompted what to open that link with, choose google drive and you'll be greeted by an very friendly formatted and constantly updated guide. You can also check a box within the google drive app that allows you to view offline... and on with the show.Legend/Key/Guide for Guide
Yep that's happening. This is designed to avoid most questions about the excessive use of colour coding throughout the guide.
Orange text=chapter titles & section titles.
Yellow text=things that are partly under construction but complete enough to be used with caution
Red text=under construction and for education purposes only when used in the table of contents
Or
Red text=example command that should be modified based on system that you are running on before being used
Green text=complete aside from a missed or stray preposition.
Cyan text=text that can be copy/pasted into a terminal without any modification except for 2 cases
Cyan_text&Red_text=the red text should be modified for your system before use
# and $ should be ignored when copying as that symbol will already be on your terminal
Blue text=examples of what your terminal will output when using a supplied command. This is contextual to the guide and I try to include the command once in the document and a second time near the top of the dump.
Or
Blue text=when used in table of contents denotes things that likely are completely aside from making additions and are low on the priority list to update for the author of this guide.
Grey text=are full dumps of what a command should output and do without errors. These dumps have a reference pointer at the beginning of each so that you may find where in the guide they their relevant to
Pink text=when used in the table of contents this is to show what sections are completely new.
Note to mobile readers: view in light mode with XDA app (settings, near the top), view online with a browser (press menu and view online), or download Google drive from the marketplace and follow the link to the main document in this guide, you should be prompted what to open that link with, choose Google drive and you'll be greeted by an very friendly formatted and constantly updated guide. You can also check a box within the google drive app that allows you to view offline... and on with the show.
Link to Full Guide on google docs:
https://docs.google.com/document/d/1ssVeIhdBuuy8CtpBP1lWgUkG6fR6oHxP20ToYPPw6zI/edit?usp=sharing
Link back to XDA thread
http://forum.xda-developers.com/showthread.php?p=40434313#post40434313
Public Editable doc
https://docs.google.com/document/d/1CIkOT7iX62z8fpDckoYCw48UtIImjhzG6IJN6E6Qe2E/edit?usp=sharing
[Guide] Debian Kit & Limbo PC Emulator (QEMU x86) for Dual-booting and more
Draft2 Linux android multi-node cloud computer tutorial.
Contents
1.Setting up base system(functional/\under construction)​1:1 Updates (05202013) XDA Sync happening 8:30pm- added subsection 5:10. added descriptors to section 4:4:* Added/Completed two new mini guide to section 1:5:1:*{{XDA content sync happened 05182013} google document sync will happen after some time}
1:2 - Downloads for android device (functional)
1:3 - Installing Linux system to Android Device (functional)
1:3:1 Verify no major errors are present (functional)
1:3:2 Start ConnectBot (functional)
1:4 Manual install (functionally complete/partially under construction)
1:5 Other methods of running Linux alongside Android (All sub sections Under Construction)
1:5:1 Using Limbo PC Emulator (QEMU)
1:5:1:1 Apps & Files to download for QEMU
1:5:1:2 QEMU Linux Install Guide
1:5:1:3 QEMU Linux Setup Guide(new)(functional)
1:5:1:2-1 Method one: Install to virtual hard drive with QEMU(new)(functional)
1:5:1:2-2 Method two: use a computer to make a virtual install(new)(functional)
1:5:1:4 QEMU Integrating with the rest of Main guide
1:5:1:5 QEMU tips and tricks
1:5:2 Using Complete Linux Installer
1:5:2:1 Apps & Files to download for Complete Linux Installer
1:5:2:2 Complete Linux Installer Installer Guide
1:5:2:3 Complete Linux Installer Setup Guide
1:5:2:4 Complete Linux Installer Integrating with the rest of this guide
1:5:2:5 Complete Linux Installer tips and tricks
2.Installing additional packages​2:1 installing packages before devstack or openstack (Under Construction)
3. Setting up cloud system(Under Construction)
4. Additional notes and hints​4:0 Sites that have been exceptionally (updates contently)
4:1 apps for android that make things easier (functional)
4:2 linux software and or packages that I've tested (under construction)
4:3 commands for apt-get and others I've found useful (functional)
4:3:0 Android command line commands (new)
4:3:1 Apt-get commands (functional)
4:3:2 Command line commands for linux (functional)
4:3:3 Connectbot optimization guide (functional)(newly modified)
4:3:3-1. Linux Boot/Mount automation (newly modified)
4:3:3-2 Linux Un-mount/Kill automation (newly modified)
4:3:3-3. Connectbot “Local” SSH setup (newly modified)
4:3:3-4. Other good combos to use after using 'linuxBoot’ (newly modified)
4:3:4 Remote RDP debian kit guide (functional)
4:4 Rom Tool Box user Tips (brand new and no where else)
4:4:1 Scripts (new content)
4:4:2 Performance Mods (under construction)
4:4:3 General guidelines (under construction)
4:4:4 Useful tips (under construction)
5.Debugging\Known issues with solutions(Constant Construction:Completion Relative)​5:1 debian install problems
5:2 debian manual install issues
5:3 additional packages problems
5:4 reinstallation problems
5:5 How do I solve [My device/linux] issue(s)?(functional)
5:6 How to do a dump like the author?(functional)
5:7 Can I use this to completely replace my Android OS(new/\functional)
5:8 How do I add repositories to Debian?(new/under construction)
6.Introduction, Disclaimer, note to forum Moderator(functional)​6:1 Introduction
6:2 Disclaimer
6:3 Note to forum Moderator
6:4 Statement of long term goal for this project
6:5 Distillation of current project completion
7.Getting comfortable and customizing your new system​7:1 Connection Methods(under construction)(Mini-intro added)
7:1:1 Connecting locally
7:1:2-2.1 Connecting wirelessly through wifi(functional)
7:1:2-2.2 Remote RDP in from a second computer (New)(functional)
7:1:3 Connecting wirelessly through bluetooth(Mini-intro added)
7:1:4 Connecting wirelessly through data network
7:1:5 Connecting wirelessly through atana directly
7:1:6 Connecting through USB with computer
7:1:7 Connecting through USB with USB host mode
7:1:8 Connecting through visible light spectrum
7:1:9 Connecting though invisible light spectrum(New links added)
7:1:10 Connecting though directed/focused light
7:1:11 Connecting through audible sound
7:1:12 Connecting though inaudible sound
7:2 Customization of GUI(under construction)
7:2:1 Saving Electrons(functional)
7:2:2 Making it Pretty(functional)
7:3 Making things happen without excessive user input(under construction)
7:4 Methods of installing or unpacking(under construction)(New)
7:4-4. Installing from sources.(functional)(New)
7:4-4.1 Unpacking tar.gz files(functional)(New)
7:4-4.2 Installing Java for ARM from source(functional)(New)
7:4-4.3 Adding Commands to Bash(functional)(New)
7:4:4.1- Installing Map Tools(under construction)(New)
7:4:4:2 Solved Installing jMonkey on Android(functional)(New)
8.Sources of information and content(functional, nearly up to date)​8:2 Dumps I’ve taken and Pictures worth sharing (under construction)
8:2:1 example: installation without errors (complete)
8:2:2 Example of running fdisk -l (complete)
8:2:3 Example of running mk-debian (complete)
8:2:4 Example of the first time you run deb command (complete)
1:1 Updates
Here I’ll try to keep you up to date with where I am with this project. (Date) in the table of contents reflects the last time that I made a significant update to this guide. {notes} in the table of contents states the nature of the update, if the change is significant it will be referenced here so that you may find the modifications to the guide quicker.
UPDATES APPENDED: see Main Doc for full list of all updates.
05182013- manual install of java has issues with running '.jar' files from the command line, there seems to be another version or method to try or it may be a matter of downloading and applying new libraries to the java install itself, I'll be trying bothe (first the lib or dependency search) but will also end up doing a reinstall of the entire debian os again. Installing from source packages is very use at your own risk and running ontop of a rooted android which you've already been warned is use at your own risk; seems like it be risky, yep, but I've yet to re-root my device for what feels like 2 months (I tell you this because I believe the install instructions to be nearly complete and completely reliable) installing things after that seems hit and miss but so long as you're not foolish much of this guide elsewhere is safer than instructions found elsewhere.
Did some polishing of section 7 and added usefull links that I hinted in the past.
Moved section 6:6 Legend/Key/Guide for Guide to the top of the guide, mostly so I can keep the formatting consistent without loading back and forth between sections. Going to Update the XDA forum posts tonight, Google to google sync still pending...
05192013- Added some links to section 4. The commands in section 7 with red text in only one spot cannot be trusted and the commands right now are suspect right now, they'll be updated as I figure out what's wrong and this statement will be struck though. Java support with development tools and install instructions not far off now...in unrelated news, added new sections 1:5:* & 4:4:*, these right now are place holders for what is to come in the future, I'll be focused on the Java thing that's a bit weird on my system and wrapping up the install from source as well, just bouncing round the other places we'll go. Added new section with a little content; 4:3:0 Android command line commands, I'll be adding more as eventually I'd like to have linux tell android what to do and android to be able to do the same.
05202013- added new subsection to section 5:10 to help update answers to questions received through XDA. Added a bit of content to sections 4:4:* mostly intor fluff so I don't forget where I was going. Did some work for money so new content is still pending for the guide, will likely end up with more time tomorrow...
05212013- currently adding some content to 1:5:1, just couldn’t leave it alone added a bunch of content to that section... think I can call the two new guides functional for Limbo QEMU Linux Installation, comments welcome if it barfs on your device... so yeah made/completed a new section “7:4:4:2 Installing jMonkey” you can now install and run jMonkey naively on Android using Debian Kit and openjdk packages installed on your rooted phone or tablet, using directions in section ‘7:1:2-2.2 Remote RDP in from a second computer’ you can connect into it and develop on your Android device but with the full keyboard experience, then if ya need to go on the go you can save your work and reconnect locally on the device with directions from section ‘4:3:4 Remote RDP debian kit guide’ and continue your development project anywhere you’ve got time hope this helps game makers and app developers as this program outputs in formats that can then be run on the android side with full graphical bliss ... back to work on java compatibility?, looks like I might have to re-install Debian as I've mucked around in the system in a bad way but that's what the guide is for and I'll be working almost all day on the guide, check back often as content will be flowing in. XDA postings updated today 05212013 sorta, the character limit on XDA is now a limiting factor, I will split the document between posts for now and work on making the sections in the Google doc split correctly or something... Updates successful to all educational postings on XDA thread, google drive internal sync still pending but I've been at this for 14 hours or so today so I’ll be off my computer for a little while to let it cool down.
06122013- Section 3 nearly completed, script runs for installing cloud services to android but returns a few errors and is ready for others to test with me, send a PM, e-mail, Google+, what ever and I'll hook you (the reader) up with a preview of the draft script that I've been writing to install openstack to android. Still under heavy development and re-writing but should work now, I'll be posting the beta version publicly when I've done enough testing or had enough testers confirm that it works without problems.
________________
____Update: Bellow Link
____ https://docs.google.com/document/d/1A64GMgcVUKbZrTG2WDWfY_g9vABuRx78ULULu-Ir-kE/edit?usp=sharing
____is a script to be tested for controlling the Crazyflie Quad-Copter with Android using Debian Kit's Squeeze or others
____for now see Page 10 for the discussion related to this development.
____if found to work, then merging into the Main Guide and full description on how to get started will be included as well.
________________
Setting up base system (partially under construction)
Contents
1. Setting up base system:​
1:2 - Downloads for android device.
Debian kit
https://play.google.com/store/apps/details?id=org.dyndns.sven_ola.debian_kit
ConnectBot
https://play.google.com/store/apps/details?id=org.connectbot
Remote RDP free
https://play.google.com/store/apps/details?id=org.toremote.rdpdemo
Root browser (or use your prefered file browser)
https://play.google.com/store/apps/details?id=com.jrummy.root.browserfree
Hacker's Keyboard
https://play.google.com/store/apps/details?id=org.pocketworkstation.pckeyboard
debian-kit-1-5.shar
http://sven-ola.dyndns.org/repo/
1:3 - Installing Linux system to Android Device
1:3:1 Verify no major errors are present
Open Debian Kit: check that there are no red X's; tap on anything in the list for more info and/or press menu and tap read me for the developers original doc.
Check that you've enough memory: from the home screen press menu and tap settings; Scroll down to application settings, tap it and view storage use; try to have as much available memory as possible by, moving/removing apps, ruffly 100MB+ worked for me. Note after the initial install you should be able to reinstall/restore the removed apps with little ill effect.
Remove data consuming tasks from the equation either by freezing them with an app like rom tool box or turning off their sync options or uninstalling them. Mainly this step helps insure that while you're downloading the necessary data that your connection doesn't flip out and cause an error that could have been avoided.
1:3:2 Start ConnectBot (rom toolbox terminal emulator also works well for this part with some modification)
Tap on the lower left corner where ssh button is and select local instead.
Tap in the text field next to the bottom now displaying local and type in a nickname like 'debInstall', hit enter and be presented with-
$
Type su, hit enter, and permit superuser permissions.
$ su
#
Unpack the installer with sh /sdcard/download/debian-kit-* note: if downloaded with dolphin browser or some other browser then you'll need to change the file path to reflect that.
# sh /sdcard/download/debian-kit-*
Or
# sh /sdcard/Dolphin_Browser_Mini/download/debian-kit-*
Or
# sh /mnt/sdcard/download/debian-kit-*
See 8:2:1 for example of what your screen should look like without errors.
Choose your path:
Input 2s will install a debian.img file 2gb in size to your sdcard. Note: this option is suggested as for the first try as this will allow for a stable and fairly sized environment to test and play with, furthermore I will be writing this guide first for the debian squeeze option and later add the others as I've the time. If choosing this option scroll down to step 6. when the installer starts asking questions.
If 2gb sounds to small and you're willing to brave the manual install, then you'll want to abort the auto installer at this point and scroll further to step 1:2 Manual Install
Once the install has finished you'll be given three options yes, ovpn, q choose one and only one. When yes or ovpn is used things will be removed, when q is used the debian image is unmounted just as it will be automatically unmounted at the end of either yes or ovpn option. Note: when I install to debian.img file I choose ovpn as this allows for the most amount of space to be freed.
Now providing everything is error free the debian.img can be remounted with either of the two commands
# deb
or
# /data/local/deb/deb
Note: to see what it will look like the first time you run deb and not encounter errors see section 8:2:4
Now to first
update the list of packages currently installed,
second upgrade everything,
third install andromize for compatibility,
forth install andromize-lxde for a gui,
fifth install ssh,
sixth auto remove unnecessary packages,
seventh clean up,
and all that in one step that will take more than a few minutes to complete. Note: andromize at some point is going to request input from you;
tap on your screen and tap on the control button that briefly shows up in the lower corner, the hit the 'i' button on either you hard keyboard or onscreen keyboard. This will put you in insert mode so that with a d-pad and the spacebar or enter key you can select a highlighted option, I suggest: ctrl+i then space (or enter) as that has worked everytime for me.
# apt-get update; apt-get upgrade; apt-get install andromize; apt-get install andromize-lxde; apt-get install openssh-server; apt-get autoremove; apt-get clean
So you're set to rock and roll as root and have a lot of options if ya know what you're doing.
At some point with all this you may feel uncomfortable with running under sudo root user. Scroll down to '4:3:2 Command line commands for linux' and run those commands to secure yourself some.
Start your new ssh server. Now that the basic requirements to run linux have been met and you've a clean OS we need a way to 'open and 'close' terminal windows that aren't going to remount the system a bunch or run us into out of memory or space errors.
Start ssh with one of the following commands
# deb s
Stop ssh with one of the following commands (when you're done)
# deb S
Once ssh is on you can connect to your device from any other ssh compatible device. For now we are going to use identical directions, almost, to section 4:3:3-3
Make or open a new or existing ssh connection with connectbot with your username that you want to log in as then the @ symbol followed by "localhost"
Make sure that in the lower corner that the option is set to ssh and hit the enter key
Connectbot or whatever local running ssh app you're using (I'll be testing or hearing about a few I'm sure) should now prompt you for a password. Put in the one you (I hope setup before in step 4:3:2... yeah I'm going to have to fix that...) set up and you should be greeted by a few lines of text and a # with your username before it. This is where many of the linux commands should be run.
Note: this method is prefered because you can connect and disconnect without sending multiple "deb" commands in the local connection that we only should use for installation and starting the system (first boot and after reboots). Sending multiple "deb" commands can cause all sorts of issues without sending "deb u; deb k" commands between. The other issue that arises with sending multiple "deb" commands followed by a "deb u; deb k" is that you can fill folder structures on the linux OS and your SD card that are designed to rescue unintentionally deleted files, cache, and junk files, which in other circumstances is really good to know like when a picture disappears from your gallery, but in this case is a real pain. You'll get all sorts of errors so remember one "deb" command per boot and connect through ssh or remote RDP once your system has mounted linux and you'll have a happier experience. Okay moving on.
1:4 Manual install
Unmount and eject the sd card from your device
Plug the sd card into enough adapters to plug it into your computer. I've used micro to sd adapters and then plugged that into yet another adapter sd to usb with success.
Backup all data. You're about to delete it all.
Using gParted on ubuntu 12.04
Ensure that gParted has selected the sdcard and not your hard drive... don't select your hard drive that would be bad.
Check out the current partition layout, perhaps even make note of it somewhere incase something goes wrong. My sandisk started out with a 4mb empty zone and a fat32 partition for the rest.
Reformat original partition to fat32 by either write clicking the main partition or selecting the partition drop down menu at the top of the window.
Resize first first partition (pay close attention to not accidently remove, overwrite, or move over the little bit reserved at the start of your sdcard) to the desired amount of space for the android side of your device such as space for; downloads, app cache, apps to sd, photos, and music. This space is all that my android recognizes by default so think about it.
Second make a second partition filling up the trailing bit left over, you can try something fancy but I chose a fat 32 bootable.
Apply the three operations with the green checkbox in the upper left quadrant of the window and let it run.
When gParted finishes unmount and eject the sd card, wait a second or two and plug it all back into your computer.
If you left gParted open then your sdcard and it's partitions should now show up as selectable in the drop down for devices. Close gParted.
Open a file browser or two; one for your sd card's first partition and another for where you saved the backup of your sd card's contents.
Copy your backups back over to the first partition of your sdcard. I'd advise copying the important things first, app backups folders and system and/or nandroid backups. The things you can live without for a day or two you can come back for because you're here to get to the next step.
Unmount and eject from computer. Plug back into phone and remount.
Run through the first part of the guide and about when given the option to make a debian.img file.
Run the following commands in connectbot under superuser to figure out what the installer uses to identify the second partition on your external sdcard, format it and install linux to it.
This may show the uuid, drive letter, date modified. Make note of todays date and check for three dates in the list that match from when you were repartitioning. Take note of everything.
/data/local/deb/armel/busybox fdisk -l /dev/block/vold/*
Results may vary try navigation to /dev/ with a root browser on the android side of things, take a look around and adjust the bit after 'fdisk -l' to reflect your device's folder scheme and rerun till you get something that looks like this: (or see section 8:2:2 for full example)
Device Boot Start End Blocks Id System
/dev/block/vold/179:0p1 1 1279 10264576 c Win95 FAT32 (LBA)
/dev/block/vold/179:0p2 1279 1925 5189632 b Win95 FAT32
Now to run the mk-debian -h script and change settings until satisfied. Note: I had one issue when I didn't tell the installer what 'drive' letter to install to;the letter preceding 'Win95 FAT32' in above example or in the below example command you can see the drive letter delineation specified at the end with '-L b' because on my device setup that's the letter in which I need to install to. (see section 8:2:3)
# /data/local/deb/mk-debian -i /dev/block/vold/179:2 -s 5310 -L b -h
Which if configured correctly will look like the dump took and pasted below.
Script to format a loop disk file or disk partition with ext2/3/4 and install a Debian Linux there.
Usage:
mk-debian [Options]
Options:
-d <distro> specify squeeze/lucid/precise
-m <path> specify mount point for disk/device
-s <megabyte> specify size for new loop disk file
-i <file|dev> specify loop disk file name or device
-t <ext2/3/4> specify file system to be created
-L <label> specify disk label for formatting
-D <ip> specify DNS server to be used
-M <url> specify Mirror URL for downloading
-u update /system/bin/deb script and exit
-U uninstall Debian kit (not debian.img!)
-C clean files not required to run Debian
-h display usage text and settings
Settings:
-d squeeze
-m /data/local/mnt
-s 5310 Mb
-i /dev/block/vold/179:2
-t ext4
-L b
-D 8.8.8.8
-M(squeeze) http://ftp.de.debian.org/debian
-M(lucid/precise) http://ports.ubuntu.com/ubuntu-ports
Action: install
Notes:
For creating a loop disk file, you may want to change the default size (in Mb, 512-2047). For formatting a device (-i /dev/xxx) or if overwriting an existing loop disk file, the size is ignored. The loop disk file name or the device name will be written to the bootdeb script's IMG= line if this script succeeds.
If you specify a device, the UUID of the formatted device is instead saved into bootdeb (IMG=uuid:<hexid>). With this, the correct device can be found even after some mixed USB drive/SD card eject-insert sequences.
Check your settings by adding '-h' as the last switch.
Remove the '-h' from the tail end of the command to run when you believe all is good and if all is good then scroll back up to step 7 of the main install guide where it talks about remounting debian.
1:5 Other methods of running Linux alongside Android
Contents​_______SPLIT FOR POSTINGS______
1:5 Other methods of running Linux alongside Android​These sections that follow ( 1:5:* ) will detail the other methods the author has installed Linux Environment.
Note: at this point I've only one device that is capable of developing a guide to install and integrate cloud services; if you wish to see that change you may make additions on the publicly editable version of this document, or, research it on your own time, or, make a donation to the author; my time can be purchased , or, wait for me to document it in my own time.
1:5:1 Using Limbo PC Emulator (QEMU)​Note: I did not originally include this method as it is a slower way to run linux on android. Its good but emulation always comes at a cost. There are many devices on the market now that will support this app smoothly but like I've said you'll still see a cost.
Note: run-on list of “Cost”
Slow: The nature of emulation causes this. To understand the details of this one will have to delve into some of the details of how machines talk to one another and within themselves, machine language(s), and, the details of what a processor actually does.
I’ll try to sum it up though; a processor type (CPU - ARM/Pentium/AMD and even GPU - Nvidia, iSBX 275, S3 89C911) has a specific structure in how the components and pathways are laid out. This causes each manufacturer to have their own way of sending electrons across the internal structure that makes up the processor, this is usually kept private or proprietary (Xbox, Playstation, Nintendo are good examples of this) to the manufacture, which is the machine language that I was talking about. Compatibility with the other components that the processor connects to is usually achieved by standardization of “shape” meaning the little wires that come off of CPU chip itself and connect to the rest of the circuit board, and the internal firmware of the CPU chip.
To make a processor process a “native” task one must be speaking its language or a language that it understands (many come with what’s called ‘channels’ that handle; Flash, Java, or other human readable programming language) and tell it where to get information and how to handle it and where to send it and what to do next and have all that on the “native” hardware. To make a processor process a “alien” task one must have a way of translating all the processor’s calls for data and handling of data to a completely different set of physical pathways and methods of handling data; this would be like if you and I were placed in completely different parts of the same city and were given the exact same set of instructions (north 5 kilometers, east 12 meters, south east 1 kilometers) and be expected to arrive at the same location; just doesn’t compute, you would end up in a location relative to your start point just as I would but the relative distance wouldn’t change between us. And more than likely one of us would run into an obstacle not far from the start and where we programs and not humans the one of us to hit an obstacle would, like a lemming, just keep failing until killed off.
An emulator bridges the language and hardware divide (visual here: like an octopus wriggling through a small hole when viewed through x ray photography) by wrapping up the data being handled in such a way that another processor doesn’t try to natively run the data being wrapped up (visual here: like the internal organs, of the before mentioned imaginary octopus, not rupturing through the skin and spilling out into the water that it’s entire body is encapsulated in) and then giving the data within a way to communicate with other data that has been wrapped up.
It's not an exact description of emulation but an analogy and how I think about it.
Electron Expensive: The very act of emulation causes the processor that is running the emulation to pull double duty. For every task that has to be carried out by the emulated machine. a task must first be started on the host machine, then the emulated task is started, then the emulated task makes a call for more data or tries to write data, that emulated task ‘call for more’ is sent back to the host machine, the host machine then must make the required translations to compute the request, after computing the request the task is performed, if the task being performed makes ‘calls for more’ then those are then handled just like the parent task (making more calls and translations back and forth) and so on. When done coded properly; emulators can emulate a processor very near the host’s megahertz level and the emulated tasks show very little lag from all this back and forth that the data must first go through, however, due to the closed source nature of hardware and internal firmware, making a well coded emulator is very difficult and usually involves trial and error combined with a little reverse engineering. In most cases when running an emulator, you’ll want a host machine capable of much greater megahertz range than the machine you are trying to emulate (it’s why next gen console emulation is so difficult for most home PC’s) to allow for the back and forth that happens with emulation. This back and forth that the data goes through is what will cost you in battery life because data is transmitted with electricity and there is a finite amount that your battery will store and output.
Hair Puller: As wonderful as it can be to run emulators; eventually things just go wrong and debugging how to work around it can be an exercise in futility.
Note: run-on list of “Benefits”
Extended Compatibility: Being able to run non-native machine code and system tasks gives an enormous amount of flexibility to the host machine. With QEMU you can even emulate the old floppy disk drives on Android and I doubt most households have a fiscal one of those anymore.
Development Options: Emulating hardware allows for development to take place on a set of hardware that doesn’t need to be physically owned thus reducing the cost of development to time, education, and workforce.
Hardware Virtualization:Because the operating system is running on virtualized hardware you are more free to convert the image file that the OS is saved to and run on multiple devices or computers with very little work once you’ve got an installed OS image. I’ve even seen work done to sync system files between clones so that one can login to each clone and after a few minutes have the exact same programs to access and run between devices.
Games:Yep you can play games with this, like mine sweeper and other low memory intensive games, but further development and a faster device will alow for many more titles to be added to the list of “working and fun” that I’ll be compiling here.
1:5:1:1 Apps & Files to download for QEMU​Limbo from the Google Marketplace
https://play.google.com/store/apps/details?id=com.max2idea.android.limbo.main
Limbo in my opinion is of the one of the best apps out there for novice on up to master rooted phone users. In short its like a "game console" emulator for your pc only with a big twist the "game console" Limbo emulates is actually normal PC processors like a pentium 3 and it runs on android so you can play pc hardware dependent content such as windows if you've got the specs on the go.
Pick A Linux Distribution
The links provided are here for convenience and should be considered untested unless accompanied by a statement that it has worked on android. I will try to test as many as possible and document the; pros and cons; methods of installation if they varied from the main QEMU install guide provided in this main guide.
DSL (Damn Small Linux)
http://www.damnsmalllinux.org/download.html
Worked for me on my Epic 4Gs
Ubuntu (12.04)
http://www.ubuntu.com/download
Kali (like backtrack)
http://www.kali.org/downloads/
There is a live boot ISO for PC, a ARM variant that’s being tested by others, and a network install that I’ve found. For this method (QEMU) I would suggest the PC version; I’ll be testing the network install in the future so I can attempt a “Debian Kit” port for the ARM native version of their distribution.
Backtrack
http://www.backtrack-linux.org/downloads/
Android-x86
http://code.google.com/p/android-x86/downloads/detail?name=android-x86-2.2-generic.iso&can=2&q=
Just ran across this one. It’s android for PC processors instead of the ARM processor. But QEMU is a PC emulator, so if we want a slow Android OS running on top of the normal one for that could be possible. Don’t know yet if it will work but it’s worth a shot as this would allow developers to mobily develop for this variant of Android and normal root users the chance to make drastic changes to the emulated Android environment without too much fear of fouling up their main Android environment.
1:5:1:2 QEMU Linux Install Guide​1:5:1:2-1 Method one: Install to virtual hard drive with QEMU
1. Download Limbo from the market place
2. Download a Linux distro to start with or try an ISO that you already have if you're feeling adventurous
3. Open Limbo
4. Tap on ‘Load VM’ and choose ‘New’
5. Name your new Virtual Machine and tap ‘Create’
6. Scroll down to ‘RAM Memory (MB)’ tap ‘64’ and choose 512
7. Scroll down to ‘CDROM (*.iso)’ and tap ‘None’
8. Tap ‘Open’ in the new pop up and using the folder navigation window that pops up; navigate the the ISO file that is on your device (usually in your downloads folder) and tap it
9. Back in the main Limbo app screen scroll down to ‘Hard Disk A(*.img/*.qcow2)’ and tap ‘None’ and tap new
10. In the new pop up (Image Name) title your hard disk somthing that will tell you that it’s an emulated hard drive of that distribution, such as ‘DSLhdEmu’ and set a size that you’re willing to sacrifice to running Linux and tap ‘Create’
11. Scroll down to ‘Boot from Device’ tap ‘Default’ and in the pop up choose ‘CD Rom’
12. Scroll down to ‘Network Configuration’ and tap ‘None’ and choose ‘User’
13. Scroll down to ‘VGA Configuration’ tap std and choose ‘vmware’
14. Scroll up, all the way up, on the Limbo main screen and choose start. If everything goes well you’ll be presented with a linux live boot environment that you can then use to install onto the virtual hard drive that you made. Once you install you can remove the ISO from the parameters in Limb and change the boot order to the virtual hard drive.
1:5:1:2-2 Method two: use a computer to make a virtual install
and then converting it to a qcow2 file and install linux to it before moving it over to the device to run it. This is a bit round about but it's my method when I can't run the install but can run the OS due to emulation not being perfect and my device not being powerful enough.
1. Download and install ‘VertualBox’ to your PC from:
https://www.virtualbox.org/wiki/Downloads
Note: You’ll want to choose the one that is for your PC’s hardware and operating system
2. Open ‘Oracle VM VirtualBox Manager’ and click ‘New’
3. Click ‘Next’ and title it something you’ll remember is for this purpose, such as ‘DSLforQEMU’
4. Mouse over to ‘Operating System’ and click on ‘Microsoft Windows’ choose ‘Linux’ in the drop down
5. Mouse over to ‘Version’ and click on ‘Ubuntu’ choose ‘Other Linux’ in the drop down
6. Mouse over to the ‘Next’ button and click it
7. Mouse over to the box with ‘256’ click it and input 512; mouse over to next and click it (unless you’re computer has less than 2 gigs of RAM)
8. Click the ‘Next’ button again because we’re creating a new ‘Start-up Disk’
9. Mouse over to the ‘VHD (Virtual Hard Disk)’ and click the little circle next to it to select that option and mouse over to the ‘Next’ button and click it
10. Click the ‘Next’ button again unless you really want a ‘Fixed size’ image taking up a bunch of space or if you’ve had issues with ‘Dynamically allocated’ option not converting to qcow2 format properly.
11. This next page titled ‘Virtual disk file location and size’ you’ll want to set up yourself based on how much space your hard drive has and how much space your Android device has. I shrank mine down to 3 gigs though and left everything else alone.
12. Mouse over to the ‘Next’ button and click it then ensure everything looks ok and click the ‘Create’ button too. If there is a second window behind that go ahead and click the ‘Next’ and ‘Create’ buttons too to set up the virtual machine
13. Mouse over to the new virtual machine that you’ve created and ‘right click’ it and select settings or select the new virtual machine and select the ‘Settings’ button which should be between the ‘New’ and ‘Start’ buttons
14. In the new ‘Settings’ window, you’ll find oodles of things to tweak and feel free at a latter time, for now mouse over to the ‘Storage’ and click it
15. In the storage settings mouse over to the ‘Storage Tree’ part of the window and look for a disk icon that says ‘Empty’ and select it (this is the virtual machine's CD drive)
14. With the virtual CD drive selected mouse over to the ‘Attributes’ part of the window and select the checkbox to enable ‘Live CD/DVD’, mouse over to the disk icon just to the right and a little above the checkbox and click it to set up where the ISO is for installing Linux, select ‘Choose a virtual CD/DVD file...’
15. Use the new window titled ‘Choose a virtual CD/DVD file’ to navigate and select the ISO file that you wish to use to install Linux to the virtual hard drive image that was created in step 11
16. Mouse over to the ‘Open’ button and click it then click the ‘Ok’ button in the ‘Settings’ window that was behind it.
17. Back in the main window for VirtualBox titled ‘Oracle VM VirtualBox Manager’ ensure that the virtual machine that we’ve been making is still selected and then mouse over to the ‘Start’ button and click it.
18. Interrupt the boot with one of the function buttons on your keyboard when the new window pops up and starts to paint in what will look like a computer starting up in a window (usually ‘F2’ or ‘F10’ or ‘F12’)
19. In the interrupted boot menu within the “VM” window choose the option that corresponds with the CD drive to make the virtual machine boot from CD this time around only
20. Let the live boot process process for a bit and eventually you should be presented with a window that looks like a linux desktop is inside of it
21. Follow the instructions for installing your specific distribution to a hard drive and when that guide states to install to a hard drive just remember to be selecting the virtual hard drive that was created in step 11
22. After installation to the virtual hard drive has finished test that it installed correctly by shutting down the virtual machine and getting back into the settings described in step 15 and “eject or remove or unmount” the linux ISO file from the virtual CD drive
23. Start the virtual machine again and check that it boots correctly from the virtual hard drive image. If it does shut it down again properly. If it doesn’t try again or try a different distribution.
24. Open the ‘Settings’ window again and select ‘Storage’ again, this time though under the ‘Storage Tree’ part of the window select the virtual hard drive image (its the *.vdi file that was created in step 11) and mouse over to the disks icon to in the ‘Attributes’ part of the window to the far right of where it says ‘Hard Disk’ and select ‘Choose a virtual hard disk file...’ and make a note of the full folder path to the *.vdi file; somewhere like in a notepad or scrap of paper or memorize it.
25. Open a terminal window on your PC and convert the *.vdi file to a *.qcow2 file with the following command structure
Example : Syntax
# qemu-img convert -O qcow2 *.vdi *.qcow2
Example : useable
# cd /home/dev/dumps
# qemu-img convert -O qcow2 DSLforQEMU.vdi DSLforQEMU.qcow2
26. Let the converter convert and come back to it after a few minutes
27. Once the converter has converted it’s time to transfer the qcow2 file to your Android device, use a cable or a SD card adapter to get it over to the folder that Limbo saves virtual hard drive
28. Start up Limbo and create a new machine much like the steps in method one but you’ll not need to select a ISO file, instead select the virtual hard drive image as the hard drive to boot from and set the other setting the same as method one and start the virtual machine to test it on your Android device.
2. Installing additional packages & 3. Setting up cloud system
Contents​2. Installing additional packages
These packages should be installed if you’re following the entire guide for setting up a wireless private mobile cloud server. At this point the author is still debugging error messages with some of the services/packages that are being trialled for this making this project a reality and the author is still working on educating himself on dependencies/configurations; so use section 2 and section 3 use at your own risk.
2:1 installing packages before devstack or openstack
First we'll need some git for our flavor of debian
#apt-get install git-arch
Devstack.org directs to use the following comand to get a clone of devstack onto your device
#git clone https://github.com/openstack-dev/devstack.git
Then to deploy and install use
#cd devstack && ./stack.sh
Debian has got some errors so I'll have to figure out where to go from here. Resources that I'm using:
devstack.org compatible with ubuntu 12.04 form of debian kit posibly, still working out kinky install errors with ubuntu on myTouch 3g.
openstack.org states that its compatible with debain and ubuntu forms of debain kit posibly, still reading and obsorbing information. Could run into processor, memory, and storage constraints if the guides are to be believed, don't care round hole meet square pag.
stackgeek.com/guides/gettingstarted.html ran accross it, might have something...
Google.com yep google gets it done with well constructed quaries. Use the 'solved' 'distro' with 'issue' and refine from there, adding 'similarweb address) or (something)' or 'siteweb address specifically)'
Contents​3. Setting up cloud system
This is under construction...
Note: looks like you'll need access to a total of three devices for this; be it three rooted android phones or a combo of computers and rooted devices all of which seem to at this point need to be running Ubuntu 12.04 LTS.
I'm now looking into installing the componits that are required to run openstack on Ubuntu to other distrobutions such as Squeeze by downloading the sorce .deb or .sh files and installing from sorce. This is because after reading though the bootdeb (wich you can find after unpacking the debian kit under the file path: /data/local/deb/bootdeb) by opening as a text file with rom toolbox; there seems to be a way of shifting the way that super user requests are handeled by the android system that alow for devices (such as the myTouch 3g) with system read/write protection enabled (sOff/sOn) to handle read/write permitions diferently. This has adverse side effects so avoiding it and using a stable reliece of debian squeeze is the sogested method at this point and fixing the depindencies manuely.
Un-orginized notes
What dependencies or pacages that shold be satisfide
Info taken and used from
http://openstack.dachary.org/2013-02-20/
keystone nova glance nova-network cinder
and it does not include
horizon quantum ceilometer
4. Aditinal notes Part 1
Contents​4. Additional notes
The following sub sections are dedicated to the more common tasks: interacting with android linux as a whole, helpful links, linux command line commands, and helpful tips for the apps that you’ll be using to set up and interact with your linux android system that would have broken the flow of reading the main install steps.
4:0 Sites that have been exceptionally helpful
This section has the following organization patterns:
new links = descending order, older links near the top newer links towards the bottom
small font with link embedded = older links that likely are up to date between all versions of this guide
medium font with link embedded = links that I’ve formatted but have yet to update to other mirrors of this guide
medium font with link not embedded = links that I’ve most recently added and likely have not been updated anywhere else
https://github.com/openstack-dev/
http://blog.urfix.com/25-ssh-commands-tricks/
http://www.linuxquestions.org/questions/debian-26/how-to-configure-apt-get-to-install-suggested-packages-169746/
http://www.linuxfromscratch.org/blfs/view/svn/index.html
https://help.ubuntu.com/community/AptGet/Howto
http://forums.debian.net/viewtopic.php?f=30&t=47258
http://www.howtogeek.com/108511/how-to-work-with-the-network-from-the-linux-terminal-11-commands-you-need-to-know/
http://www.verot.net/socks.htm
http://cssoss.files.wordpress.com/2012/05/openstackbookv3-0_csscorp2.pdf
http://docs.openstack.org/trunk/openstack-compute/admin/content/installing-openstack-compute-on-debian.html
https://wiki.openstack.org/wiki/Packaging/Debian
http://wiki.opscode.com/display/chef/Deploying+OpenStack+with+Chef
http://anonscm.debian.org/gitweb/?p=openstack/glance.git;a=summary
http://www.debianuserforums.org/viewtopic.php?f=9&t=1513
http://www.wikihow.com/Run-a-.Jar-Java-File
http://linux.die.net/man/1/mr
http://wiki.debian.org/BridgeNetworkConnections
http://www.oracle.com/technetwork/java/embedded/downloads/javase/index.html
http://ss64.com/bash/
http://www.bleepingcomputer.com/forums/t/145051/making-your-own-linux-bash-commands/
http://answers.oreilly.com/topic/1442-how-to-configure-windows-7-remote-desktop/
http://www.raspberrypi.org/phpBB3/viewtopic.php?f=81&t=27634
https://jdk8.java.net/fxarmpreview/
http://www.savagehomeautomation.com/pi-jdk
https://jdk8.java.net/fxarmpreview/javafx-arm-developer-preview.html
http://linuxconfig.org/bash-scripting-tutorial
http://developer.android.com/reference/android/content/Intent.html#ACTION_SHUTDOWN
http://en.wikibooks.org/wiki/QEMU/Images#Converting_image_formats
http://www.penguintutor.com/tutorials/viewdoc.php?doc=bluetooth-network-tutorial
4:1 apps for android that make things easier
Note: these apps are not necessary to follow the guide as of yet, so don’t go paying without considering all the good it’ll do you.
GitHub
https://play.google.com/store/apps/details?id=com.github.mobile
ROM Toolbox Pro
https://play.google.com/store/apps/details?id=com.jrummy.liberty.toolboxpro
XDA Developers
https://play.google.com/store/apps/details?id=com.quoord.tapatalkxda.activity
devcheats
https://play.google.com/store/apps/details?id=miquelco.devcheats
Shark for Root(native)
https://play.google.com/store/apps/details?id=lv.n3o.sharknative
BusyBox Installer
https://play.google.com/store/apps/details?id=com.jrummy.busybox.installer
Remount
https://play.google.com/store/apps/details?id=com.stericson.remount
TUN.ko Installer
https://play.google.com/store/apps/details?id=com.aed.tun.installer
Google Drive
https://play.google.com/store/apps/details?id=com.google.android.apps.docs
4:2 linux software and or packages that I've tested
jMonkeyEngine
http://jmonkeyengine.org/
Very powerful programing and development toolkit for programing, if you run into issues after installation go to help update in the jmonkey window and that should resolve it, the developer states it on the download page but i and many others have filled google search bars with error searchs when mostly that one step will save you a lot of heartache, after of course resolving the other dependencies... I’ll be updating this in a bit with full directions on how to install .sh packages from the downloads folder in android to a full programing environment.
Wireshark (linux & android? yep)
http://www.wireshark.org/
updates eventually. so far I’ve been able to use wireshark from the android market to capture my home network info’s, saved it and then using wireshark on the linux side of things to view and interact with the pcap files as I at this moment don’t know how to resolve all the dependencies for running wireshark on the linux side solely.
4:3 commands for apt-get and others I've found useful
4:3:0 Android command line commands
Here will be commands that can be run from the Android command line, independent of the Linux system, some in fact many will also work on the Linux system. At this point the "____" will be the break between subsections for sectio 4:3:0:* as organization will have to happen after there's enough content to organize.
____
Download from web to a specific directory and attempt to reconnect if connection is interrupted.
The -cO = 'c' to reconnect if interrupted, 'O' to 'output' to a specific file path.
The '/sdcard/Download*' = path you want to save the file to; adjust it based on where your device saves downloads to by default or change it to a custom path.
The 'http://' = the web address you wish to download from. Some may not support it but most should.
Example : Syntax
# wget -cO /sdcard/Download/[Name-of-file-you-are-downloading].[file-extention-of-the-file] "http://domain.com/path/to/file/to/download.zip"
Example : Usable
# wget -cO /sdcard/Dolphin_Browser_Mini/download/photobomb-cat1fxb.jpg " http://www.justsaypictures.com/images/photobomb-cat-1fxb.jpg "
____
4:3:1 Apt-get commands:
Search for package or package description (still working on condensing and organizing this part)
#apt-cache search "web server"| grep something
Install commands
#apt-get -i {package-name}
Removal commands
#apt-get remove <package_name>
Removes an installed package, leaving configuration files intact.
# apt-get purge <package_name>
This command completely removes a package and the associated configuration files. Configuration files residing in ~ are not usually affected by this command.
If you want to remove package1 and install package2 in one step:
# apt-get remove<package1> <package2>+
Remove unnecessary or abandoned data that isn't necessary to keep
# apt-get autoremove
This command removes packages that were installed by other packages and are no longer needed.
#apt-get autoremove <package_name>
This command removes an installed package and dependencies.
While there is no built in way to remove all of your configuration information from your removed packages you can remove all configuration data from every removed package with the following command.
# dpkg -l | grep '^rc' | awk '{print $2}' | xargs dpkg --purge
auto-apt commands
# auto-apt run<command_string>
When invoked, the auto-apt command automatically installs packages upon missing file access. If a program tries to access a file known to belong in an uninstalled package, auto-apt will install that package using apt-get. This feature requires apt and sudo to work.
Auto-apt keeps databases which need to be kept up-to-date in order for it to be effective. This is achieved by calling the commands auto-apt update, auto-apt updatedb and auto-apt update-local.
Usage example
You're compiling a program and, all of a sudden, there's an error because it needs a file you don't have. The program auto-apt asks you to install packages if they're needed, stopping the relevant process and continuing once the package is installed.
# auto-apt run./configure
It will then ask to install the needed packages and call apt-get automatically. If you're running X, a graphical interface will replace the default text interface.
dpkg command to get package information such as description of package, version etc. The syntax is: dpkg --info {.deb-package-name}
Pull up the man page for adding repos to apt-get
# man add-apt-repository
Note: at this point this command doesn't work, will look into it at some point soon.
At some point if you don’t know better you’re going to try and make apt-get install more automatically than it really needs to; you may succeed. Before you waste your time like I did and then go searching round for ways to undo safely the same way take a look at this quoted and condenced from hear (http://www.linuxquestions.org/questions/debian-26/how-to-configure-apt-get-to-install-suggested-packages-169746/)
::::::
I think that automatically adding all suggested packages would put a lot of cruft on your system. However, if you want it, you can get that behavior by adding a line to /etc/apt/apt.conf: Code: APT::Install-Recommends "true"; APT::Install-Suggests "true";
The second line will automate suggests and the first would automate installation of recommends. You can use either or both, though again, lots of cruft. If you don't yet have an /etc/apt/apt.conf file,you can create it and add just the one line.
If you have apt.conf setup like this, you can avoid installing recommends via: Code: apt-get --no-install-recommends install package
This will prevent apt from considering recommended packages as dependency for installing,even if apt.conf is configured to do so via "APT::Install-Recommends".
you can also specify the option on the command line, like this: sudo apt-get install <package> -o APT::Install-Suggests=true but apt-get install will follow the "suggests" for all installed packages, not just the one you are adding now.
::::::
____Split
4:3:2 Command line commands for Linux (part 2)
4:3:2 Command line commands for Linux
Set password for root
# passwd
Add a normal user. This command will also start a chain of user input requests to set up the user's "profile" its easy and better than running round as root all day.
# add-user[new-user-name]
Or
# adduser[new-user-name]
Give normal user sudo permissions. Note depending on which environment you run this command you will need a password for root or the user's password for the sudo permissions or the password for the user, try'em all till one works and make a note of it.
# add-user sudo[user-name]
I've also used
# adduser [user-name] sudo
Login to new user. It will then request a password from you. Note when you type in your password there will be no indication on your display, this is a security feature.
# login[user-name]
Install packages to new user once logged in
#sudo apt-get install [package-name]
Get a list of installed packages
#dpkg --get-selections
Get some help with dpkg
#dpkg --help
4:3:3 Connectbot optimization guide
By this point I hope you've poked around in Connectbot and seen some things. We're going to use some of them here to make the boot and shutdown processes a bit easier. For theses steps you’ll want to follow steps 4:3:3-1 though 4:3:3-4 and then scroll down to the specific automation example and copy/paste it.
4:3:3-1. Linux Boot/Mount automation
Open Connectbot
Make a new local connection and title it 'linuxBoot' or something that will remind you not to open it more than once (if you do, don't worry, we can fix it)
Disconnect from 'linuxBoot' and then press and hold on it until a dialog pops up.
Select Edit Host, scroll down to ‘Post-login automation’ and select that too.
Past the following lines with the line breaks intact (you may have to go in with your finger and hit 'enter' in order to have the correct line breaks between commands) if your device took well to the system shortcut that the installer attempted to place for 'deb'.
su
deb s; deb x
Past the the following if you get errors saying that 'deb isn't recognized'. This is usually to do with not having full read/write permissions while your device is operating (sOff and sOn for example on some HTC devices)
su
export PATH=/data/local/deb:$PATH
deb s; deb x
The deb s causes linux to mount and start openssh-server so that you can connect to it from any ssh compatible device and get to the command line.
The deb x starts up lxde, which gives you a graphical user interface to interface with.
The export path command is kinda like a short cut. You can use that one for many things and is well worth experimenting with.
Save your settings by hitting 'ok' and backing out to connect bot's main screen.
Make a new local connection and title it something like 'linuxShutdown'
Repeat steps 3-5 or 6 and past one of the following
4:3:3-2 Linux Unmount/Kill automation
Paste the following lines into the separate new local connection’s ‘Post-login automation’ titled ‘linuxShutdown’ for a quick connection that you can use to safely shut down your connections, unmount the OS from where it hooks into the android system, and kill any remaining tasks.
su
deb S; deb X; deb u; deb k
Or
su
export PATH=/data/local/deb:$PATH
deb S; deb X; deb u; deb k
capitalizing the 's' and 'x' from the 'linuxBoot' example sends the shutdown command to those two services
Unmount from system is what 'deb u' does, sometimes you'll see some errors
And 'deb k' forcibly kills whatever's left (usually whatever was causing the errors from running the 'deb u' command
Save and back out yet again to the main connectbot screen.
4:3:3-3. Connectbot “Local” SSH setup
Make a new connection, this time select ssh, if its not already selected by default and title it something like '[email protected]' just change the debian part to the name of the user you want to login as, such as root perhaps.
1. If you've left ssh running then skip to step 4:3:3-2. If you haven't started it then start it by
Selecting your 'linuxBoot' let it do its thing for a sec or hit 'enter' on your keyboard and let it do its thing for a second.
2. Once you've got ssh server up you can connect to it one of two ways that I know of.
First to test and daily for quick command line access: click on the ssh connection that was made in step 4:3:3-3 of this mini-guide and type the password for that user... and your in.
Second way is to connect with a different device: see section 7:1:2-2
Once you're in you may interact with it like a terminal window and most linux commands will work here with little to no modification. So utilize linux specific sources of information as I'd exhaust myself enumerating and cataloging all the things you can do.
4:3:3-4. Other good combos to use after using 'linuxBoot’
these are connections that I set up with connectbot to quickly run other repetitive tasks that I've saved and used as their own separate local connections. These can also be copy/paste into the command line usually too.
upgrade, update, start a search for something new to install
apt-get upgrade; apt-get update
apt-cache search
Clean out temp and cached files, remove unnecessary junk
apt-get clean; apt-get autoremove; apt-get update
Displays the manual for displaying manuals and the "| less" should make it display a bit frienlyer.
man man | less
4:3:4 Remote RDP debian kit Guide
1. Open Remote RDP, Press menu, Tap add and input the following modifications to the options:
Host=localhost
User=[your-user-name]
Password=[please-don't] can be a security risk
Color=24-bit
Screen=800X600 (though try others based on the physical size of your device)
Compress=checked On
Name=[[email protected]] (think you can name it whatever you like)
2. Back out to main Remote RDP screen and tap on the new connection you've set up.
3. There you will be greeted by either an error prompt (in which case check your settings in step one of this mini guide or run the boot commands described in step 4:3:3-6, specifically deb x) or you will see part of a desktop, window, and or mouse cursor. At this point; verify the username is correct, input your password for that user name, and hit enter.
Note if when you tap or drag on the screen and the mouse cursor follows your finger and not the gesture:
Back out to the main screen on Remote RDP
Press menu, tap settings; or tap the gear icon
Scroll down to Touchpad mode and either enable or disable
Familiarize yourself with some of the other settings while you're here as there are many user interface tweaks you can use.
4. Once you've successfully made a connection, chill for a sec. You're going to at first see a grayish screen, maybe a window bar at the bottom, and then (depending on the speed and available memory of your device) all the sudden it'll paint in a desktop for you to poke around in.
5. On the desktop that Remote RDP has wonderfully supplied; let's get rid of one pesky thing, the screen saver, its a resource and battery drain.
Mouse over to the lower left corner of the screen
There you will see a little 'symbol' click it and in a second it'll pop up a dialog.
Mouse over to options, then screen saver settings, and tap it
In the upper right quadrant of the new window you'll find a drop down menu with disable screensaver being one of them.
Select your choice, then exit out.
Note if logged in as root in Remote RDP you'll receive an error pop up window. In which case instead of mousing over to screensaver settings; mouse over to disable x screensaver under the other directory of the 'start bar' menu and click it. That should resolve having the screen saver coming on in the background while the screen is off and in no need of saving. Other methods welcome.
4:4 Rom Tool Box user Tips
If you've got it then you know its the best; if not, then try the free version and see if it will meet your needs before making the plunge to pro version.
4:4:1 Scripts
Here I will document scripts that I use or am working on.
Boot script
#!/system/bin/sh
: '
starts the remote desktop protocol server and openssh server services and exits the bash automaticly
written for personal use by strangerthanbland 05182013 Use at own risk.
see guide for details on why this script is useful
____________________
https://docs.google.com/document/d/17rboS2kaTNtcd7O7PCSIrlXVud79MHkqUTYohYNIbNI/edit?usp=drive_web
____________________
Comments and suggestions can be directed to either of the above links
_set this to run at boot with rom tool box by copy/pasting in a new script file and tapping on it and selecting Run At Boot Option
_add a new script to rom tool box by opening the app on your device
__scrol down to scripter under the tools tab and tap it
___tap on add then create
____title it what you want and copy past this example from hash sine to the exit command
'
export PATH=/data/local/deb:$PATH
deb x; deb s
exit
ShutDown Script
#!/system/bin/sh
: '
Listens for the device's shutdown command and executes this as one of the shutdown processes
'
4:4:2 Perfomence Mods
The mods explained here are as always a "use at your own risk" sort of affair. What will be contained here? Governors, overclocking and undervolting, memory management, ad blocking, and many more when time permits.
4:4:3 General guide lines
The things that I suggest for ROM Tool Box are only from a user's perspective and are here for easy reference, documentation purposes, and to offer a different perspective. The guide lines for using the material found in sections 4:4:1 - 4:4:4 may be modified but are as follows:
Don't be foolish; this app can be dangerous
Understand your device(s) and my device(s) are different
Comments/problems about the app itself likely should be directed to the developer of that app
Comment/problems about the content here should be directed here to this document or one of it's mirrors
4:4:4 Useful tips
5. Debugging\Known issues with solutions
Contents
5. Debugging\Known issues with solutions​
5:1 debian install problems
So the first part of unpacking debian kit didn't work?
Answer(s):
Troubleshoot it;
check that you're connected to a stable source of internet
check that the file path is correct and that there's no typos
check that the file downloaded is the correct file, redownload after deleting if not
5:2 debian manual install issues
So the second part where I'm making the loop image failed somewhere and things don't work right or left, do I toss my phone in disgust?
Answer(s):
I've had this happen multiple times, kinda sucks when it's nearing the finish line, but to solve this
run the mk-debian -h command for manual install, edit the options until satisfied just like normal, except, you'll be presented with an option to format the existing, abort, and create new.
Choose your destiny like hitting e (format existing) and trying again with the install process.
Aside from that the other solution that I had to resort to was
reflashing my phones rom, kernel, gapps, and reinstalling only the apps required to perform the installation process.
This worked the best as it freed up most of the phones memory and kept the amount of background running tasks to a minimum. Fear not though as after installing linux and testing that it works I was then able to restore and redownload all the apps I had previously, it just meant that I had to re-unpack, re-install; so step one reset is what it turned out to become.
You may also try to create new with that command. I’ve yet to try this but I expect that running the mk-debian -h and changing the name of debian.img to a slightly different name than the one already on your storage device might allow you to test multiple distributions from the root of your sd card without having to uninstall the previously installed one. This is untested but may be useful for saving time and testing all of them by only sitting though the install process for each once instead of the uninstall, reinstall, and repeat fashion that I’ve had to use so far, think of it like installing multiple OS’s to different hard drives in your computer at home. The biggest issue that may be faced is mounting one specifically and keeping the others from mounting if one is already running and mounted, otherwise we’ll run into major slowdowns and errors I’m sure.
5:3 additional packages problems
So I tried to download and install a bunch of things with apt-get and things were going great until a (phone call, text message, random error, or disconnected prompt) shot everything I was plotting down, what do I do to complete the install or download?
Answer(s):
Fret not once linux is installed and behaving itself(mostly) you're atop the shoulders of giants and all that is usually required is
re-running the apt-get command.
There should be a difference in size of archives to be downloaded or installed from the first time that the command was commanded, there may also be errors stating that some of the items are already present in which case we can ignore them(mostly).
If that doesn't work try running the
shutdown example in connectbot after logging out of any other things accessing the linux system, rebooting the device and trying again.
5:4 reinstallation problems
Things worked once then I thought I'd be clever and run the mk-debian command to format and replace the old debian img file because I filled the original and wanted, but I must have told it to do a bad thing because now I get errors like this (dump below). Can I recover or am I screwed?
ln: /system/bin/deb: Cannot allocate memory
Cannot create symlink /system/bin/deb. You need to start with /data/local/deb/deb
Everything looks fine. Type "deb" to start the second installation stage. Refer to /data/local/deb/debian-kit-*.html for further hints.
# /data/local/deb/deb
e2fsck 1.41.11 (14-Mar-2010)
/dev/block/vold/179_2: clean, 7402/432640 files, 92578/1297408 blocks
Segmentation fault
chroot: can't execute '/usr/bin/apt-get': No such file or directory
chroot: can't execute '/usr/bin/apt-key': No such file or directory
cat: write error: Broken pipe
Answer(s):
Screwed. Going to have to try again, double check everything;
Devices kernel compatibility
Stable network connection
Distributions' compatibility
See section 8:2:4 and see if you can resolve it through brute force
maybe try a different distribution of linux. I'm still working on methods to recover without reinstallation, suggestions welcome.
5:5 How do I solve [My device/linux] issue(s)?
The google links provided can be used for quickly starting a search. Input the specifics of your search either by clicking the link and modifying the loaded pages' search bar or copy/paste them into your address bar and placing plus (+) signs between word instead of spaces.
XDA solved search link
http://www.google.com/search?q=xda+solved
XDA similar sites solved link (input modifications after solved)
http://www.google.com/search?q=solved+similar%3Aforum.xda-developers.com&gs_l=heirloom-serp.3...1200805.1281654.0.1282487.42.31.3.3.0.1.1328.6558.0j1j7j7j2j7-1.18.0...0.0...1ac.1.SIKFsmnC-bE&oq=solved+similar%3Aforum.xda-developers.com
Linux solved search link
http://www.google.com/search?q=solved+linux
5:6 How to do a dump like the author
You’ve put up a lot of text from the phone running linux, but whenever I try to select a bunch of connectbot it takes way too much time and never gets everything on the screen, especially the text that is off the screen, how do I make a dump like the author so I can get help with debugging?
Answer(s):
I don’t dump with Connectbot; it just doesn’t work for that one task, instead I use ROM toolbox pro because I already purchased it for other tasks (best money I ever spent on an app) if you too have ROM tool box then follow the following directions for making dumps like mine.
open ROM toolbox pro and make sure you're under the ‘tools tab’ (far left hand side)
scroll down to ‘Terminal Emulator’ and tap it
input your “deb” command not “deb s or deb x” just “deb”
This should log you right into root after a second
log in as a user with sudo or skip to next step in this sequence
input the command that you want to investigate and let it run or produce error messages however it’s been doing so far
once the command is finished with outputting results; press and hold on your devices: screen
tap copy all
open a document creator like google drive and paste it in.
Note: if you run lots of commands in sequence and try to copy/paste over 15000 characters into a google doc it might force close out on you as that will tax most devices’ abilities.
Go through your log of everything that you pasted. For personal debugging I use color formatting and font sizing to show things that I can ignore, delete from the dump, highlight errors, that sort of thing.
Note: Once you've begun the last step its a good idea to be looking up solutions at the same time as at some point you'll be interrupted and seeing where the formatting modifications suddenly stop is a good bookmark for where to pick up again.
Take notes for personal use and compile solutions or methods to not encounter the issues again, past it into an educational forum with a "solved" or "mini guide" apart of its title so it can be quickly found and deployed freely.
5:7 Can I use this to completely replace my Android OS
All that I've read about this would lead me to say "no" . However, the device that you are working on is yours and you can try. Some things to consider though:
Debian Kit is dependent on Android for hardware compatibility
If you mess with your devices' internal partition tables and fail somewhere, then likely the device will be bricked
If you do succeed, then the device that you now have would lose many of its capabilities
Worst case scenario is perma-bricked
Best worst case scenario is semi-bricked or boot-looped
Mainly if you're after a native linux experience without Android fluff you'll likely want to seek out projects similar such as "ubuntu touch" or making your own custom kernel and rom that has the bare necessities for compatibility for your devices' hardware. This last option is an extencive project to undertake, but, thankfully many other people have posted guides along those lines.
5:8 How do I add repositories to Debian?
So I want to add repositories to Debian but I get error messages or I don’t want to manually edit the sources file; how do I do that? Answer; this requires that we first install ‘mr’ because squeeze unlike Ubuntu doesn’t come stock with an easy way to mess with repositories.
First open a command terminal or ssh connection with connectbot under your normal username
enter the following command to install
# sudo apt-get install mr
input your sudo password and accept that it will take about 3404kB on your system
once the install has completed run the following command to pull up the help page. Press ‘q’ on your keyboard at any time to exit the help.
# mr help
Now we can add or edit repositories with the following command.
# mr config
5:9 I get java vertual machine errors when trying to open jar files after following 7:4-4.2 Installing Java for ARM from source.
So I followed the directions to the letter now when I run a 'java -jar [path to jar file] I get the following errors
Examples:
Links:
Answers:​
5:10 Sooooo what's the difference between the arm(hf) and arm(el) that's all over development sites and projects?
Examples:
Links:
Answers:​
6 Introduction, Disclaimer, note to forum Moderator
Contents
6 Introduction, Disclaimer, note to forum Moderator​6:1 Introduction
Yep I put this near the end, mostly so we don't have to look at this every time that we load the page.
There be a guide within the Debian Kit and some of this is very similar, however, typos and customization directions left me wanting a little more. So this all in one start to finish compilation and distillation of information is my contribution after months of google searching reading and hitting errors.
This is a guide for all devices capable of downloading Debian Kit from the android marketplace and for those users of android and linux hybrid systems that need a little help from time to time.
All credit for actual projects referred in this tutorial should of course go to the respective development teams and individuals, this guide is here to serve as a one stop shop of hints, links, and direction for starting your own dualboot mobile system of fantasticness . Some of the combinations of ideas and methods i would consider mine in the sense that i would consider a best seller cookie recipe that I cooked up to be mine, that being stated, I welcome you to use, test, and co-develop with me.
Feel free to question and or assist with this project as i’m no expert.
The Google Document that this is posted from is constantly being updated and should be used to keep the most current with this project. I will be doing updates to the XDA postings of this guide as often as I am able.
6:2 Disclaimer
I will accept no blame for what you of your free will choose to will yourself to choose to do... that being stated what follows assumes that root if not already achieved will be achieved before proceeding to download any of the suggested apps/packages/programs, furthermore you'll need a external source of of storage to install the Linux OS (like a sdCard), yet another prerequisite is considerable patience and time.
6:3 Note to forum Moderator
To the XDA Mod reading this: if posted in wrong section, please notify author and move as necessary; if incomplete and missing references, please notify author and be a little patient as this is still in construction and will continue to be updated until I feel its complete. Thank you and hello.
6:4 Statement of long term goal for this project
To the reader that is unsure as to what the author of this document is suggesting that we do with this (upon completion) full guide. Personal, private, mobile, cloud server is the tree of descriptors that most succinctly names the end goal. Starting from base rooted android system we'll install linux on to three or more "computers" from there we'll install cloud services; one will be the master or host or server, and the remaining two "computers" will have linux with cloud services and be designated as pupets or node. After that its a matter of networking the host and nodes to securely pass data and processes between one another so that when a process is run within the networked cloud system the result is a distributed workload across all the devices. Once that's up and running and debugged we'll install a GUI on top of the cloud system and run some desktop games using one device as a screen and as many other devices as user controls and process load distributors. In short turning recycled android phones into a supercomputer capable of doing super things; gaming just being the example task that I'll likely use to tax the all the devices as much as possible, bend it till it breaks kinda thing. From there its about looking for new ways to leverage such system to perform novel tasks because the android os is still there as well as all the hardware that can still perform tasks, such as your mic, camera, speakers, wireless antennas; I'll be looking into utilize as many inputs as possible, perhaps a mobile Watson that can see, hear, sense location velocity and orientation of each separate device... yep that's the challenge. The “cookie recipe” that I spoke of earlier is rooted and tangled in this concept; running cloud services on the arm processor has already been done, running cloud services on linux has been done, running linux has been done, gluing it all together while still having a cellphone or tablet to play on or text message with (to my knowledge) has not been done... yet...
6:5 Distillation of current project completion
Currently the guide can be followed as a companion to the readme that comes with debian kit, you can get up to the point that I am now. That means for every rooted android device you own you can have linux running operations along side by side, it's like having a pocket computer in every way... almost. From there you can use the apt-get commands much like we use the. Google play store market place (or whatever they renamed it to) to download and install programs (games, network pen testing software, image/video/audio converting and authoring software to suggest a few) or you can use it as a development platform for making games or applications for your phone on your phone, sky should be the limit, at least that's what I'm here to test
7. Getting comfortable and customizing your new system (Part 1)
Contents
7. Getting comfortable and customizing your new system​This section is dedicated to making your life easier if you're new to running Linux on Android. Many of these following guides will function no matter what method you use to run Linux on your device; for example I'll be testing ‘Limbo QEMU’ and ‘Linux on Android’ from the android marketplace, which use outright emulation or chroot “under the hood” so to speak to serve up a Linux environment, essentially giving you the same experience as ‘Debian Kit’... However, there will be some key differences in how the device’s hardware is accessed and I’ll have to split out the eccentricities in those methods so the main goal of the entire document can be achieved.
7:1 Connection Methods
Here will be a culmination of all the ways to connect to your linux system from another device or computer or make more than one linux device communicate with one or more devices.
7:1:1 Connecting locally
7:1:2 Connecting wirelessly through wifi
7:1:2-1: find your android's IP address
At some point you'll need the IP address for your device. To get this information back out to your devices' home screen:
Press menu and tap settings
Tap 'Wireless & networks'
Tap 'Wi-Fi'
Press menu and tap 'Advanced'
There you should find your device's IP address and have the option to 'Use static IP' if you know how to use such things. For now make note of your device's IP address and continue on with some of the ways to use this set of numbers.
7:1:2-2.1 Remote RDP in from a second android device
To do this you'll want to have; already started linux on the Host machine with a 'deb x' command though Connectbot, connected to a wifi access point, and know your IP address.
Open Remote RDP on the device that is not running Linux
Make a new connection by either tapping the plus (+) sign in the lower right of the screen or by pressing menu and tapping ‘add’
Type in the IP address of the device that is running linux into the 'Host' line at the top.
You may press back and then tap on your new connection to test it.
Note: you can always modify the other fields such as 'User' and 'Name' at a later time by disconnecting and then pressing and holding on the connection in Remote RDP main screen and tapping edit
Input your credentials (sometimes you have to do it twice, don't know why) and be amazed that the interface is actually a little peppier.
Now that you have remote access to the device you can now leave it on a charger somewhere and connect into it from rooms away; even if someone else is using it for browsing, and some gaming... I have yet to try it while receiving a phone call though so you may have to reconnect after the call disconnects and that could loose you a session of whatever you were doing, other's comments encouraged.
7:1:2-2.2 Remote RDP in from a second computer
Internal update: tested wile access point received call. Result, internet access dropped, connection between other device and computer stayed alive.
To perform these steps you’ll want a computer running a Remote Desktop Client. I’m using a laptop running Ubuntu 12.04 and I’m connected to the same wifi network as the device (myTouch 3gs) that I wish to connect to. The Android device and computer are connected to the same wifi access point. The program that I’m using on my laptop is ‘Remmia’ which came stock installed with my operating system. To call up the help documentation:
1. Open a terminal window on your computer
2. input the following command
# remmina --help
3. This will either result in your system saying that you don’t have that package installed and maybe a message too stating that it can be installed through an ‘apt-get’ command OR you’ll receive a helpful message.
if you get errors; then search on google for an equivalent application that comes on your operating system and see if you can’t use that instead of installing yet another thing to your computer.
if you get a helpful message; then continue to the next step of this mini-guide.
4. type the following command in your computer’s terminal window to open a new window for creating a new connection.
# remmina --new
5. There will be a bunch of options but right now we’re concerned with the ‘Server’ line. Input your device’s IP address (see section 7:1:2-1 if you need help finding that)
6. Under ‘Resolution’ choose ‘Custom’ and pick something reasonable or leave it at ‘640x480’
7. Mouse down to the ‘Color depth’ option and choose ‘High color (16 bpp)’
8. Click ‘Connect to test without saving or click ‘Save’ to save it for later
9. Once you click connect a new window should appear, and, if you’ve already used ‘Remote RDP’ on the android side of things you’ll likely know exactly what to do here... if not follow the next steps
10. Input your username and password and simit. You may receive the usual error message stating that it couldn’t connect; just try it a second time, input your username and password and try logging in.
11. Once logged in; jump to any other part of this guide and enjoy your linux box on a bigger screen.
12. To re-open and re-connect to the device after shutting down or being disconnected, run the following command to open ubuntu’s RDP
# remmina
7:1:3 Connecting wirelessly through bluetooth
Using the ‘apt-cache search’ command and adding bluetooth seems to return results for obtaining drivers and I’ll be updating this section with source file install instructions when I get around to it. I worn you things of of this nature have the potential for abuse just like wireshark in end result, however, the other much more pressing matter is transmitting data such as audio to another device based on location data from the GPS so we can make a surround sound system that automatically transmits and plays the correct audio from the correct direction to the point selected as center or main listener compensating for the speed at which sound travels at your specific altitude. (this is another cookie recipe I’ll be cooking up)
7:1:4 Connecting wirelessly through data network
7:1:5 Connecting wirelessly through atana directly
7:1:6 Connecting through USB with computer
7:1:7 Connecting through USB with USB host mode
7:1:8 Connecting through visible light spectrum
http://www.ted.com/talks/harald_haas_wireless_data_from_every_light_bulb.html
http://www.ted.com/speakers/harald_haas.html
Saw a presintation on ted.com that leads me to believe the software to make the screen of one phone talk to the front facing camera on another phone and back again may already be availible for linux somewhere. Found some links so the interested can dream with me.
7:1:9 Connecting though invisible light spectrum
This is nothing fancy just another name for 'beaming' files though inferred. It might require that I take apart some remote controls for old tvs and usb charging cable, but it be sweet to have a universal tv remote pug for android.
7:1:10 Connecting though directed/focused light
Yep we're talking about linux android hybrids with frickin lasers shooting out of them.
7:1:11 Connecting through audible sound
Were talking modum squeal and phone line compatibility as there are already good directions for a USB phone line adapter and USB host mode for many android devices, so why not.
7:1:12 Connecting though inaudible sound
Think really high frequencies for device to device communication of live location short range radar like setup.
Think really low frequencies for communicating through solid objects such as tables.
Think multi touch table when you set your phone down. Seen some development.
Think keylogger from across a conference table; project already exists.
7:2 Customization of GUI
Order and numbering of this subsection is subject to change, thus any comments should also reference it's subsection title. Here we'll have a compilation of ways to make your mobile viewing and interaction a more pleasant experience. These commands and directions will either be run on a terminal window or on the linux desktop within Remote RDP.
7:2:1 Saving Electrons
1. Turn off the screen saver.
Mouse over to the lower left corner of the screen
There you will see a little 'symbol' click it and in a second it'll pop up a dialog.
Mouse over to options, then screen saver settings, and tap it
In the upper right quadrant of the new window you'll find a drop down menu with disable screensaver being one of them.
Select your choice, then exit out. (See note and source above 4:3:4-5)
2. Turn off the CPU monitor
Open Remote RDP and login as your user with your password
Once the GUI has loaded send the right click command to the window bar and select 'Add / Remove Panel Items'
Select 'CPU Usage Monitor'
Click on remove
Close the window
3. Set auto lock
Mouse over to the lower left corner of the screen
There you will see a little 'symbol' click it and in a second it'll pop up a dialog.
Mouse over to options, then screen saver settings, and tap it
In the 'Display Modes' tab select the check box 'Lock Screen After'
Set the time to the desired amount of inactivity in minutes
Close the window and wait that long to test it.
4. Set auto shutdown?
7:2:2 Making it Pretty
1. Change your background
Open Remote RDP and login as your user with your password
Once the GUI has loaded send the right click command to the virtual desktop by either
Double tap+hold for a second or two, then release OR
Pressing menu on your device
Tapping ‘Mouse’
A circle will appear that you may tap and drag to control the mouse
4 options will briefly pop up when you lift your finger away from that circle
3 option from the left will send a right click command to the mouse, use it AND
Mouse down to ‘Desktop Preferences’ and tap it
A new window will appear after a moment
Within the new window under the Appearance tab you’ll find your ‘Wallpaper’ settings and an option to set it.
when you choose the option to change your wallpaper a new window/file browser will open. And there you may set a new one and discover where to put pictures from your android side so that they may be quickly accessed for wallpapering your desktop.
2. Change your theme
3. Change the location of your Task Bar
4. Task Bar customization
Open Remote RDP and login as your user with your password
Once the GUI has loaded send the right click command to the window bar and select 'Add / Remove Panel Items'
From here we can do a great many things to customize your experience but for now I'll step ya through duplicating my setup.
Mouseover to 'Add'
In the new pop up dialog choose 'Application Launch Bar' and click 'Add'
In the main window now select 'Edit' and minimise the Panel Preferences window for now.
In the Application Launch Bar window that popped behind select 'Accessories' and select 'Root Terminal'
Click the 'Add' button
Select 'LXTerminal' and click the 'Add' button
Close out of the Application Launch Bar when you're done adding shortcuts and restore the Panel Preferences window
Click on the 'Up' button until the selected application shortcuts are where they should be
7:3 Making things happen without excessive user input
1. Automount script that prompts then runs linux mount after device boot?
2. Disabling the prompt for the automount script.
7:4 Methods of installing or unpacking (Part 2)
_______Split
7:4 Methods of installing or unpacking
1. Moving files between android and linux when their dual-booted.
2. Un-zipping packages and the .rar's that sometimes get in the mix.
3. Installing or running .sh formated installers or scripts.
7:4-4. Installing from sources.
Apt-get is great for installing and uninstalling a plethora of fun and usefull software, however, it’s not going to be the magic bullet for installing everything you may want on your new linux system. What follows are the steps that I take when installing experimental and unsupported software to my devices. As always be careful when copying what I suggest here as your system may have differences to mine.
7:4-4.1 Unpacking tar.gz files
At some point you'll run into the need to extract or unpack something that you can't normally install. For this example I'll show you how to unpack java from sun built to run on ARM linux; you may find it at the link bellow and then download and copy to a new folder in your home directory named 'SourceFiles' or something that you'll remember.
http://www.oracle.com/technetwork/java/embedded/downloads/javase/index.html
1. Run the following commands to back out with change directory to the root comand line, then the next to extract the file
# cd /home/[username]/SourceFiles
# sudo tar -xzvf /home/[username]/SourceFiles/ejre-*
2. Input your password and let it sit for a bit
3. Next we'll move to the next section; installing Java for ARM
7:4-4.2 Installing Java for ARM from source
1. First to make sure my system is cleaned or purged of openjdk I ran the following command.
# sudo apt-get purge openjdk*
2. Make a new folder in the "usr/lib" called "jvm" by first "cd" over to it in the command window
# cd /usr/lib
3. Then make the directory or file with:
# sudo mkdir /jvm
4. Then we move the extracted source files over to jvm folder found under the [root directory of your device]/usr/lib/
# sudo cp -rv /home/[username]/SourceFiles/ejrel1.7.0_21/ /usr/lib/jvm/
Note: if you get "cp: cannot stat..." errors; then run
# cd ~
To get back to the root of your bash screen and try again.
Note: the letter 'v' in both the "cp -rv /home*" and the "tar -xzvf /home*" commands can be removed to keep the amount of text whizzing by to a minimum.
5. Then we create a system link in “sbin/java” that points back to where java is located (think of it like a shortcut that your system can use to run Java commands without asking you where it’s installed) with the following command
# sudo ln -fs /usr/lib/jvm/lib/java /sbin/java
Note: in the above command; the "-fs" part = 'f' forces the link, this makes it so that you can re-run this command if it messes up the first time and the 's' part = create a symbolic link, this is like a short cut... sort of, there are different kinds and you can find more by using
# ln --help
in a terminal window.
Note: the "/usr/lib/jvm/lib/java" part of the command = the full path to wherever the java executable really is and the "/sbin/java" part = where your system normally puts links in. These parts may need changing in odd cases, but, if you've followed along so far without issue then it should be 'safe' to continue.
6. Finally we check that the system can now find java with the following command
# java -version
7. Lone behold you'll likely get an error message stating how "java" isn't a bash command. All is not lost though; we just need to take this to the next guide... 4:2-4.3 Adding Commands to Bash... I know this because you can check your java version by running
# /usr/lib/jvm/lib/java -version
7:4-4.3 Adding Commands to Bash
There be two ways to go about this; one is temporary and uses the alias command in a terminal window, it lasts until your connection ends; the other is getting into your linux bash command file and adding the commands, this will last until you overwrite it again or restore it from a backup of the original or reinstall the entire linux distro, this carries small risk of breaking your install but it seems worth the trouble...
1. Open Remote RDP and log in as a normal user
2. Open the file browser (navigate to the home directory for your user if you're not already there)
3. Mouseover to 'view' at the top of the window (its between 'bookmarks' and 'tools') and select 'show hidden files'
4. Make a new folder for backups of linux system files and a new folder in that explaining where to put the back up. For example mine looks like this: /home/[username]/BackItUP/found_in_home.[username]/[file-that-i-backed-up]
5. Find the file called ".bashrc"
6. Copy the file to the backups folder
7. Open the file ".bashrc" under the original file path eg: "/home/[username]/" with leafpad
8. Ensure the part about aliases has the 'if' statement not commented out. Meaning that if you scroll all the way down in leafpad there should be no '#' before the 'if [ -f ~bash_aliasas*' where you to find one remove it and save the changes
9. Make a new file in your home directory titled '.bash_aliases' by sending the right click command to a blank spot in your home directory and selecting new and selecting create new blank file
Note. If you don't still have hidden files set as visible then the new file will not show up until you do.
10. Open the new file with leafpad and add aliases using the following format
# alias<desired alias>='<linux_command>'
So for this case we'll use this following command to make an alias for java so it can finely run free.
alias java='/usr/lib/jvm/lib/java'
Note: the single quotes around the file path need to be there.
11. Save and test.
Note: you may have to restart your connection ie: log out and back in for the changes to take effect. Totaly worked for me though
Note install prossess not yet compleat; running '.jar' files still return errors. Now trying some new commands:
To let the system know there's a new program to play with we'll use the following command
# sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/lib/java" 1
And to make it the default runtime for java commands we'll use the next command
# sudo update-alternatives --set java /usr/lib/jvm/lib/java
Navigate to the /ect folder on the root of your device and open the enviroment file with LeafPad; add the following lines and save it (of course make a back up befor aplying changes) log out and log back in for changes to take effect
JAVA_HOME="/usr/lib/jvm"
Edit your bashrc file with:
nano ~/.bashrc
And add the following two lines to the tail end and sava and exit:
export JAVA_HOME="/usr/lib/jvm"
export PATH=$PATH:$JAVA_HOME/bin
7:4:4.1- Installing Map Tools
Map tools is Java dependent, meaning that the first steps will involve searching and installing a Java runtime environment with the steps in 7:4-4.1. Then we'll download a map tools zip, unpack it and run the '.jar' file NOT the .sh or .exe as the former is broken and the latter is for windows.
1. Navigate your android browser or iceweasel over to the following link and download ‘maptool-1.3.b89.zip’
http://www.rptools.net/?page=downloads#MapTool
2. Once the download has finished open up a file browser on either OS and copy/past the .zip file over to the following example file path
/home/[your-username]/download
3. Now to unpack/unzip the file...
if this is the first time that your linux distribution you’ll be prompted to select an application to open .zip files with.
in which case you can select the triangle next to ‘other’
scroll down to ‘xarchiver’ and select it and move to step 4 of this mini guide
... or
if this is not the first time that you’ve unzipped something with your linux distribution
just send the ‘right click’ command to the ‘.zip’ file
select extract and move to step 4 of this mini guide
4. Select where you want to extract maptools.zip by ‘clicking’ on the folder icon and in the new window that pops up navigate to the location that you want to extract to.
5. Once maptools has been extracted its time to open a terminal, either though connectbot ssh or by clicking on the programs menu button, mousing up to accessories and clicking on either terminal window option.
6.
7:4:4:2 Solved: Installing jMonkey on Android
1. Download jMonkey from their website. For Linux you’ll want the one ending in ‘*.sh’ and then transfer it to the linux os partition or file structure so you have full read/write permissions over it from the linux side of things
http://jmonkeyengine.org/downloads/?did=2
2. Open a file browser in your prefered RDP GUI application and navigate to the ‘jME3_SDK_3.ORC2-linux.sh’ file; for me I put it in ‘/home/[user-name]/Downloads
3. Right click the ‘*.sh’ file and click ‘Properties’
4. In the ‘File Properties’ window that pops up, after a sec, click on the ‘Permissions’ tab and mouse over to the box that has the words ‘Make the file executable’ and click the box so that it shows a “check mark” instead of a “minus sign or dash”
5. Click the ‘Ok’ button on the ‘File Properties’ window and open a new terminal window (it’s best not to use connectbot ssh or a terminal emulator for running this command as it will need a GUI in a second to load in) and put in the following commands, adjusting the file path to yours would be a good idea.
# sh /home/[user-name]/Downloads/jME3_SDK_3.ORC2-linux.sh
or
# sudo sh /home/[user-name]/Downloads/jME3_SDK_3.ORC2-linux.sh
it’s going to hang out and do nothing for a minute right around line ‘Configuring the installer...’ and again at line ‘Extracting installation data...’ but will eventually start a GUI installation window with a red loading bar and stuff or it’ll throw-up a message like...
...(authers reminder to self ?/home/[UN]/Downloads/jmonkeyUserDump)...
If so then:
6. Assuming all is well and slowly moving you’ll be presented with the jMonkey installation wizard and you can run through the process of selecting where java runtime files can be found and where to extract the jMonkey collection of development tools. It's going to take a minute or sixty but, if you sit back and let it do it’s thing without much else going on on the device, jMonkey will eventually install successfully.
7. It’s not over just yet, once jMonkey is unpacked, installed, knows where “openjdk” or “Java JDK” is (I successfully tested this with openjdk-jdk and it’s family of openjdk packages installed on the device; using an ‘apt-get install’ command’ before running the jMonkey installer) and opens for the first time; you need to mouse over to ‘help’ at the top of the jMonkey window and mouse over to ‘check for updates’ and click it. This step is the one that everyone forgets in their excitement and one of the top reasons for people to search for error fixes right after installing jMonkey. The author on the main page of jMonkey’s install help guide states these steps but there be a lot of words there and it’s right near the top of the text block so I and many others have missed it.
8. After updating jMonkey though the help drop down menu you are ready to rock and roll. Try mousing over to ‘File’ click it and mouse down to ‘new project’ click it and click ‘Next’ and ‘Finish’ to keep default settings, wait a second or two, and start making stuff that can then be exported out to formats that are compatible on just about any device and any os you may want to write a game for.
9. For help with this specific program “jMonkey” you should direct your attention to:
http://jmonkeyengine.org/forum/
and
http://en.wikipedia.org/wiki/JMonkey_Engine
and for help with getting jMonkey to run on android with linux dual booted; then direct your attention here on this document and it’s mirrors.
You can comment on the program itself here too but, as I’m not the developer of the program, my knowledge of what make’s it work and not work is very trial and error at times. My primary concern is making it easy to install on your device so that developers on that site have another method/platform to do developing with.
Next up?... Syncing files between your android, dual booted Linux distro, And your home PC.
Why? Because being able to sync between all your devices seamlessly will allow quicker development for these systems on the whole.
8:2:4 Example of the first time you run deb command
8:2:4 Example of the first time you run deb command (see sections 5:4 , 1:3:2-7)
# /data/local/deb/deb
e2fsck 1.41.11 (14-Mar-2010)
b: clean, 5498/432640 files, 99548/1297408 blocks
armel
I: Installing core packages...
I: Unpacking required packages...
I: Unpacking libacl1...
I: Unpacking libattr1...
I: Unpacking base-files...
I: Unpacking base-passwd...
I: Unpacking bash...
I: Unpacking libbz2-1.0...
I: Unpacking coreutils...
I: Unpacking dash...
I: Unpacking libdb4.8...
I: Unpacking debconf-i18n...
I: Unpacking debconf...
I: Unpacking debianutils...
I: Unpacking diffutils...
I: Unpacking dpkg...
I: Unpacking e2fslibs...
I: Unpacking e2fsprogs...
I: Unpacking libcomerr2...
I: Unpacking libss2...
I: Unpacking libc-bin...
I: Unpacking libc6...
I: Unpacking findutils...
I: Unpacking gcc-4.4-base...
I: Unpacking libgcc1...
I: Unpacking libstdc++6...
I: Unpacking grep...
I: Unpacking gzip...
I: Unpacking hostname...
I: Unpacking insserv...
I: Unpacking lsb-base...
I: Unpacking liblocale-gettext-perl...
I: Unpacking libselinux1...
I: Unpacking libsepol1...
I: Unpacking libtext-charwidth-perl...
I: Unpacking libtext-iconv-perl...
I: Unpacking libtext-wrapi18n-perl...
I: Unpacking mawk...
I: Unpacking libncurses5...
I: Unpacking ncurses-base...
I: Unpacking ncurses-bin...
I: Unpacking libpam-modules...
I: Unpacking libpam-runtime...
I: Unpacking libpam0g...
I: Unpacking perl-base...
I: Unpacking sed...
I: Unpacking sensible-utils...
I: Unpacking login...
I: Unpacking passwd...
I: Unpacking libslang2...
I: Unpacking initscripts...
I: Unpacking sysv-rc...
I: Unpacking bsdutils...
I: Unpacking libblkid1...
I: Unpacking libuuid1...
I: Unpacking mount...
I: Unpacking liblzma2...
I: Unpacking sysvinit-utils...
I: Unpacking sysvinit...
I: Unpacking tar...
I: Unpacking tzdata...
I: Unpacking util-linux...
I: Unpacking xz-utils...
I: Unpacking zlib1g...
I: Configuring required packages...
I: Configuring ncurses-base...
I: Configuring sensible-utils...
I: Configuring libc-bin...
I: Configuring gcc-4.4-base...
I: Configuring libc6...
I: Configuring debianutils...
I: Configuring bsdutils...
I: Configuring libsepol1...
I: Configuring libgcc1...
I: Configuring libncurses5...
I: Configuring libattr1...
I: Configuring e2fslibs...
I: Configuring base-passwd...
I: Configuring libcomerr2...
I: Configuring mawk...
I: Configuring libdb4.8...
I: Configuring hostname...
I: Configuring libacl1...
I: Configuring libslang2...
I: Configuring libss2...
I: Configuring liblzma2...
I: Configuring insserv...
I: Configuring gzip...
I: Configuring libbz2-1.0...
I: Configuring libselinux1...
I: Configuring libstdc++6...
I: Configuring coreutils...
I: Configuring ncurses-bin...
I: Configuring diffutils...
I: Configuring tar...
I: Configuring zlib1g...
I: Configuring base-files...
I: Configuring xz-utils...
I: Configuring dpkg...
I: Configuring sysvinit-utils...
I: Configuring dash...
I: Configuring perl-base...
I: Configuring libtext-iconv-perl...
I: Configuring sed...
I: Configuring grep...
I: Configuring findutils...
I: Configuring liblocale-gettext-perl...
I: Configuring bash...
I: Configuring libtext-charwidth-perl...
I: Configuring libtext-wrapi18n-perl...
I: Configuring lsb-base...
I: Configuring debconf-i18n...
I: Configuring debconf...
I: Configuring libpam0g...
I: Configuring sysv-rc...
I: Configuring libpam-modules...
I: Configuring tzdata...
I: Configuring passwd...
I: Configuring libpam-runtime...
I: Configuring initscripts...
I: Configuring login...
I: Configuring libuuid1...
I: Configuring sysvinit...
I: Configuring libblkid1...
I: Configuring util-linux...
I: Configuring mount...
I: Configuring e2fsprogs...
I: Unpacking the base system...
I: Unpacking adduser...
I: Unpacking apt-utils...
I: Unpacking apt...
I: Unpacking aptitude...
I: Unpacking libboost-iostreams1.42.0...
I: Unpacking bsdmainutils...
I: Unpacking cpio...
I: Unpacking cron...
I: Unpacking libcwidget3...
I: Unpacking debian-archive-keyring...
I: Unpacking libgdbm3...
I: Unpacking gnupg...
I: Unpacking gpgv...
I: Unpacking groff-base...
I: Unpacking ifupdown...
I: Unpacking iproute...
I: Unpacking iptables...
I: Unpacking iputils-ping...
I: Unpacking isc-dhcp-client...
I: Unpacking isc-dhcp-common...
I: Unpacking logrotate...
I: Unpacking libept1...
I: Unpacking libnfnetlink0...
I: Unpacking libsigc++-2.0-0c2a...
I: Unpacking libusb-0.1-4...
I: Unpacking man-db...
I: Unpacking manpages...
I: Unpacking module-init-tools...
I: Unpacking nano...
I: Unpacking libncursesw5...
I: Unpacking net-tools...
I: Unpacking netbase...
I: Unpacking netcat-traditional...
I: Unpacking libnewt0.52...
I: Unpacking libssl0.9.8...
I: Unpacking libpopt0...
I: Unpacking procps...
I: Unpacking libreadline6...
I: Unpacking readline-common...
I: Unpacking rsyslog...
I: Unpacking libsqlite3-0...
I: Unpacking info...
I: Unpacking install-info...
I: Unpacking libudev0...
I: Unpacking libxapian22...
I: Unpacking whiptail...
I: Unpacking tasksel-data...
I: Unpacking tasksel...
I: Unpacking traceroute...
I: Unpacking udev...
I: Unpacking vim-common...
I: Unpacking vim-tiny...
I: Unpacking wget...
I: Configuring the base system...
I: Configuring module-init-tools...
I: Configuring libgdbm3...
I: Configuring isc-dhcp-common...
I: Configuring libpopt0...
I: Configuring libusb-0.1-4...
I: Configuring libxapian22...
I: Configuring install-info...
I: Configuring libssl0.9.8...
I: Configuring vim-common...
I: Configuring netbase...
I: Configuring libudev0...
I: Configuring adduser...
I: Configuring traceroute...
I: Configuring manpages...
I: Configuring libsqlite3-0...
I: Configuring iproute...
I: Configuring wget...
I: Configuring groff-base...
I: Configuring libnewt0.52...
I: Configuring net-tools...
I: Configuring bsdmainutils...
I: Configuring libsigc++-2.0-0c2a...
I: Configuring netcat-traditional...
I: Configuring libncursesw5...
I: Configuring info...
I: Configuring iputils-ping...
I: Configuring cron...
I: Configuring nano...
I: Configuring udev...
I: Configuring libboost-iostreams1.42.0...
I: Configuring rsyslog...
I: Configuring cpio...
I: Configuring isc-dhcp-client...
I: Configuring vim-tiny...
I: Configuring readline-common...
I: Configuring libnfnetlink0...
I: Configuring man-db...
I: Configuring procps...
I: Configuring whiptail...
I: Configuring ifupdown...
I: Configuring libreadline6...
I: Configuring logrotate...
I: Configuring libcwidget3...
I: Configuring iptables...
I: Configuring gpgv...
I: Configuring gnupg...
I: Configuring debian-archive-keyring...
I: Configuring apt...
I: Configuring libept1...
I: Configuring apt-utils...
I: Configuring aptitude...
I: Configuring tasksel-data...
I: Configuring tasksel...
I: Base system installed successfully.
OK
Your next steps: enter 'apt-get update' to fetch package lists, and 'apt-get install andromize' to add a small packet that further adapts Debian to the Android environment.
•
Dear Sir,
Good day.
This is Suresh from India. First I thank you verymuch for your wonderful project :good: and I use now. Anyway I thanked you 6 times for this thread, which may make you happy.
I have tested 3 linux images through 'complete linux installer' project and 2 linux images through your 'Debian Kit' project.
I couldn't get root access and access to SD card content through 'Complete linux installer' project, but other things are good.
But in your 'Debian kit' project only, I got root access to linux system and got SD card content access.:good: Thank you.
Actually I installed the Linux images through the guide from this link - http://sven-ola.dyndns.org/repo/debian-kit-en.html.
Is this your's link ? Because,name is different, 'Sven-Ola', thatswhy, I asked.
Ok. first I tried 1GB disk image with Debian Stable version in my SD card. It was good until installing some programs through 'apt-get' command, then I got issue,the connectbot didn't start RDP (through 'deb x' command) and gave 'out of space' error in /var folder, actually I forgot that exact error. Sorry.
Then I installed 2 GB disk image with Ubuntu Lucid version in SD card (fat32 file system,8 GB). It was also well upto installing 2 programs,(Open office and Epiphany browser), because, there is no 'office' preinstalled in package. But , Yesterday, I tried 'docky' (like as Cairo dock) package through Synaptic. It downloaded, but during installing, it hanged at some point. I have attached the screenshots herewith. It hangs for ever. So, I typed exit. After that I tried some commands as 'apt-get autoremove', 'apt-get upgrade' and some commands. But, It give the same error - 'dpkg was interrupted, so you have to reconfigure through 'sudo dpkg --configure -a' for correction. But, after typing that command, again it hangs at some point. After that I couldn't remove the 'docky' package and also I couldn't use synaptic. the synaptic couldn't start through terminal. It gives the same error and hangs.
So, please help.
Issues for me in 2GB, Ubuntu lucid version.
1. There is no Office installed in package. So, I manually installed openoffice through 'apt-get' command (but, it is not a big deal)
2. Firefox crashes at starting, even at single time, it didn't open. (it is not only in 'Debian Kit', also in 'Complete linux installer' for in my Dapeng A9230+, 5 inch mobile, MTK6575, ARM V7 Cpu, 1 Ghz using Custom ICS 4.0.6). So, I removed firefox. Installed chromium-browser, but, chromium also didn't open. Finally installed 'epiphany browser' through 'apt-get' and it works good. (It is also not a big deal for me )
3. Synaptic package manager and Software sources, both didn't open. I have to open through 'Terminal' as 'Sudo synaptic' and for 'software sources' - another command... I forgot that. But, 'sudo synaptic' also gives some error, please see screenshot, But it opens synaptic.
Last Question - For safety, I have copied the downloaded 'Debian.img' from SD card to my PC. If suppose, I want to reinstall in another ROM,, what exactly I have to do ? ..... Yes, you have already mentioned.......
The following is Ok ? from this page - http://sven-ola.dyndns.org/repo/debian-kit-en.html
"To remove the kit from your Android device later on, start a root shell and enter /data/local/deb/uninstall. After this, do not forget to remove the debian.img file from your SD-Card, e.g. by using a file manager app."
Then , this
"If you upgrade/change your Android ROM, typically the debian.img file on the SD card isn't lost. However, you may miss the deb link and also, there may be stray symlinks in your Debian file system pointing back to now non-existing files. Download and unpack the debian-kit*.shar file, run /data/local/deb/mk-debian -u to re-create the deb link and deb c to remove all backpointing symlinks (they will be re-created on the next turn)."
After this, Will it again start to download some packages in New ROM ?
Ok. Again thanks for your hardwork.:good:
Love your guide worked out well for me. I uninstalled and reinstalled like 30 times to memorize the prosses incase somthing happend so I can fix it. I was just wondering if you going to get more distros working using this method. Linux Mint is at the top of my list and of course Fedora, Open Suse, Arch, LMDE, Gentoo, Slax(or Salix), FreeBsd. I know all dont have arm ports yet but I know Fedora does, and Linux mint is a modified version of ubntu. Lastly I realy hate LMDE desktop enviroment is there a method to get other desktop enviroments and remove the one installed at the same time to prevent conflicts. I know I am asking alot I am just throwing ideas out there that Im sure other people who read you guide would be asking.
added bunch new content and formating, interduced new sections and consepts
howdy all; really good to get some responses as I understand this to be on the super-tech side of life. I posted some longstanding solutions above in the RESURVED3 post of this thread to some of the issues that where brought up (their up there and will eventually be edited for easier readability as the organization of the proposed solutions are a bit "mind dumped" as I was reading solutions and my other notes)
Love the screen shots, I've yet to try any applications on android for this task so the guide right now is a bit of a novel and I'd like to bring in more of a picture book like experience for some of the more complex tasks. Suggestions welcome as always.
Excited that you're all enjoying this project. I've been working all day today in order to reorder and bring new updates and I've just finished updating all effected posted changes (at this point every-time I do that it's going to mess with the visibility on the mobile side) all other changes tonight can be found live on the google doc side of things if you use the google drive app in chrome on pc or the google drive app from the market place. There you may also make specific notes by highlighting a sections' title (please only highlight the section title unless otherwise specified for making notes) and beside near the top of your screen you'll have a speech bubble that may also pop up when highlighting words within the document. This speech bubble will allow us all to comment on specific parts and see other's comment's in a nearly live format.:highfive:
pc
https://chrome.google.com/webstore/...fndbhieahigkjlhalf?utm_source=chrome-ntp-icon
Or
android
https://play.google.com/store/apps/...s.docs&feature=nav_result#?t=W251bGwsMSwyLDNd
@alchemygear
the other things I'll be trying out and have tried out to some extent is QEMU for pc and android now, see the links. My epic 4g has no problem running a full GUI with Limbo, the mytouch 3gS though only can handle command line interface so I bailed on it when debian kit crossed my radar and loaded without a problem on a 600 mhz processor. Once I've a good guide that we can all use for installing linux to one system at a time I'll be working on some of my command line knowledge so that I can run android, QEMU, and debian kit all at the same time and all on the same hardware... really going to tax the system but it will allow me to make each one of my devices act as though it has two linux systems, effectively doubling the number of virtual machine nodes that I can debug on, however, doing so causes me to predict enormous slowdowns and possibly overheating of the hardware. But the benefits will be that I'll be able to have one real master and two real puppets or a system with one virtual master and five virtual puppets (this is because I'm currently limited to three devices at my disposal; one epic 4g slide and two mytouch 3g slides) or any combo between. Once I've a stable way of linking and assimilating new hardware whether it be virtual or real I'll be able to really expand this protect and make custom cloud servers for those that want one but don't want to learn the nitty gritty details because the applications that one could use such a system should get the imagination revving.
Didn't want to leave ya hanging without a full response to some of the things that I'm working on and with, hope it helps.
pc
http://wiki.qemu.org/Main_Page
Or
android
Limbo PC Emulator (QEMU x86)
https://play.google.com/store/apps/...vbS5tYXgyaWRlYS5hbmRyb2lkLmxpbWJvLm1haW4iXQ..
@ramsuresh4
I've been busy as of late, sure you'll see some changes all over, posted some options at the top of this page that may resolve some of your questions RESURVED3... think I may have mentioned that before in this post... let me know if there's something that I missed; kinda juggling all aspects of this protect (but I've got some teem mates catching up quickly:highfive at the moment so some answers will take longer for me to be able to test and debug so google and self improving attitude is the best bet aside from keeping up with the changes I make to the "doc" not to put you off or anything, just got to be 100% good and honest to humans :cyclops::silly: I'll be kicking round on the mobile side of things so updates to the "doc" first as always.
Ok all I'm shutting down my laptop as its become a knee-toaster and moving over to one of my device. You can find me on the google document that I'm writing and I'll be checking back from time to time on XDA.
I know the things i proposed will take time but one issue I am having is the small partion it creates. I tried expanding the partion to the whole disk but it just shrinks it down again. As i said I hate LXDE and would like to put a different desktop enviroment but most take up more space than given. How do you expand the partion size I need more space to work with I need 12 gigs. Lastly I really want linux to be the only sytem on my tablet, I hate android, I full linux tablet is my dream so not resorces are waisted on android. Thanks for taking the time to read my post and comment on it, I look foward to see the progress you make and I look forward to testing it.
alchemygear said:
I know the things i proposed will take time but one issue I am having is the small partion it creates. I tried expanding the partion to the whole disk but it just shrinks it down again. As i said I hate LXDE and would like to put a different desktop enviroment but most take up more space than given. How do you expand the partion size I need more space to work with I need 12 gigs. Lastly I really want linux to be the only sytem on my tablet, I hate android, I full linux tablet is my dream so not resorces are waisted on android. Thanks for taking the time to read my post and comment on it, I look foward to see the progress you make and I look forward to testing it.
Click to expand...
Click to collapse
Added updates to "doc"
________________________
Heh, glad to know that we're on the same wave length on expectations.
Partitioning is a tricky bit to the install process; one of the reasons I covered it in a different fashion than the one that can be found in the "debian kit readme" you can find my way in section 1:4 I think.
Remember for partitioning
~leave that tinny space at the beginning alone.
~leave make a partition for android to use the first partition
~make the android partition large enough that you can fit your: backups, re-flashing zips and recovery directions with files for recovering from a soft brick, and android system info that automatically likes to save there... about 3 gigs for me at the slimmest
~make the second partition the size of remaining space after the android partition.
~ensure all partitions are at the correct size and that you didn't accidentally move or over write that beginning few magabites during any of your edits (this is important)
~ensure that all have labels of some sort and drive letters you'll remember and that don't cause conflicts with your currently mounted drives on your computer (had errors when my sdcard remounted after partitioning on my computer because the second partition of the sdcard and the drive letter for my computer's cd read/write drive where the same.)
~hit apply and hope no background task on your computer makes things barf. (Try turning off your computer's internet, or, starting these steps from a fresh reboot, or, in a live cd environment whether it be real or running in VM)
Hope it helps, I'll be working on partitioning again as my myTouch's debian install has gotten chubby again with all my testing. Updates will be where they always are first
As for LXDE I encourage you to experiment. I've seen methods around for installing other GUI's to the "armel" flavor of linux but I've been on other tasks with this guide as of late. I'll be back on it as I'm going to be trying to link one of my phones as a secondary keyboard and the other spare phone I have as a 3D mouse (both are myTouch 3Gs) so that I can use my epic 4g as the main screen. Currently LXDE serves my purposes fine but I like you will want something a bit more snazy... added a sub section in section 7 so I can add info related to this as I've time to do so.
Running Linux as your rom is still in development stages and very risky for your device as it wipes everything off your device and I mean EVERYTHING you'll want to know how to recover from a full brick or super brick on your device though a computer and you'll want to have been though re-partitioning your system memory, re-flash your boot loader, re-flash your stock rom and kernel and programing, and re-rooting. You can find an Ubuntu flavor of Linux that will do just what you are asking, just google search "Ubuntu touch" and read up about it. Last I checked things where going really well for that team and there is already a lot of documentation on it.
Furthermore google search "linux android kernel merging" you'll find exciting news that the linux and android kernels are soon to become one. There is a big push for this from all over the dev communities and news is constantly being updated for it as this is very good, very good indeed for us all.
Hope I can make your heart beat a little faster with excitement for the future of mobile computing and thanks for the feed back I'll be working off and on throughout the day on the "doc"
________
UPDATE
More content on "doc" emailed the developer of Debian Kit
Sent from either my SPH-D700 or myTouch3Gs
Debian Kit Install guide for all
http://forum.xda-developers.com/showthread.php?t=2240397
Or
https://docs.google.com/document/d/1ssVeIhdBuuy8CtpBP1lWgUkG6fR6oHxP20ToYPPw6zI/edit?usp=drive_web
Thanks for the speedy response, first dont worry I have bricked my tablet, hard and deep a few times and figured out the secret to fixing it. I have to use my wifes computer and Pheniox Suit(she has windows and I cant fast boot my tablet as its a chinese tablet that has something like a rockchip which needs speacial softwar) to fix it but all I have to do is power down by holding the power key for 12 seconds, then pugin in too the computer with home pressed and then while home and power for 12(my tablets weird not 10 12 ?) seconds and then clicking the flash firmware button in the software even though its says no device detected it force flashes the rom everytime. My tablet only has 2 keys home and power. I will have to play around with the formating methods as I have tried what you said a few times but cant seem to get it right. I have been useing gparted as it has done well for me in the past few years, if you have a sugestion as to something better or point me to a guide for using the command line(im not affraid of it, it gives so mutch more power and controll). Thanks again for interacting with me and being knowedgeable about what your doing, I can't count how many sites and forums I have been to that have either no resoponses or just bull**** me because they dont really know what there doing and want to seem smart. I know I have years to learn about linux itself mutch less tablets eventhough I have been on linux for about 10 years(anyone who uses linux knows there is no end to what you have to learn).
Welcome, I lurk like a spider on this thread.
Neat I know very few with the combo of working knowledge and desire to abuse it perhaps you might be able to get the last puzzle peace in place for the tablet user in below link's thread, device is Chinese build 9 inch model #A13F9 or just A13, the user having issues has gotten past the dreaded kernel panic screen and has a working android boot, touch drivers is where this user and many others have gotten stuck and at this point it's so device specific that I'm almost out of general knowledge and long term memory stores, check it if you got time don't if you don't.
http://forum.xda-developers.com/showthread.php?t=2233159&page=4
OK back to our regularly scheduled programing:
So if I get you right your device has no external (real external like sdcard slot-less) if that's the case then Debian Kit as an app will not serve your stated goals; instead let's go on a montage of protects that I know of:
Ubuntu touch
http://www.ubuntu.com/phone/ubuntu-for-android
Dig around I found directions once to do a full flash of Ubuntu touch that over wrote everything.. I'll find it eventually or you will as this is exactly what I think you are asking for.
Linaro
http://www.linaro.org/
They are doing something savage. I've said plenty elsewhere.
Complete Linux Installer
https://play.google.com/store/apps/details?id=com.zpwebsites.linuxonandroid
I used this one second I think out of the history of apps I've used to push my processor. Uses a virtual loop disk drive mount like system that tagges along with the android OS. Much like installing to debian.img with Debian Kit as far as needing android in the mix, but, the methods between the apps for mounting a second OS are different. Compare the descriptions of each in the android market place to see what I'm talking about.
Limbo PC Emulator
https://play.google.com/store/apps/details?id=com.max2idea.android.limbo.main
This one is really cool as it allows you to create virtual hard drives in a couple formats, emulate a whole list of pc processors including Pentium 3, install nearly any OS to the virtual hard drive if you've got a working iso, and best of all if you do the install to virtual hard drive (and in some cases convert the pc's vm hard disk to a compatible format for Limbo to read... not actually that hard with google on my side) with a pc using a program like virtual box from oracle; you can then 'run' that virtual hard drive and it's installed OS on on an android system that doesn't have the capability to do the install process (usually this work around is really useful for older and low memory devices) very round about but useful if you want to boot gParted as though it where on a Pentium 3 computer and mess with partitions though USB host mode linked usb hard drive.... ok now to get where this gets dangerous use and no one and I mean it
###NO ONE READING THE FOLLOWING LINES SHOULD ATMEPT, BELIEVE, OR FOLLOW #####
Let's say that you've calculated the size of your ram on your device to be adequate to: run a striped android OS, Limbo, and a striped down linux kernel with just enough wits to run: partitioning, mounting and un-mounting, one to one duplication of files, and full USB support, screen output (those will be tricky but necessary as your willing your device into a brick). Let us also for arguments sake that you've full root and full read write permissions wile in this state to the 'real' android OS... that means you can then re-partition 'locally' all of your real system partitions, mount a secondary storage (can also be an sdcard for other devices; such as if you where to run though all these very knotey steps on an emulated android system identical or similar to yours on a safe virtual machine for debugging on a pc) though usb and either pull from the device side or push from the pc side: all the scripts and hardware drivers and directories to run Linux on your build, verify a complete and full clone has been made and pray to the dieaty of your choose, because when you reboot your device it will either be bricked (possibly for good this time) or it will chug away until the screen starts scrolling text and prompts you for input.
Things you'd want to look in to likely is first building a custom kernel that is stable, play around for a bit with it because it may distract you long enough for android and linux kernels to finely merge, by that point or when you tire of customization to your kernel you'll want to move on to: kernel rebuilds and building custom kernels. When you've all three of those to the point of understanding that you can read most of it and write some of it you should probably divide your attention some and dive into the same subject matter for your Linux distro of your choice, try to pick one that supports active development in kernel rebuilds specifically as what will need to happen is a mirage or hybridization of many disparate machine code language specific hardware resource calls and user interface listeners that maybe difficult to find any documentation on. In any case don't try that as mounting usb wile running android from ram is... incredible
#####NOW SAFE TO READ AGAIN
End montage... for now...
Glad I can meet or exceed expectations. Most of my linux training comes from years of playing with it and lots of google searching, I'll post up a copy of my bookmarks worth having backup eventually for you to pick though and update ya on good guides from time to time. The thing I heard somewhere about linux "good friend don't let their friends linux"
With that, good night and enjoy the falling stars if you look up.
Sent from either my SPH-D700 or myTouch3Gs
Debian Kit Install guide for all
http://forum.xda-developers.com/showthread.php?t=2240397
Or
https://docs.google.com/document/d/1ssVeIhdBuuy8CtpBP1lWgUkG6fR6oHxP20ToYPPw6zI/edit?usp=drive_web
Some nice reading you provided. With linux on arm my major issue is that there is not a lot of support for 4 core proccesors yet or so I have been told. The full flash ubuntu is for duel core prossesors so no luck for me. Thanks again for continuing to update and inform on a not so well know system.
Here is the build of my device http://gfxbench.com/device.jsp?benchmark=gfx27&D=Onda+V812+Core4&testgroup=system. It has all the details.
Dear Mr.SoAndSo and All,
Mr.SoAndSo, you are updating the thread well. Greetings.
I can't solve my 'dpkg interrupted' error in 2GB Ubuntu Lucid Version. So, I uninstalled that and downloaded, installed New 2GB, Ubuntu Precise through 'Debian Kit'. Installed, Libre office, Synaptic, Epiphany browser. But, Epiphany design is not good for me, compared to firefox, Iceweasel. If I try to install, Iceweasel through 'apt-get', It asks to install firefox. But, you know that, firefox, chromium didn't work.
Anyway I enjoy this OS. I have attached the screenshots here.
Thanks.
Sent from my Dapeng A9230+ through XDA mobile.

A few command line utilities for RT

So not to clutter up an 'apps' list, I am putting together pieces to enable my surface rt to have more functionality available for on device scripting and a put together a few utilities to fill some areas I think (?) were missing. I might use these from scripts, nodejs, powershell or anywhere else I might launch processes.
So for starters I made :
csnotify - A utility to simulate the toast notification banners (like what you see for weather or new mail alerts). Unfortunately the api used to actual system notifications are c++ sdk binaries which i can't use, so this is as close a clone as i could make. The options are many and explained in a readme file in the zip.
naudiocon - a simple console mp3 file player which i might use for sound effects but it plays a song just as well. There are many pieces to the open source NAudio library which could be useful for future audio media players.
wget - a simple way to download a file from a url via command line. not a true clone of wget but you can enter wget {url} or wget {url} newfilename. run without any params to see that usage syntax.
cryptocli - a simple command line file encryption and hashing utility. Possibly useful for email or sending between computers which has this utility installed. like most ports this runs on arm or intel windows.
speak - a simple text to speech utility to read text either from command line itself or from file specified in command line.
wscon - command line web server. spin up server on -p port and -d directory from command line or put shortcut to this app in 'shell:sendto' to send a -directory- to it (using default port or 8080)
The files are already signed, but if you download directly to your device you should probably right click the downloaded zip(s) and 'unblock' them on the file 'properties' page. This seems to be required when downloading to NTFS partitions, as it will flag the download as 'coming from an unsafe domain' (internet). If you save the file to non-ntfs sdcard/usb/nas you should not have to unblock.
nazoraios said:
So not to clutter up an 'apps' list, I am putting together pieces to enable my surface rt to have more functionality available for on device scripting and a put together a few utilities to fill some areas I think (?) were missing. I might use these from scripts, nodejs, powershell or anywhere else I might launch processes.
So for starters I made :
csnotify - A utility to simulate the toast notification banners (like what you see for weather or new mail alerts). Unfortunately the api used to actual system notifications are c++ sdk binaries which i can't use, so this is as close a clone as i could make. The options are many and explained in a readme file in the zip.
naudiocon - a simple console mp3 file player which i might use for sound effects but it plays a song just as well. There are many pieces to the open source NAudio library which could be useful for future audio media players.
wget - a simple way to download a file from a url via command line. not a true clone of wget but you can enter wget {url} or wget {url} newfilename. run without any params to see that usage syntax.
cryptocli - a simple command line file encryption utility. Possibly useful for email or sending between computers which has this utility installed. like most ports this runs on arm or intel windows.
The files are already signed, but if you download directly to your device you should probably right click the downloaded zip(s) and 'unblock' them on the file 'properties' page. This seems to be required when downloading to NTFS partitions, as it will flag the download as 'coming from an unsafe domain' (internet). If you save the file to non-ntfs sdcard/usb/nas you should not have to unblock.
Click to expand...
Click to collapse
Thanks definitely going to be using wget. If only we could make a port of bash...
Sent from my SGH-M919 using XDA Free mobile app
Qiangong2 said:
Thanks definitely going to be using wget. If only we could make a port of bash...
Sent from my SGH-M919 using XDA Free mobile app
Click to expand...
Click to collapse
Bash shell would be great, git-bash would be even better.
There's a lot of c++ projects that I haven't been able to set up visual studio to compile for arm. vs2013 and 2015 haven't been playing very well so far, I think mamaich successfully did some arm ports with vs2012. Then there's Win10 iot efforts which Microsoft may be more inclined to support officially. They seem to support console c++ apps on win10arm using vs2015 here :
http://ms-iot.github.io/content/en-US/win10/samples/ConsoleApp.htm
I have not even begun trying to set up MinGW/Cygwin which I believe is the toolchain required for cross compiling Linux source projects for win/arm.
nazoraios said:
Bash shell would be great, git-bash would be even better.
There's a lot of c++ projects that I haven't been able to set up visual studio to compile for arm. vs2013 and 2015 haven't been playing very well so far, I think mamaich successfully did some arm ports with vs2012. Then there's Win10 iot efforts which Microsoft may be more inclined to support officially. They seem to support console c++ apps on win10arm using vs2015 here :
http://ms-iot.github.io/content/en-US/win10/samples/ConsoleApp.htm
I have not even begun trying to set up MinGW/Cygwin which I believe is the toolchain required for cross compiling Linux source projects for win/arm.
Click to expand...
Click to collapse
Windows RT was probably coded using vs2012, that's why it's better to use vs2012. Also, Microsoft removed and changed lots of stuff in vs2013 and even more in vs2015 from vs2012. Vs2013 and 15 probably don't have the right commands built in
Sent from my SGH-M919 using XDA Free mobile app
hey i made batch file with sample commands for csnotify
p.s save the file with .bat
p.p.s i seek a bug, the -m text dont support long words
roxas22 said:
hey i made batch file with sample commands for csnotify
p.s save the file with .bat
p.p.s i seek a bug, the -m text dont support long words
Click to expand...
Click to collapse
since your parameter has spaces in it you should wrap it in quotes like :
Code:
csnotify -t "hi xda!!!" -m "i love xda!!!"
nazoraios said:
since your parameter has spaces in it you should wrap it in quotes like :
Code:
csnotify -t "hi xda!!!" -m "i love xda!!!"
Click to expand...
Click to collapse
Thanks, i have some problems with usising batch language
Well I finally figured out how to tap into speech libraries on windows rt, so I created a command line utility.
You can use it to speak some generic text by using this command line :
Code:
speak -t "hello world this is text to speech on windows rt"
Or you can pass in a filename :
Code:
speak "c:\some path to\filename.txt"
Or you can type "shell:sendto" into the address bar of windows explorer and create a shortcut to speak.exe in there and then you can then send text files to it and it will read them.
File should be attached for download.
I added a command line version of simplewebserver, which is called 'wscon' (webserver console).
bundled readme :
This is a console/parameter based version using much of the same code as SimpleWebServer program, but created for command line/script invocation.
The use case for this app is when you frequently change hosting directories and just want to spin up a server on some port and directory.
You can specify port and directory with -p and -d command line options or you can create a shortcut to this wscon program in your shell:sendto folder and right click a directory and 'send to' it.
If you use sendto it will use the default port set in wscon_settings.xml file, which is automatically generated in same folder as executable. Once this file exists you can override the default port of 8080 to be something else if you want.
If you launch from console with just -d option it will use default port in wscon_settings.xml also.
By default this application serves up only to local machine (localhost), if you run it as admin it will be visible to other computers (provided firewall allows).
Click to expand...
Click to collapse

[SOURCE CODE][DEV TOOL][SDK 21+]6thGear RomControl v2.+ for Devs

6htGear Rom control V2.1
By @Wuby986 & Daxgirl
Hello everyone!
So here we go again... V2.0
Big thanks:
We would like to begin from crediting people, who gave us ideas, inspiration and, most importantly, their free time, in order to make v2.0 a reality.
To our dearest friends and talented developers, @tdunham and @DaOldMan:
Guys, you OWN this. You made this happen. You pushed us and we pushed you, and together, you, us and rom control, have grown to be what we are today.
No thanks can ever be enough for long nights of applying patches, merging sources, connecting through teamviewer and working out kinks together. @Wuby986 and I are forever in your debt.
Why different thread?
1. The entire application is different. It barely qualifies as an update anymore.
2. All the preferences are different. The way they work is different. It requires new way of doing things. Radically new.
3. new support library and new basic structure.
4. To sum it up... it's too different to maintain same thread for both versions
Project characteristics:
1. Rom control is an open source project, designed to provide rom builders with a core code for compiling android application for controlling core functions of their roms and mods through Content Provider of Settings.System sqlite table
2. Rom control is designed with consideration of the fact that most rom builders do not have sufficient skills in original android development to build application with this functionality on their own
3. The emphasis is given in this version (even more than previous one) to outsource most conditions and attributes to xml, and so to minimize the need of the user (rom builder) to be subjected to java programming
4. In addition to familiar utilization of ContentResolver to pass data between RomControl and system, the project offers additional properties, such as file based preference, URI selection preference, Direct intent to shortcut app preference, preference listing image thumbnails for previews, script running preference, automated template for "About Us" section, automated dialog for changelog, backup and restore finctionality and more.
5. The project is designed to be compiled in Android Studio using the latest sdk tools and gradle tools.
6. The project essentially is designed to be a system application with privileged access, and therefore needs to be installed in /system/priv-app to be granted some of its permissions
7. The project requires root access for some of its functionality. Mainly running shell scripts with su and killing some app processes.
License and sharing policy:
1. This project is distributed under GNU General Public License as open source code. The copy of said license can be obtained and reviewed here
2. As such, this project is protected from claiming exclusivity by anyone.
3. Any developer wishing to use this code, with accordance to the license, must provide full source code for each updated version. That means, for any new version of the rom including updated RomControl application, a link to full source code of the latest version must be provided.
4. By modifying and using this code, you automatically accept the License conditions and must be compliant with GPL, as stated below:
You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.
Click to expand...
Click to collapse
5. You're under no obligation to thank us, credit us or tag us in your official postings while distributing your copy.
6. You ARE, however, prohibited from removing our copyright information from our source code.
7. You are obligated to keep the code open under GPL. Failure to provide sources for updated copies of your work will result in complaint first to XDA officials for license infringement and further to GPL legal department.
8. Using the source code on any other forum outside of xda is of course allowed with accordance to the license and sharing policy, provided the sources are kept open and obtainable by anyone.
9. Using apktool to compile a copy of this code after making changes in the decompiled form of someone else's application is strictly prohibited, as the developer will not be able to provide full open source of their version. Any illegal use of any copy of this project can be and should be legally stopped by the owner of the code copy.
10. This voids rule number 12 of xda promising a developer exclusivity over their product. This product is yours, but the code belongs to the public. You are NOT TO HOLD COPY OF ROM CONTROL EXCLUSIVE.
To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.
Click to expand...
Click to collapse
Open source libraries included in this project:
1. RootTools by Stericson
2. Sergey Margaritov's ColorPickerPreference modified to adopt to our needs
3. CircleImageView by hdodenhof
Project requirements:
1. Installed and updated android sdk, including but not limited to:
Android SDK Build-Tools 24
Android SDK Platform-Tools 24
Android support repository 33
Google repository, rev 29
Latest android support library
2. Android studio version AT LEAST the latest stable version (currently 2.1.2), you can use the canary channel as well, currently on 2.2.0 preview 5.
3. Updated gradle tools
4. Working knowledge of importing project into Android Studio and troubleshooting gradle sync. If you don't know how to, Google it.
5. EXTENSIVE knowledge in android modding:
This project is for rom developers and modders. It helps coordinate between your users and your mods. If you don't build roms or don't have mods, this project means nothing to you.​
What support you can expect to get:
1. Code explanation regarding major functionality
2. Adding new preferences and navigation items
What support you CANNOT expect:
1. Setting up android studio
2. Debugging gradle issues and compiling
3. Changing colors, strings, adding themes, design, changing setup... - Android documentation is vast and Stackoverflow is even vaster.
4. Smali modding
5. Private messaging support - DO NOT EVEN TRY
6. Asking for compiled apk file.
This is NOT an application thread. This is NOT an application. This is a SOURCE CODE for MAKING application.
The answer to a question "Can someone give me a compiled version" is "And what are you going to do with it?"​
Project main Git repository:
Here
Thread list of contents:
Starting the project
Adding navigation drawer items
Running android app: where, how, builds, gradle tasks and you-name-it
Preferences - Part 1: Introduction
Preferences - Part 2: Types of preferences
Themes, About Us activity and Changelog dialog
Backup and Restore
XDA:DevDB Information
6thGear RomControl v2.0, Tool/Utility for all devices (see above for details)
Contributors
daxgirl, wuby986, tdunham, DaOldMan
Version Information
Status: Testing
Current Stable Version: 2.1
Stable Release Date: 2016-08-26
Created 2016-07-06
Last Updated 2016-08-26
Latest Update details:
Post number 195
Step 1 - Importing the project:
1. Perform full installation of the latest stable version of Android Studio in your environment. You can find info about stable and canary releases here
2. You can have more than one version of android studio installed on single platform. For more information please read further on the same page in section Using Multiple Android Studio Versions. I personally do recommend the latest canary build, which is currently AndroidStudio 2.2.0 preview 5. But you can always go with the stable release. Or beta channel.
3. Make sure your sdk is updated, including sdk for platform 24 (nougat). The compile sdk for this project is 24.
4. Make sure your support repositories are configured and updated.
5. Click on our github repository link on the OP first post and make sure you're connected with your github account. If you don't have one - create it! Why? because you will need to share your sources for this project. And because you all use as mantra that you can mod android apps because it's open source. So BE OPEN SOURCE. Have your name on github.
6. Once you're logged in into github, fork our repository. In the right upper corner of our main git repository you have those buttons:
Click "fork" to make a copy of this repository in your own repositories. Now you have your own repository.
7. On YOUR repository find this green button on the top right above the code, which says "Clone and Download". DO NOT DOWNLOAD ZIP. Instead, click the little "clipboard" icon to copy the .git uri and return to studio.
8. In studio: File > New >Project from Version Control > Git
9. Paste the git uri and choose destination. Click ok. Android studio will import the project from git and open it for you.
10. At this point if you're asked to update gradle build tools or anything else, do it. Wait for gradle to sync with project files. If you get errors, resolve them as referenced. If you cannot, google is your friend.
We WILL provide some support for initial importing of the project and setting it up for a very limited period of time. Gradle can be a tricky business. Please be sure to provide us with specific error from gradle log and a line in the gradle script on which the error is made.
11. We WILL know if your errors are because you didn't update sdk and build tools. And we will kick your butts for posting without following instructions. Remember, our time is valuable and given to you for free. Our instructions are clear and we made a huge effort to write them. If you can't be bothered with following them, beware.
12. Once the gradle is done syncing without errors, just in case, click Build > Rebuild Project. Once that is done without errors and it says BUILD SUCCESSFUL, you can start building your project following the instructions on the next post.
Adding items to the Navigation Drawer:
1. Switch to project view.
It will be easier for you to navigate through project files. For that:
On the left panel on top, below the android studio menu, find this:
This is what your project will look right after you import it. This is module view. By default it is categorized and to work with it you need some understanding of this view.
Click the 2 arrow icon which is circled in blue and select "project"
Your structure will now change.
Navigate into the project by the following path: Project name > app > src > main
Now you will see directories, like: java, res, assets... and so on.
This is your working directory. You will be making your code changes here.​
2. Find a file called nav_drawer_arrays.xml. It is located in res/values folder. Double click on it to open.
You will see the following 3 arrays inside. The first one is a reference array (simple typed array) and the other 2 are strings arrays.
Those are WORKING ARRAYS. When you run the app as it is now, you will see all the items created in the navigation drawer based on this info.
Please read the comments we wrote in the xml file for you:​
Code:
<resources>
[COLOR="Green"][B][I]<!--The following array is for icons you want to use for your items
You can create new icons bu right clicking the drawable folder and choosing
New vector drawable
You have a great selection of items in xml vector format.
Those are supported starting lollipop.
YOU SHOULD NOT USE PNG. not even material one. Vectors will work best with any device density.
Once you have created the vector, reference it as regular drawable in the array below.
MAKE SURE THE ITEMS IN ALL 3 ARRAYS CORRESPOND IN ORDER AND ALL 3 ARRAYS ARE SAME LENGTH-->[/I][/B][/COLOR]
<array name="nav_menu_prefs_drawables">
<item>@drawable/ic_system_ui</item>
<item>@drawable/ic_phone</item>
<item>@drawable/ic_framework</item>
<item>@drawable/ic_notification_panel</item>
</array>
[COLOR="green"][B][I]<!--This array is for your items titles.
Use @string reference, so later on your app can be translated with ease
KEEP THE ORDER BETWEEN ALL YOUR ARRAYS-->[/I][/B][/COLOR]
<string-array name="nav_menu_prefs_titles">
<item>@string/systemui_prefs</item>
<item>@string/phone_prefs</item>
<item>@string/framework_prefs</item>
<item>@string/notification_panel_prefs</item>
</string-array>
[COLOR="green"][B][I] <!--This array is the most valuable one
Here you put the file names of the preference files you create in your xml directory
THEY MUST BE PRECISE AND CASE SENSITIVE!!! DO NOT ADD .xml SUFFIX-->[/I][/B][/COLOR]
<string-array name="nav_menu_xml_file_names" translatable="false">
<item>ui_prefs</item>
<item>phone_prefs</item>
<item>framework_prefs</item>
<item>notification_panel_prefs</item>
</string-array>
</resources>
3. Let's say you have 10 preference files in directory called xml. That means you will want to have 10 items referring to your preference files in the navigation drawer. That means you will need to have 10 items in EACH array. Create 10 empty preference files. DO NOT COPY THE ONES FROM RC v1.0. Just right click the xml folder, choose "New" and choose "New XML resource file". Give it a name and click ok. Leave them empty for now. create all the icons you need for them in the navigation drawer.
4. Populate the arrays with titles, icons and xml names. You're done. You now have a working items in the navigation drawer. You do not need any changes in java files. the items are being generated on run time and their onClicks redirected accordingly. If you run the app right now you should have 10 empty preference files.
We strongly encourage you to keep the ui_prefs.xml file and references to it in your project while you're working on it. It contains most valuable information about the kinds of preferences we have included and their various usages. You can remove it from arrays before making the release version. You can have it as last item in your arrays and use it as test dummy to see how things should work properly
Run!
Installing and running your builds in Android Studio:
First of all - data or system app?
The simple answer is SYSTEM. And not just system - we need some high level permissions, so definitely /system/priv-app. Why?
So for that we dig deeper into android permission system.
1. Writing settings into settings storage database:
This permission was revoked from data apps on Marshmallow. Meaning, THEORETICALLY, that only system apps can write into Settings.System. So how come we can write when the app is installed as data app? Oh, this is where THEORETICALLY part comes in. Permission to write system settings is declaired in framework in such a way, that it allows data apps to write there if they target sdk lower than 23 in their build. That permission level is called "pre23". That is why in our gradle we have a somewhat peculiar sdk division for building. Let's look at the image:
As you can see, target sdk is set to 22. This is not by mistake. This is by design so if you want to test the basic functionality of the app by installing debug version in data, it will not crash every time you flip a switch.
This is the definition of pre23, we target sdk 22 so the pre MM permissions can be achieved by running the app in data.
Although all of you will be including this app in your roms in system priv-app, you will be working with it quite alot as you build it. We want you to be able to run it from data if you wish so. if we target sdk 23 and up it will never run from data, unless installed also in system.
You are free to change this to 23 or 24. But NEVER run it while installed only in data then. It will crash like a drunken monkey.
Also, changing it to 23 or 24 for TARGET sdk is meaningless. It's not better because it's a higher number. For target sdk it makes no difference.​
2. Running reboot
We run reboot functions in a proper android shutdown sequence. Any of you that are familiar enough with linux kernel based platforms KNOW the system should not be shut down by killing it's process.
Therefore all reboot functionality in our app is native android reboot. For THAT we absolutely need the app to have an initial copy in priv-app. If the app is only installed in data, clicking on any reboot option, either from reboot menu or from reboot dialogs, will result in FC in your face. the following permissions cannot be obtained by data apps NEVER EVER.
Code:
<uses-permission android:name="android.permission.REBOOT"
tools:ignore="ProtectedPermissions"/>
<uses-permission android:name="android.permission.DEVICE_POWER"
tools:ignore="ProtectedPermissions"/>
<uses-permission android:name="android.permission.RECOVERY"/>
3. But we have root permissions? Isn't it enough?
So here is the thing you should remember:
Android doesn't give a damn about root permissions. When we run command under su we talk to the linux kernel through shell. We do not run it on android level. Android is NOT linux. There is NO android permission which is compiant with su.​When we are talking about android application permissions, we are talking about PackageManager, which is android framework system service, that grants the permissions to perform certain action. Package manager does not know su. It is not part of linux platform. It is android. Android is not designed to have root access. Not on any level. it does not recognize unix commands by default.
So when we execute your scripts, android doesn't do it. Our application code doesn't do it. We just pass it to the kernel as runtime command. Remember that, when you come complaining that your scripts don't run. We can't help it. If the kernel refuses to execute them, something is WRONG in the script syntax or structure.​
4. So data or system? The answer is - when you build and test run your app - BOTH
Can you run apps from android studio while one of the copies is installed in system? Absolutely. As any system app, app is allowed to have an update.
The most important thing is for that update to have same signature and same package as the app in system. Once the app is installed in priv-app it has privileged permissions. You can after that, as oyu build, install updates in data, so you don't have to push every single test build into system and reboot, and all privileged permissions will work.​​
Gradle, baby!
Gradle is a build tool. You can read on history of gradle online. It was not developed with any relation with android. Google decided to adopt gradle as their primary build tool for their primary development environment for android and hence, android gradle plugin was born.
Build tool is a way to "put things together in orderly fashion". In essence, android application is a bunch of files in folders. Making it into a running product is a matter of some complexity. Connecting java to resources, signing, packaging, updating manifest, setting primary configs and build related configs, compiling java, compiling dependencies, including multiple modules, being able to have several builds and flavors in one project - this is what gradle does for us.
If you wish to learn more about gradle for android, please watch this amazing video https://www.youtube.com/watch?v=jJ9j7MvGPkU.
Gradle, in a manner of speaking, is a bunch of tasks. Tasks are executed in specific order. Files are being copied, deleted, compiled and packaged as result of single button click.
Android gradle plugin comes with specific predifined tasks. We can also write our own tasks, which we usually do, for our own usage. We will talk about OUR specific tasks later on in the advanced section.
For now we will talk about basic android gradle tasks, such as assembleRelease, assembleDebug, installRelease, installDebug and so on.
1. Clicking RUN button
If you have a look on the top panel of android studio you have this green "play" button next to a selection box which, usually, says "app". Like this:
This is what will appear on the run menu when you first open the project and it's done syncing with gradle. If the "app" selection box has a red "X" on it, means gradle is syncing now or has failed to sync and you need to find out WHY and fix it. Once there is no red "x" current configuration is ready to run.
When you click the green run button, it will run whatever task is in the selection box. When it says "app" in the selection box and you click run, it will do the following:
1. Compile debug build
2. Install it on your connected device
3. Run it​
So what is "app"? App is the main of the module we want to run. It is the only module in our project. So by running "app", we run the RomControl application on a device in DEBUG mode.
Why is it good to run in debug mode? For 2 reasons:
1. Run "app" configuration supports instant run. You can read more on instant run here. This will push the code changes into your running app on device and apply immediately. It's very handy if you add a preference or 2 and want to test how it looks or works. If instant run is impossible for your current build tools, android studio will tell you and it will tell you why. It usually means that you need to upgrade android gradle plugin. This can be done with ease.
2. Running app module in debug mode will give you full stack trace if there is an error. It will be easier for you to copy the log here for us to have a look at and debug. Or debug yourselves.​
The downside of running debug mode?
1. It's somewhat slow. Meaning the app on the device is a little slow in debug mode (although now it's not as slow as it used to be)
2. Debug mode by definition runs from data. So none of the reboot options will work. So if you want to test actual changes that require reboot from our app, you need to have a system priv-app version installed. You can have a debug version installed in priv-app and then you can use instant run, like we spoke before.​
2. So how do we make a release version?
1. Generating signing key
For that we need a signing key. We already made a full prepared platform for you to run release build in our app gradle build file. All you need to do is create a signature and make some little edits. So, let's roll.
To create a signature please follow these instructions
Please remember or write down the following:
1. Path where you create the signature
2. Key password
3. Store password
4. Key alias​You do not need to generate the release build just yet. Just finish creating your own keystore and remember where you put it.
Now go to the parent folder where your rom control project sits. For example if you put it in AndroidStudioProjects folder, in the same folder create a folder called "keys" (no caps, just "keys"). Copy your keystore there. Or originally create it there.
Now go back to android studio. to the left project panel (provided it is in project view, like we asked you to make it) and scroll down... You will see at the very bottom some singleton files, like gradlew, gradlew.bat, gradle.properties and so on. One of the files there is called key.properties. Double click on it to open.
Inside you will see 4 strings. Like this:
Out in your actual key information. The one you used to create your key. you need to make changes to all 4 fields.
for example:
As you can see we used relative path to the keystore. Which is why it's supposed to be in the parent folder of your folder containing your project in direcroty called "keys".​
2. Telling gradle to use our signing key for release builds
On the left project panel look inside the "app" module folder. On the bottom of it, after the AndroidManifest.xml file, you will see a builg.gradle file. Double click to open it.
This is a gradle file for building our app module. You will see there are alot of configurations related to android build there. It will look something like this:
You need to un-comment the sections pointed to with red arrows. To comment or un-comment the section in android studio, select the section and click "ctrl + /"
Now you should be ready to build the release version. Let's test that:
1. On the right upper corner of the studio window you will see little vertical "gradle" tab. Like this
Click on it. A side window till open with gradle tasks. Like this:
2. Open app > tasks > build
3. Find a task called assembleRelease and double click on it.
4. Wait for it to finish. You will see tons of things running in the gradle console window on the bottom. Provided you didn't mess up any of the previous steps, it will work fine.
5. Once it's done, check that you did now have errors and that build was successfull.
6. If all is good, open in file manager your project folder > app > build > outputs > apk. There you should see your freshly compiled release version. Release version is called simply RomControl.apk. it is already zipaligned and signed. You can go ahead and use it in your rom, push it into priv-app and test. So on.
3. So every time I need to run assembleRelease and push the apk into priv-app and reboot? NO!!!
1. Once you run your first assembleRelease, take that apk and push it into system priv-app. Reboot your device.
2. Now look again into the app > tasks in the gradle window on the right. You also have there "install" tasks. Open it and find "installRelease". Connect your device with app installed already in priv-app and double click on installRelease. This will install the release as UPDATE in the DATA apps. This is so you don't need to push the app to device as you're building and testing. You can make code changes, install release as data and run it FULLY. Becasue you have the original sitting in the system, it will have all the premissions for the reboots. So you can build and test from data.
3. Please remember that as you build and test only the data version of your app is updated. So once you are done testing and the build is final, run assembleRelease and take the final apk from the outpute/apk folder to include in your rom.​
4. Do I need to go to the gradle menu on the right all the time to run installRelease? NO!!!
After you run a task from the gradle menu have a look at the run button on the top panel. Surprise! It doesn't have "app" selected anymore. it has the latest task you ran!!! Look:
Now if you click the "run" button it will run the selected task. If you want to select another task from the tasks you used in the past, Just select from the selection box menu and click run.​
So which build to run and when?
1. If you're building and testing continuously, we recommend keeping the app as debug in data only and NOT TO USE the reboot options.
For adding preferences and building your ui you don't need to use reboot options. Just click LATER on reboot dialogs if you include reboot options.
So you can use instant run, switch to "app" configuration and keep running in debug mode from data as you build.​2. When you go further into preference testing, we recommend uninstaling the debug version. creating signed release version and push into priv-app. From this point on run installRelease task to instal release update in data as you build and correct and test scripts and reboot options.
3. When ready to go final release with your rom, use task assembleRelease to build your final version and include it in your rom zip
4. Commit latest changes to your github repository​
Uploading sources to git
1. Provided you followed our instructions and forked the project source code and then cloned it to studio, it is now connected to your forked git project.
2. Any new file you add will ask if you want to add it to git. And will turn it's color to green if added. Any file that is not added will have brown color.
3. To add brown colored file to github, right click it, choose git > add
4. You should have the following available on the top panel:
The green arrow is for commiting and pushing changes to github. Once you push it the following window will open:
5. Check what files you would like to commit. For example, never commit key.properties file which contains your key password.
6. Write description of your commit and choose from the blue button selector box commit and push.
7. Make a habit of committing your work daily or at least on a new feature basis. It easier to follow for you and also serves as backup.​
We would be happy to talk more about gradle and various tasks, but this post had a specific purpose. To teach you how to manipulate build types and use it to you advantage. Please ask us specific questions about gradle tasks related to your build.
Preferences - Part 1: Introduction
1. Major change in implementation:
1. For this release we made a major change in how preferences are handled. They are not handled anymore. They handle themselves.
2. For that to happen we needed to subclass ALL native android preferences except PreferenceScreen and PreferenceCategory.
3. What does it mean to subclass? That means we created java classses which extend (resemble) native android preferences and we wrote our own implementation of how they should behave, how they should load their values and write their values.
4. That being said - there is no more standard android preferences in this project. No more SwitchPreference, no more CheckboxPreference, no ListPreference... None of those.
5. Two reasons for that:
1. We didn't want you to get lost in special conditions anymore. We wanted you to be able to set if the preference should restart systemui from xml file when you declare preference. For that we needed to add custom xml attributes. For that we needed a preference class to be able to acknowledge that. So we needed a custom preference class.
2. We wanted the preference to manage itself in by reading and writing from and to database. Instead of fragment running endless iterations and conditions. When our new preferences are born (attached to the screen), they get their value from the database directly. No one needs to set values to them. When they are changed, they know to write into database directly. From their own class. Not containing fragment doing that for them.​
2. Types of preferences
1. Two state preferences:
MySwitchPreference
MyCheckboxPreference
FilePreference​
2. Dialog preferences:
MyListPreference
MyEditTextPreference
IntentDialogPreference
ThumbnailListPreference
ColorPickerPreference​
3. Native preferences(PreferenceGroup subclasses):
PreferenceScreen
PreferenceCategory​
4. Slider Preference:
MySeekBarPreference​
5. Special preferences:
OpenAppPreference
UriSelectionPreference
RunScriptPreference
ImageHeaderPreference​
3. Setting defaults:
It is ABSOLUTELY VITALLY IMPORTANT that you set android:defaultValue to all the preferences that change and read values. That means:
MySwitchPreference
MyCheckboxPreference
FilePreference
MyListPreference
MyEditTextPreference
ThumbnailListPreference
ColorPickerPreference
MySeekBarPreference​
4. What happens if we use regular android preferences? Like SwitchPreference or ListPreference?
Nothing! Absolutely nothing will happen nor to this project, nor to your database and, MOST IMPORTANTLY, nor to your mods.
It will act like normal preference. It will not write to database. Your mods will not be affected and WILL NOT WORK.​
5. Custom attributes for value changing preferences and RunScriptPreference
1. app: packageNameToKill
This attribute is of type string and you will need to provide which app you want to restart when this preference changes value.​2. app:isSilent
This is a boolean type attribute, which is by default set to true. That means that if you don't set this attribute and you DO set the package name to kill, it will restart the app you want without warning as soon as the value has been changed. If it is set to "false", upon value change a dialog will appear with app icon and test informing user that for this action to take effect an app restart is required. They can then choose to kill app now or cancel the dialog and kill it later.​3. app:rebootRequired
This is also a boolean type of preference which by default is set to false. If you set it to "true", upon preference value change a dialog will appear, informing the user that reboot is required for this action to take effect. good example for that is changing the default app intent to open on home button double click. That needs framework reload.
If rebootRequired is set to true and you ALSO set package name to kill, reboot takes preference. Package to kill will be ignored.​
Preferences - Part 2: Types of Preferences
1. Two state preferences (meaning - can be true or false)
MySwitchPreference & MyCheckboxPreference
Code:
[COLOR="Teal"][B] <!--Following category shows variety of two state preferences-->[/B][/COLOR]
<PreferenceCategory
android:title="Two stated preferences test category">
[COLOR="DarkGreen"][B] <!--Normal Switch preference-->[/B][/COLOR]
<com.wubydax.romcontrol.v2.prefs.MySwitchPreference
android:defaultValue="true"
android:key="normal_test_switch"
android:summaryOff="Disabled"
android:summaryOn="Enabled"
android:title="Normal test switch"/>
<!--Switch preference which will throw a dialog that app reboot is required-->
<com.wubydax.romcontrol.v2.prefs.MySwitchPreference
android:defaultValue="true"
android:key="kill_app_with_dialog_test_switch"
android:summaryOff="Disabled"
android:summaryOn="Enabled"
android:title="Kill app with dialog switch"
app:isSilent="false"
app:packageNameToKill="com.android.systemui"/>
[COLOR="darkgreen"][B] <!--Switch preference which will in ADDITION to actual work, also silently restart app with given package-->
<!--Note, that isSilent attribute is by default TRUE. So you don't need to specify it if you want silent app restart-->[/B][/COLOR]
<com.wubydax.romcontrol.v2.prefs.MySwitchPreference
android:defaultValue="true"
android:key="kill_app_silently_test_switch"
android:summaryOff="Disabled"
android:summaryOn="Enabled"
android:title="Kill app silently test switch"
app:packageNameToKill="com.android.contacts"/>
[COLOR="darkgreen"][B] <!--Switch preference which will throw a dialog that following it's action device reboot is required-->
<!--Please note, even if you specify the need to kill app, once the rebootDevice attribute is TRUE, kill app attributes are ignored-->[/B][/COLOR]
<com.wubydax.romcontrol.v2.prefs.MySwitchPreference
android:defaultValue="true"
android:key="reboot_required_test_switch"
android:summaryOff="Disabled"
android:summaryOn="Enabled"
android:title="Switch reminding of need to reboot"
app:rebootDevice="true"/>
[COLOR="darkgreen"][B]<!--We can use kill app on checkboxes as well. Same goes for rebootDevice-->[/B][/COLOR]
<com.wubydax.romcontrol.v2.prefs.MyCheckBoxPreference
android:defaultValue="true"
android:key="test_checkbox_with_kill_app"
android:summaryOff="Disabled"
android:summaryOn="Enabled"
android:title="Kill app checkbox"
app:isSilent="false"
app:packageNameToKill="com.android.systemui"/>
</PreferenceCategory>
FilePreference
Code:
<PreferenceCategory
android:title="File preferences">
[COLOR="darkgreen"][B]<!--File preference is a very special kind of preference, which works like switch but has different output.
Normal switch preference, like any two state preference, write boolean true/false into preferences.
In our app it also writes 1/0 into database.
File preference doesn't write into database. If it is switched on, it creates a file in our app directory in data.
That name of that file is what you set as key.
This is widely used by [user=1042140]@tdunham[/user] for global boolean needs in systemui.
Please refer to his guide about setting global boolean to see appropriate smali application for this preference.
This is most useful for mods in smali files where you do not have context access to get content resolver.
Because File class is native java class and checking for it's existence does not require android context.
File preferences can have attribute to kill app or reboot device.-->[/B][/COLOR]
[COLOR="darkgreen"][B] <!--This is a simple file preference. Note that once it's switched on, a file with the name identical to key is created in
/data/data/com.wubydax.romcontro.v2l/files
When it's switched off the file is deleted.-->[/B][/COLOR]
<com.wubydax.romcontrol.v2.prefs.FilePreference
android:key="new_file"
android:summaryOff="Disabled"
android:summaryOn="Enabled"
android:title="New file preference"/>
[COLOR="darkgreen"][B] <!--This file preferences upon change will prompt to kill app-->[/B][/COLOR]
<com.wubydax.romcontrol.v2.prefs.FilePreference
android:key="another_file"
android:summaryOff="Disabled"
android:summaryOn="Enabled"
android:title="Kill app file preference"
app:isSilent="false"
app:packageNameToKill="com.android.systemui"/>
</PreferenceCategory>
2. Dialog preferences
ColorPickerPreferece
Custom attributes:
alphaSlider, hexValue - both booleans, TRUE by default
Code:
[COLOR="Teal"]<!--The following category demonstrates various ways of using ColorPickerPreference-->[/COLOR]
<PreferenceCategory
android:title="Color pickers test category">
[COLOR="DarkGreen"][B]<!--Normal color picker preference-->
<!--Please note, the [COLOR="Red"][U]hexValue and the alpha are there by default now[/U][/COLOR]. If you want to cancel them, you need to specify false-->[/B][/COLOR]
<com.wubydax.romcontrol.v2.prefs.ColorPickerPreference
android:defaultValue="#ffccdd"
android:key="test_color_preference"
android:title="Normal test color picker"/>
[COLOR="DarkGreen"][B]<!--Color picker preference without the alpha slider and without the hex value
You can set false to both or one of them-->[/B][/COLOR]
<com.wubydax.romcontrol.v2.prefs.ColorPickerPreference
alphaSlider="false"
hexValue="false"
android:defaultValue="#ffffff"
android:key="no_alpha_color_key"
android:title="Color picker with no alpha or hex"/>
[COLOR="darkgreen"][B]<!--Color picker preference with kill app option
Note, [U]you can also use rebootDevice attribute[/U], like with two stated preferences-->[/B][/COLOR]
<com.wubydax.romcontrol.v2.prefs.ColorPickerPreference
android:key="app_kill_color_key"
android:title="Color picker with app kill"
app:isSilent="false"
app:packageNameToKill="com.android.systemui"/>
</PreferenceCategory>
MyListPreference
Custom attributes:
app:dependentValue - will enable you to set dependencies upon choosing selected value. If a dependent value is selected by user, the dependent preference will become disabled.
Code:
[COLOR="DarkGreen"][I]<!--Example of simple list preference with radio button items
You absolutely HAVE to set dafaultValue and it has to be one of your entryValues string arrays
You can use any of the following with kill app attributes or rebootDevice attribute
Note, that you can now use dependency on list preference.
Custom attribute app:dependentValue will allow you to decide which list item, if selected,
will set dependent preferences disabled.-->[/I][/COLOR]
<com.wubydax.romcontrol.v2.prefs.MyListPreference
android:defaultValue="20"
android:entries="@array/test_list_entries"
android:entryValues="@array/test_list_values"
android:key="test_list_key"
app:dependentValue="1"
android:title="Choose items from the list preference"/>
ThumbnailListPreference
Custom attributes:
app:dependentValue - will enable you to set dependencies upon choosing selected value. If a dependent value is selected by user, the dependent preference will become disabled.
app:drawableArray - references array which provides resources for the thumbnail images for each list item
app:entryList - references array of strings to provide names for actual list items
app:entryValuesList - references array of strings for the entry values to be written to preferences and database for selected list item
Code:
[COLOR="darkgreen"][I] <!--Thumbnail list preference is a special kind of preference which allows you to show preview of the selected image
This can be useful f.e. for setting custom bg to toggles in systemui
Needless to say you need to put the same images you put in systemui in Rom Control in drawables
And you need to create 3 kinds of arrays in arrays.xml file. 2 string arrays for entryList and entryValuesList and one simple array
for drawable references. You can see the arrays for the following preferences inside arrays.xml
You have to set default and the default has to be one of entryValuesList strings-->
<!--Example of simple Thumbnail preference with no additional attributes-->[/I][/COLOR]
<com.wubydax.romcontrol.v2.prefs.ThumbnailListPreference
android:defaultValue="1"
android:key="test_thumbnail_key"
android:title="Simple thumbnail preference"
app:drawableArray="@array/thumbnail_drawables"
app:entryList="@array/thumbnail_items"
app:entryValuesList="@array/thumbnail_values"
app:dependentValue="2"/>
[COLOR="darkgreen"][I]<!--Example of Thumbnail preference which calls to kill app upon selected item-->[/I][/COLOR]
<com.wubydax.romcontrol.v2.prefs.ThumbnailListPreference
android:defaultValue="2"
android:key="test_thumbnail_kill_app"
android:title="Kill app thumbnail preference"
android:dependency="test_thumbnail_key"
app:drawableArray="@array/thumbnail_drawables"
app:entryList="@array/thumbnail_items"
app:entryValuesList="@array/thumbnail_values"
app:isSilent="false"
app:packageNameToKill="com.android.systemui"/>
IntentDialogPreference
Custom attributes:
app:intentSeparator - to allow you to set the char which will separate the package name from activity name in the intent component name
app:showSearch - boolean attribute which determines whether search field will be available in the dialog window. By default it's TRUE. If you want no search, set to FALSE
Code:
[COLOR="DarkGreen"][I]<!--The following preference is a special preference that's called IntentDialogPreference
This preference allows you to choose an app from the list. it also conveniently includes search field
This preference writes into database what's called component name for specific system needs.
When we want to call an app in android, we need to provide some information as to which app we want to launch
and which activity inside that app we want to lunch.
Launching app by combination of those is called explicit intent. Explicit intent needs 2 things to run an app:
1. Package name
2. Activity or service name
This preference is most useful for launching an specific app based on info you can fetch from database
For example on double click on home key
Intent dialog preference puts the info for explicit intent in a string. First package name, then separator, then activity name
You can use any separator you want. The default separator is "##"
But as you can see in following example we set the separator to be forward slash "/"
The separator depends on how you build the mod in smali for your needs.
Any kill app or reboot device attributes are applicable here as well-->
[/I][/COLOR]
[COLOR="darkgreen"][I]<!--This specific IntentDialogPreference has defaultValue set to Settings app.
You DO NOT need to set default. Only if you want to. But it is in most cases not necessary and even not that good.
This is just an example. When you run this, you will see that the preference has an icon of the chosen app on the right
and a name of the app set as summary. When you choose a new app, those things change-->[/I][/COLOR]
<com.wubydax.romcontrol.v2.prefs.IntentDialogPreference
android:defaultValue="com.android.settings/com.android.settings.Settings"
android:key="test_intent_with default"
android:title="Select Test App with default"
app:intentSeparator="/"/>
[COLOR="darkgreen"][I]<!--This IntentDialogPreference comes with no default and no separator. So default separator will be applied "##"
and it also has no search showing-->[/I][/COLOR]
<com.wubydax.romcontrol.v2.prefs.IntentDialogPreference
android:key="test_intent_without default"
android:title="Select app, no default, no search, ## separator"
app:showSearch="false"/>
[COLOR="darkgreen"][I]<!--This preference will prompt to reboot device upon selection
This is useful if f.e. you use it to set default app to open when home button is double clicked
Reboot is advised but not necessary immediately. So user will be shown a dialog to let them know they need to reboot
And they can reboot immediately or later-->[/I][/COLOR]
<com.wubydax.romcontrol.v2.prefs.IntentDialogPreference
android:key="test_intent_without_default"
android:title="Select app and reboot device"
app:intentSeparator="/"
app:rebootDevice="true"
app:showSearch="true"/>
MyEditTextPreference
Code:
[COLOR="DarkGreen"][I][B] <!--Edit text preference is a dialog preference that allows you to enter custom text-->[/B][/I][/COLOR]
<com.wubydax.romcontrol.v2.prefs.MyEditTextPreference
android:defaultValue="test"
android:key="test_edit_text_key"
android:title="Input custom text"/>
​
3. Special Preferences
OpenAppPreference
Custom attributes:
app:componentName - string type attribute to provide package name and desired activity name to open installed app. Please pay attention to instructions in code.
Code:
[COLOR="darkgreen"][B][I]<!--The following category shows usage of special preference we use to open an app based on component info
All you need to provide for this preference is package name and activity name separated by forward slash "/" like shown below
We will split the component info into components and check if the app is installed
if it's installed, we will show the app icon as preference icon and app name as title
If the app is not installed the preference is automatically removed from the list.
You can set your own summary to explain about the app.
If you wish to show a custom icon for that app shortcut or have custom title,
if you wish to use custom icon or custom title, like you would do normally with preference,
You are free to use android:title and android:icon attributes.
Our class will then use the items you chose instead of the application title and icon.
This WILL NOT affect the intent for opening application. It's a cosmetic measure for your convenience.-->[/I][/B][/COLOR]
<PreferenceCategory
android:title="Shortcut to apps preferences">
[COLOR="darkgreen"][B][I] <!--Example of simple app shortcuts. If those apps are not installed, the preferences will not show-->
[/I][/B][/COLOR] <com.wubydax.romcontrol.v2.prefs.OpenAppPreference
android:summary="Application to browse your files, including root files"
app:componentName="com.speedsoftware.rootexplorer/com.speedsoftware.rootexplorer.RootExplorer"/>
<com.wubydax.romcontrol.v2.prefs.OpenAppPreference
android:summary="Control samsung's toolbox, turn it on or off, choose available apps and rearrange them"
app:componentName="com.wubydax.toolboxsettings/com.wubydax.toolboxsettings.ToolboxSettings"/>
[COLOR="darkgreen"][B][I] <!--Example of OpenAppPreference with custom title and icon-->
[/I][/B][/COLOR] <com.wubydax.romcontrol.v2.prefs.OpenAppPreference
android:summary="Choose what app or shortcut to open when TW launcher is being swiped to the magazine page"
android:title="Shortcut to GearTWSwipe"
android:icon="@mipmap/ic_launcher"
app:componentName="com.wubydax.geartwswipe/com.wubydax.geartwswipe.ResetDialogActivity"/>
[COLOR="darkgreen"][B][I] <!--Open app preference with only cuctom title and the icon which is loaded from the app-->
[/I][/B][/COLOR] <com.wubydax.romcontrol.v2.prefs.OpenAppPreference
app:componentName="eu.chainfire.supersu/eu.chainfire.supersu.MainActivity-Material"
android:title="Chainfire's SuperSu App"
android:summary="Manage root permissions for apps and services"/>
</PreferenceCategory>
UriSelectionPreference
Code:
<PreferenceCategory
android:title="Select image preferences">
[COLOR="darkgreen"][B][I]<!--Select image preferences allow the user to select any image from the gallery.
The uri for that image will be written into the database
Android can fetch images based on their uri (universal resource identifier).
A type of uri that you all know is called URL, which is a web address.
Uri for database is the "address" of an item inside the database.
In android we have Media database, which hosts info about media items. In our case we are interested in images.
Upon clicking this preference a Gallery will launch, upon selecting image, it's uri will be written into database.
In your mods you can fetch the string, convert it to Uri and set that image as background to anything you want.
We use this method for setting custom image in our mod for background to notification panel-->[/I][/B][/COLOR]
<!--Those are examples of simple uri selection preference. The icon for them will be the selected image preview
You need to set title and key. That's it.-->
<com.wubydax.romcontrol.v2.prefs.UriSelectionPreference
android:key="test_image_selection_key_2"
android:title="Select Image 2"/>
</PreferenceCategory>
RunScriptPreference
Custom attributes:
app:scriptFileName - string type attribute to provide script name to run, including the .sh extension.
app:showConfirmDialog - a boolean type preference, dtetermining whether a warning dialog will be shown before executing the script. we have had this request for previous version, since users sometimes hit script preference by mistake and it executes immidiately. By default this boolean is TRUE. So for any script a warning dialog will show. Youc an set it to FALSE to execute without warning.
app:rebootOptions - enum type attribute:
Sometimes you will perform actions in script which will require a device reboot to take effect
For this purpose we created this attribute, which can take 3 values:
1. None - this is default. You do not need to specify "none". if you don't specify rebootOptions it will always be "none"
This means reboot is not required upon running script
2. Optional - this means that the execution of this script is ok without immediate reboot,
but for the action to take effect, reboot is required. if you set rebootOption to "optional",
upon successful script execution a user will be presented with a dialog.
A dialog has 2 buttons: reboot now or reboot later.
Use this option ONLY if reboot is required for action to take effect and reboot is not VITAL. Meaning no app will FC without reboot.
3. Imminent- sometimes you will want to run scripts which replace key system components, such as entire apk
or even jar files. When a script like that is executed, you want immediate reboot. Because other wise the app in question
can throw FC. Most of you from what we have seen, use reboot option for scripts like these at the end of the script.
You NO LONGER HAVE TO. We will handle the reboot for you ONLY if the script is executed successfully and "imminent" option was chosen.
It is nice to WARN the user that their phone will reboot after running the script.
That is why if you choose app:rebootOptions="imminent" a dialog will be shown to the user once they click on preference.
This dialog will warn them that upon script execution their device will reboot
If you use this option, once the script is done we will execute the reboot. Make sure you have your app in priv-app before testing this. It will need reboot permissions. Please read the gradle explanation 2 posts above, regarding those permissions.
DO NOT use "reboot" or "kill zygote" commands at the end your scripts. Do yourselves and your users a favour and stop using those all together.​​
Code:
[COLOR="darkgreen"][I][B]<!--Running scripts in rom modding is no silly business.
We need shell scripts for purposes that can vary from writing a line into a file on sd,
through replacing sound files and host files,
to as far as replacing entire apk and jar files.
Because shell scripts can vary in their complexity, we created a special preference that runs shell scripts.
The major component in this preference is the scriptName attribute. The script name should be given in full,
as string, including extension (.sh).
The code for the preference knows where your scripts are found. It will locate the script if it's found there
and execute it.
if script execution fails, a number is being shown. That means the exit code of a script is not 0.
That means something is wrong in the script.
If the script is executed properly, a toast will be shown saying "Executed successfully"-->[/B][/I][/COLOR]
<PreferenceCategory
android:title="Run script preferences">
[COLOR="darkgreen"][B][I]<!--This is the basic script preference. It will jujst run a script.-->[/I][/B][/COLOR]
<com.wubydax.romcontrol.v2.prefs.RunScriptPreference
android:title="Execute script with prompt"
app:scriptFileName="simple_test.sh"
android:summary="This action will throw warning dialog before executing script"/>
[COLOR="darkgreen"][I][B]<!--Because of the radical nature of running shall scripts with su,
We included a dialog which is shown when a user clicks on script preference
By default confirm dialog will be shown before executing eny script. If you wish to run a script without the warning dialog,
You need to specify the custom attribute that a dialog should not be shown.
We strongly encourage you to keep the dialog. It's better for your users to be sure they clicked on the right option-->[/B][/I][/COLOR]
<com.wubydax.romcontrol.v2.prefs.RunScriptPreference
android:title="Execute without prompt"
app:scriptFileName="simple_test.sh"
app:showConfirmDialog="false"
android:summary="This action will execute script without warning"/>
[COLOR="darkgreen"][I][B]<!--Script preference with optional reboot-->[/B][/I][/COLOR]
<com.wubydax.romcontrol.v2.prefs.RunScriptPreference
android:title="Script with optional reboot"
app:rebootOptions="optional"
app:scriptFileName="simple_test.sh"
android:summary="This action will write into a file on sd card and show dialog that reminds the user to reboot their phone at this time or later for the action to take effect"/>
[COLOR="darkgreen"][I]<!--Script preference with imminent reboot-->[/I][/COLOR]
<com.wubydax.romcontrol.v2.prefs.RunScriptPreference
android:title="Script with imminent reboot"
android:summary="This action will run script which has reboot command at the end and warn user that reboot of device will follow the script execution immediately"
app:rebootOptions="imminent"
app:scriptFileName="simple_test.sh"/>
[COLOR="DarkGreen"][B][I] <!--We were asked by some developers to make a kill app option available for script preference
Therefore, you can also use the kill package attributes now, silent or with dialog,
for your script preferences.
The following RunScriptPreference will prompt killing contacts app f.e
P.s. you can set icons to your run script preferences like any other preference-->[/I][/B][/COLOR]
<com.wubydax.romcontrol.v2.prefs.RunScriptPreference
android:title="Execute and kill app + icon"
android:icon="@mipmap/ic_launcher"
android:summary="Upon finishing, this script preference will prompt a user to kill app, since we set the isSilent attribute to false"
app:packageNameToKill="com.android.contacts"
app:isSilent="false"
app:scriptFileName="simple_test.sh"/>
</PreferenceCategory>
ImageHeaderPreference
Custom attributes:
app:imageSource - reference type of attribute to set the image to show as header preference. The default size for image is width match_parent and height 200dp.
This is just one of those little things we made for fun, but it ended up being @tdunham 's favourite toy
Code:
[COLOR="DarkGreen"][I]<!--This is one of those little bonus thingies what we made for our beta-testers
and you all get to inherit it. It's a little preference class called ImageHeaderPreference
It allows you to choose and image as header for your preference screen.
Just to bring a little color and life into all those switches and checkboxes...-->[/I][/COLOR]
<com.wubydax.romcontrol.v2.prefs.ImageHeaderPreference
app:imageSource="@drawable/android"/>
Themes, About Us activity and changelog dialog
1. Themes:
1. There 2 built in themes: light and dark. In the navigation drawer, much like in previous version, you have a section under More options which is called "Set Theme".
2. Upon clicking it a dialog will pop up to allow theme selection.
3. The default theme is the light one. If you wish your default theme to be the dark one, please navigate to res/values/styles and find the following line (at the very bottom):
Code:
<integer name="default_theme">0</integer>
(yes, we put integer in styles (because we CAN), we're weird like that... LOL. It's for your convenience.​
4. To make the default theme the dark one, change 0 to 1.​
2. About Us activity - how to populate it:
1. Navigate to values/about_us_resources.xml
2. When you open it you have 3 sets of 3 arrays each. This idea is very similar to how you populated the navigation drawer items. Let's have a look:
Code:
<resources>
[COLOR="Teal"][B]<!--Contact info arrays-->[/B][/COLOR]
[COLOR="DarkGreen"][B][I] <!--In this array you will put the icons for contact information,
for example xda icon for your xda thread, site icon for your site, facebook icon and so on-->[/I][/B][/COLOR]
<array name="about_contact_us_drawables">
<item>@drawable/icon_2</item>
<item>@drawable/icon_1</item>
<item>@drawable/icon_3</item>
</array>
[COLOR="darkgreen"][B][I]<!--In this array you will put the titles for your contact info items. Keep the order consistent between all 3 arrays-->[/I][/B][/COLOR]
<string-array name="about_contact_us_text">
<item>Facebook</item>
<item>Our Site</item>
<item>XDA</item>
</string-array>
[COLOR="darkgreen"][B][I]<!--In this array you will put the titles for the URL strings that will open once a user clicked on the item-->[/I][/B][/COLOR]
<string-array name="about_contact_us_links" translatable="false">
<item>https://www.facebook.com/</item>
<item>https://www.google.com/</item>
<item>http://forum.xda-developers.com/</item>
</string-array>
[COLOR="teal"][B]<!--Team info arrays-->[/B][/COLOR]
<array name="about_team_drawables">
<item>@drawable/icon_5</item>
<item>@drawable/icon_6</item>
<item>@drawable/icon_1</item>
</array>
<string-array name="about_team_names">
<item>Master Yoda - wise and talented lead developer</item>
<item>Luke Skywalker - one handed theme master</item>
<item>Darth Vader - dark theme master</item>
</string-array>
<string-array name="about_team_links" translatable="false">
<item>https://www.facebook.com/</item>
<item>https://www.google.com/</item>
<item>http://forum.xda-developers.com/</item>
</string-array>
[COLOR="teal"][B] <!--Credits and thanks info arrays-->[/B][/COLOR]
<array name="about_credits_drawables">
<item>@drawable/icon_1</item>
<item>@drawable/icon_3</item>
<item>@drawable/icon_4</item>
<item>@drawable/icon_2</item>
<item>@drawable/icon_6</item>
<item>@drawable/icon_5</item>
</array>
<string-array name="about_credits_names">
<item>Star Trek - for being ultimately better than Star Wars</item>
<item>Jean-Luc Picard - for making us crave hot earl-grey tea even in the middle of the summer</item>
<item>Data - for running on the best rom. Google, we still are waiting for THAT android version</item>
<item>Janeway - for being a normal person and drinking black coffee</item>
<item>Q - for reminding us that you can live forever and still look great</item>
<item>Worf - for teaching us to love Klingons. It was NOT easy</item>
</string-array>
<string-array name="about_credits_links" translatable="false">
<item>https://www.facebook.com/</item>
<item>https://www.google.com/</item>
<item>http://forum.xda-developers.com/</item>
<item>https://www.facebook.com/</item>
<item>https://www.google.com/</item>
<item>http://forum.xda-developers.com/</item>
</string-array>
</resources>
3. As you can see from the code above it's very simple. Find images you want to use, You don't need to make them round. They will be made round on runtime.
4. Replace the demo information in our arrays with your own, including images reference, titles and links. Make sure the lenghts of 3 arrays in each category are equal.
5. You can make as many or as little items as you want. As long as the length of drawable array equals to length of titles array and equals to length of links array in single category.
6. All the magic is done in java for you. Just populate arrays and RUNNNN​
3. Changelog Dialog - how to populate it:
1. Navigate to /res/values/changelog_resources.xml
2. Inside you will find 1 string and 1 string array. Let's have a look:
Code:
<resources>
[COLOR="Teal"][B]<!--Do not forget to include this in any locale specific folders for translation-->[/B][/COLOR]
[COLOR="Green"][B][I]<!--In the following array put your changelog items
Take as many lines as you need.
Add as many items as you want or delete some if those are too many
This order is how they will appear in the dialog
Make any order you want from top to bottom-->[/I][/B][/COLOR]
<string-array name="changelog_items">
<item>Some changelog thing lkjh l lkjh slkjh lkjh s,mnb lkjhs lkjh poiuy slkjh</item>
<item>Another changelog thing ;lkj d;lkj ;lkjs ;lkj ;lkj s;lkj ;lkj s;lkj ;lkj ;lks ;lkj ;lkj</item>
<item>Some more changelog things</item>
<item>Some even more changelog thing</item>
<item>And another changelog thing ;lsj; lkjs ;lkj ; lkj;lsjk ;sklj s;lkj s;lk js;lkj s;lkj</item>
<item>How many changelog things</item>
<item>What a long changelog!!!</item>
<item>Is it twenty already?</item>
<item>Are we there yet?</item>
<item>Live long and prosper</item>
<item>So say we all</item>
<item>Patience you must have</item>
<item>Great scot!!!</item>
<item>No disassemble…</item>
<item>Almost there</item>
<item>Done with changelog</item>
</string-array>
[COLOR="green"][B][I] <!--This will be the dialog title.
Put your own rom version and name.
Have fun-->[/I][/B][/COLOR]
<string name="rom_version_for_changelog">build v1.0 6thgearrom</string>
</resources>
3. Fill and up with your own items. Enjoy!​
Backup and Restore functionality
Backup and restore is done on a background thread using a service. Once the service gets intent with certain action it performs the required activity and shuts down.
The service can be called with wither backup action or restore action. In each case it will act differently.
1. How does that work - BACKUP:
When a request for backup is passed to the service, it does several things:
1. Checks if on your sdcard there exists a folder called RomControl and checks if the folder contains subfolder backups. If they don't exist, they are being created.
2. In our data f folder in data/data/com.wubydax... we have a shared_prefs folder. Inside it we have preference xml files for all of your preferences.
3. We iterate through those files and read them line by line, and once they are read, we take the keys and read the actual database value for that key
4. Then we write those values with their corresponding keys into a new backup file
5. Each backup file has a new name. You can see how it's formed here:
Code:
String currentDate = new SimpleDateFormat(getString(R.string.backup_file_prefix_date_format), Locale.ENGLISH).format(Calendar.getInstance().getTime());
String fileName = currentDate + "_" + Build.DISPLAY;
String backupFileName = fileName + getString(R.string.backup_file_suffix);
File newBackupFile = new File(Constants.BACKUP_FOLDER_PATH + File.separator + backupFileName);
As you can see we use 3 components for name:
a. Current date and time up to munites
b. The display id from the build.prop
c. suffix RCBackup​
That is so the users can differentiate between different backups from different roms or versions​
6. It also backs up the file preferences (see the preference explanation post for that)
7. The service finishes and throws a toast that it's done and the file can be found in the backup directory​
2. How does that work - RESTORE:
1. During restoring action, the main activity closes. It also says so in the warning dialog which appears right before restore is activated.
2. We made it so to make sure no onPreferenceChangeListener is triggered for any of your preferences. We also want a clean restart of the activity once the restore is done, so all the items can be loaded from the database, which has been updated by the restore process.
3. During restore we read the selected backup file, break it into pieces and write the values to database. When the activity is reloaded, preferences read from databases and update their own values.
4. For file preferences, during restore process we delete the files saved previously and only create the ones contained in backup file.​​
reserved 8
reserved 9
reserved 11
reserved 12
This blows away the original version folks.
Cant wait for it to go live. And couldn't resist being the first poster as well.
tdunham said:
This blows away the original version folks.
Cant wait for it to go live. And couldn't resist being the first poster as well.
Click to expand...
Click to collapse
You are simply the best ???
Sent from my SM-G920F using Tapatalk
Wow. This is amazing. Thank you for your time and sharing it. It's just another treasure after v1.0.
Sent from my SM-G935F using Tapatalk
Waiting
Wooooow , loooong time waiting for this , now time for reading & starting ready for it xD , as usual thanks for ur awesome work , ???
thereassaad said:
Wooooow , loooong time waiting for this , now time for reading & starting ready for it xD , as usual thanks for ur awesome work , ???
Click to expand...
Click to collapse
Happy to see you here! Don't read yet. Only posts 1, 2, 3, 4 and 6 are finalized.
Sent from my SM-G920F using Tapatalk
Wow, I am loving how this version is going to handle killing apps. And about custom preferences I am a bit confused but I guess I should wait till it's out and see how it would work. Setting default_theme it's just mind blowing! Guys before the source is out I think it would be a good idea to try reading and understanding what is outlined in OP I didn't use to sign my rc but it's explained clearly how to do it in studio. :good:
WOW!
As I have said before, you and Wuby are the most precious thing to us, the ROM devs
What an incredible update!
Sure, I have a lot of work to do on rom control v2, but I have you on my side -that's a good thing hehe.
Amazing work! I am sure my users enjoy it as well.
Keep it up, but make some time for me too
Sent from my SM-G900F boosted by PhoeniX ROM

[TOOL] ADB-Overlay [2.2.2.0 - .Net 6]

Heyho together,
after my P9-Lite and P10-Lite toolkit i thought, it's time to build a more generic version. Here it is, the ADB-Overlay!
The main point of this project is to serve a GUI for ADB. Currently, there is a File-Explorer, Remote-Desktop, Shell interface and APK installer implemented. You can also READ the contacts if your device is rooted and has sqlite3 installed. But a picture tells more as 1000 words... So here is a preview of what you'll get.
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
But anyways, i'm not responsible for any damage done to your device! For example, if you delete some files/folders on root lvl etc.
Component Info
Remote-Desktop:
Left-Click = Touch
Right-Click = Swipe with duration
The keyboard is nearly fully supported, i have written a kind of WPF -> Android key-mapper. So even combos like SHIFT+A-Z, SHIFT+0-9, ALT+A-Z and ALT+0-9 should work. The base for the key-mapping is a 102 keys keyboard with en-GB or de-DE layout. If you have another setup, some keys may on other positions.
The screenshots will be created under "ADB-Overlay\Screenshots\Screenshot.yyyy-MM-dd_HHmmss.(bmp | gif | jpg | png | tiff | wmp)".
-
If the device is booted in the recovery, the Remote-Desktop is only a viewer, because the recoveries doesn't support "input tap x y" nor "input keyevent XXX".
Shell:
The input box supports CTRL-A-Z, so you'll have the ability to send for example CTRL+C to stop a remote process. If you want use Copy & Paste onto the input box, use the Right-Click menu.
Tested OS
Win 7 | 8 | 8.1 | 10 | 11 (32Bit/64Bit in VM-Ware)
Win 7 | 8 | 8.1 | 10 | 11 (64Bit Native)
Tested Devices
Android Emulator some Versions (min. 2.x) in AVD
Android x86
HTC Sensation -/ XE (non-/rooted)
HTC One M9 (non-/rooted)
Huawei P9 Lite (VNS-L21, 22, 23, 31, etc.) (non-/rooted)
Huawei P10 Lite (WAS-LX1A, etc.) (non-/rooted)
Huawei Mate 9 (THX to @Tecalote)
Huawei Mate 10 Lite (THX to @Chisetdel31260)
Huawei P9 (EVA-al10) (THX to @reynard1)
Sony Xperia X (THX to @FoxTheLegend)
Pixel 4 (THX to @squabbi)
Requirements
Android: min. 2.x
Platform: x86/x64 (Windows)
Frameworks: min. .NET 6 / .NET 6 Desktop Runtime x86/x64
(Installed ADB/Fastboot driver)
Download
Mirror: See attachments
Mirror #1: My FTP [USR/PW=ADB-Overlay]
Mirror #2: GoogleDrive
Mirror #3: Dropbox
Mirror #4: Mega
DO NOT MIRROR MY FILES! DO NOT COPY MY THREADS!
Bug-Tracker
If you can't use the SDK-Updater or the Version is 0.0, just close the ADB-Overlay delete the "platform-tools" directory and restart the ADB-Overlay.
If the device won't connect via W-/Lan, check which version of android you are running... the latest version "SP2A.220505.002, May 2022" seems to break "Developer settings -> USB-Debugging -> Debug over W-/Lan"... To get it working anyways, just open a cmd prompt in the "platform-tools" folder, connect your device via USB and execute the following command: "adb tcpip 12345" (or some other port). After that, you should be able to connect your device via W-/Lan.
App Freeze
If the ADB-Overlay freezes during startup or by connecting a rooted device, the solution is to update the su binary. I encountered this problem yesterday on an older device running Android N. After an update to Magisk Canary [build 21005] the problem was solved.
Changelog
DD.MM.YYYY | (A) = Added | (C) = Changed | (D) = Deleted | (F) = Fixed | (R) = Recoded | (U) Updated
----------------------------------------------------------------------------------------------------------------------------------------------------
30.04.2022 [2.2.2.0]
(F) The SDK updater.
27.04.2022 [2.2.1.0]
(F) A freeze which occured on some FTP-Servers which doesn't implement RFC 959 properly.
11.04.2022 [2.2.0.0]
(U) General improvements in terms of speed and connectivity.
(U) The FTP config is now AES-256 encrypted for better security.
29.11.2021 [2.1.0.0]
(U) To .Net 6
(U) General improvements in terms of speed and connectivity.
25.07.2021 [2.0.2.0]
(A) ADB-Sideload
(U) ADB and Fastboot binaries.
(F) Some transfer issues (Binary <-> Socket)
(F) The platform-tools updater.
12.01.2021 [2.0.1.0]
(F) All freezes on the Tree-/ListView.
(A) ColumnHeader sorting on the Explorer and Apk-Manager ListView.
(A) Sort options for all header not only Name, Size, Date and Type.
(C) Sorting happens now in the background (So no more freezes here too.).
.-Older changes-.
12.12.2020 [2.0.0.0 - .Net 5]
Switched to .Net 5.0
(F) FTP-Updater timeout issue
(C) Brotli compression to .Net native
17.09.2020 [1.18.46.0]
(A) sendrecv_v2 for Android 11
(A) Brotli compression for file transfers on Android 11
29.03.2020 [1.17.46.0]
(A) Cut (via Context-Menu and "Ctrl+X")
(A) Copy (by default and via Drag'n'Drop by holding "Ctrl" during drop)
(A) Move (via Drag'n'Drop by holding "Shift" during drop)
(NOTE: Move is now enabled for on-device, device-to-device, local-to-device and device-to-local transfers.)
(C) The copy window, it will now display "Copy" or "Move" depending on the current operation.
16.03.2020 [1.16.46.2]
(F) The updater buttons, now they are also disabled during an download/check.
15.03.2020 [1.16.46.1]
(F) File/Folder interaction with those which contains "\s _ - ' , * & ~ | < > ( ) [ ] { }" in their names.
07.03.2020 [1.16.46.0]
(C) The synchronous IO to fully asynchronous IO.
(A) The Edit-Window, this will temporary download the file and open it locally in an application defined for this file type or with the "OpenAs" dialog.
(C) The UI, buttons which can't be used are now "grayed out".
12.02.2020 [1.15.46.1]
(F) The re-connection bug on the FTP-View. (Which also caused the updater to fail.)
(F) The (2 sec) freezes after copy/delete/tar.
(C) The info bar, added the modify date.
31.01.2020 [1.14.46.0]
(F/A) The timestamps for access, changed, modify.
(C) The "Properties Window", added the mentioned fields and resized the height a bit.
(A) Create File on the FTP-View.
30.12.2019 [1.13.46.0]
(F) The FTP TLS/SSL problem, now all procedures (implicit/explicit) should work without problems. (I tested this the last days with multiple servers, also the proxy's socks4/a|5 should now work with TLS/SSL.)
(U) All 3 explorers, they relay now on an shared generic base explorer which implements most of the features for all 3 views. So it's guaranteed that all views will behave the same.
(U) All 3 explorer views, changed the spacing's and the "edit textbox" (on rename) a bit, so that they look a bit more like the default explorer.
(A) IComparable<T> and IEquatable<T> to all List-/TreeViewItems so you get a pre-sort during item parsing. (I thought it would work a bit nicer, but hey, now it's implemented^^)
(R) Optimized the item (file/folder) parser for both Android & FTP.
18.12.2019 [1.12.46.1]
(F) The broken SDK-Updater, where you saw in the log file a "BindingException".
(F) The "SocketException" on app close. Reason for this was, that i disposed the "DeviceMonitor" after i killed the adb-server, but the monitor tried to check in some cases (10 sec refresh rate) for changes, after the server was already down.
(A) The "remount" option for mounts to the properties window. (You'll get also a little warning, each time you attempt to remount a mount point.)
(C) Resized the properties and the updater windows a bit.
17.12.2019 [1.11.46.0]
(F) The remote desktop for 16-Bit devices.
(R) Root detection
(R) Mount detection (added support for Android 2.x)
(R) The properties view, as mentioned, there is now a more valuable overview.
14.12.2019 [1.10.46.0]
(A) A version banner to the title bar.
(R) Nearly the whole caching logic inside the local ,Android and FTP explorer.
(R) The mount ([Device]) overview, now you'll see all mounts returned from "mount" and the assigned "df" data, if available. (The next build will include a more valuable overview in the PropertiesWindow. Like the mount options etc.)
(R) The remote desktop, i moved the "color correction" inside the pixel-buffer copy process. This will save a lot of time and boost the FPS in my TWRP up to 80++ per sec.. (That was so much, that .Net even couldn't dispose the sockets so fast as i requested a new one... This ended in an waiting queue overflow... So i decided to limit the FPS to 30-40 this is enough to have a clean view.) - Also NOTE: BOOTED IN ANDROID, WILL DECREASE THE FPS TO 2-3 DEPENDING ON THE RESOLUTION OF YOUR DEVICE! THE ONLY SOLUTION FOR THIS IS, START ADB WITH ROOT RIGHTS. (I added a internal switch, which will detect if adb runs as root, if so, i don't relay on the frame-buffer-service of adb. Instead, i use the bare metal (/sys/class/graphics/fb0/) to get the correct buffer values and then i read directly from "/dev/graphics/fb0".) AGAIN, NOTE: THIS WILL NOT RAISE THE FPS UP TO 80++, BUT THE FPS WILL INCREASE UP TO 15-25.
11.12.2019 [1.9.46.1] (HotFix)
(A) The mistakenly removed overwrite protection on item rename. (Android)
(R) The Copy & Delete view, the media-scanner, if activated, will now only run once at the end of an copy or delete action.
(R) Sym-/Directory/File detection, there was in rare cases a wrong detection where a SymDirectory was treated as an SymFile.
(F) The "Create New Textfile" action. (Android)
10.12.2019 [1.9.46.0]
(F) An ArgumentNullException which was raised during "mount" parsing. (On the "device" view.)
(F) The renaming issue, where you got, "The element couldn't be renamed!", if the name hasn't changed.
(A) Windows shortcuts to the TreeView of the Windows explorer. (Even the original one hasn't that feature )
(A) Hiding the ".lnk" extension on any Windows shortcut.
(A) Internal auto updates to the remote explorers (Android/FTP). So you have a kind of "pseudo" FileSystemWatcher.
(A) The re-sorting of the items after an rename action.
(D) Some code duplication. (Saved all together ~12 kb)
(R) Unnecessary refreshes and replaced them with internal cache logic's.
02.12.2019 [1.8.46.0]
(F) An ObjectDisposedException which was sometimes raised after symlink parsing and/or file transfers.
(C) The channeling on the ADBSocket, from an ConcurrentDictionary to an simple array with locks, this increased the transfer speed.
(U) The dlls to the latest versions.
24.07.2019 [1.7.46.0]
(R) The config files, both, the config.xml and the config.ftp.xml got an structure update. The old/current config files will be migrated to the latest version. So there should be no data loss in any way.
(A) A version banner to the Android and FTP view
(C) The adb directory from "ADB-Overlay\adb" to "ADB-Overlay\platform-tools"
(A) The SDK-Updater
(A) Auto-SDK-Update - If activated, this will check once every 24h for an update, but only on startup of the ADB-Overlay. (NO Tasks or something)
Info
The updater will only check "https://dl.google.com/android/repository/repository-11.xml". This XML gets downloaded and parsed, if the "platform-tools" version is newer as the used one, you'll get an popup which offers the download for the latest version.
The Auto-SDK-Update is by default disabled.
28.06.2019 [1.6.46.0]
(F) A memory leak which occurred by removing a device (Android View -> Closing an tab)
(F) A memory leak which occurred by removing a server (FTP View -> Closing an tab)
(R) Improved the directory parsing speed
(A) A progress bar to the copy window (green during transfer and on completion | red on failure or cancellation)
04.06.2019 [1.5.46.0]
(C) The versioning:
1 = Major
5 = Minor
46 = Framework Version (4.6)
0 = Hotfix
(A) A few speed improvements to the Remote-Desktop.
(A) The updater/-menu
(A) Auto-Update - If activated, this will check once every 24h for an update, but only on startup of the ADB-Overlay. (NO Tasks or something)
Info
The updater will only check my FTP for a ".version" file. This gets downloaded and parsed, if the version is newer as the used one, you'll get an popup which offers the download for the latest version. (NO logs and NO telemetry!)
The Auto-Update is by default disabled.
28.05.2019 [0.0.0.5]
(A) The "APK Manager" to the Android -> Tools menu
(A) {<-} & {->} buttons to the addressbar
(A) The "Install" option to the remote explorer -> ListViewItem context menu (only shown if the item is a apk)
(R) Added the missing options to the APK Installer (e.g. Downgrade, Test-Package, etc.)
(R) Optimized the "symlink" parsing
01.05.2019 [0.0.0.4]
(F) An exception which was raised after you tried to open any "Tool" on an disconnected device.
(A) A Battery Monitor to the Android -> Tools menu
29.04.2019 [0.0.0.3]
(A) Remote-Viewer when booted in the recovery
(A) A screenshot format selector (bmp | gif | jpg | png | tiff | wmp) to the Remote-Desktop
(A) A color correction switch to the Remote-Desktop
(A) Links to the German forum post
20.04.2019 [0.0.0.2]
(F) An issue during item renaming - Reason was maybe the switch from .NET 4 to .NET 4.6, seems the UI updates on textboxes are no longer only on focus got/lost, instead they are now after any change.
(A) Contextmenu (Listview) -> New -> Text Document
(A) Replacements for "New Directory", "Group (New)", "Server (New)" to the german language, so you get now after such an action the correct "Neuer Ordner", "Neue Gruppe", "Neuer Server".
(C) The FTP Copy/Delete action, you can now close the control connection and leave only those windows open until they are done. Both, the Copy and Delete action using now their own connection which is no longer bound to the control connection.
(C) Moved the "Keep Alive" checkbox (FTP -> Servermanager -> Account) to FTP -> Servermanager -> Connection
13.04.2019 [0.0.0.1]
Initial release
Great job. my huawei mate 10 lite is recognized. currently my smartphone is on rom original stock rne - l21c432b340 emui 8.0 not rooted. and my PC is a windows 7 64.
Works for my Xperia X - and thanks for your help!
I'm flattered to be in your contacts screenshot I was still using your prototype you had sent to me years ago!
Works very well on my Pixel 4!
squabbi said:
I'm flattered to be in your contacts screenshot I was still using your prototype you had sent to me years ago!
Works very well on my Pixel 4!
Click to expand...
Click to collapse
Hey Bro
long time not seen. Hehe yeah the good old Multi-Explorer ;p - Still using it my self, it's more or less my playground before i implement things in this tool.
If you want and have some spare time we can modify this beauty. I also reworked nearly the whole AndroidCtrl.dll, there you have now solid filestreams, strongly typed FilesystemInfos (Like the one from the .NET fw) and lots of other handy stuff. Like framebuffer access in Android and recovery mode. I also implemented a ADBridge class which is an instanced wrapper for the 2 static ADB classes (binary/socket).
Best Regards,
Sebastian
this is what im looking for a while
Thank you very much
here is some suggestion
1.better ui
2.edit build prop in the realtime
btw my phone is Huawei P9(eva-al10) rooted android 8.0 work very well
k1ll3r8e said:
Hey Bro
long time not seen. Hehe yeah the good old Multi-Explorer ;p - Still using it my self, it's more or less my playground before i implement things in this tool.
If you want and have some spare time we can modify this beauty. I also reworked nearly the whole AndroidCtrl.dll, there you have now solid filestreams, strongly typed FilesystemInfos (Like the one from the .NET fw) and lots of other handy stuff. Like framebuffer access in Android and recovery mode. I also implemented a ADBridge class which is an instanced wrapper for the 2 static ADB classes (binary/socket).
Best Regards,
Sebastian
Click to expand...
Click to collapse
Sounds great! I'm looking to get back into toolkit making later this year, I'm keen to see the improvments to your library! :good:
Great job. we can navigate and copy files efficiently.
Only one thing is missing. Why not keep file timestamp for last access and modifie dates? or let us choose the option to keep it or not.
skyrail01 said:
Great job. we can navigate and copy files efficiently.
Only one thing is missing. Why not keep file timestamp for last access and modifie dates? or let us choose the option to keep it or not.
Click to expand...
Click to collapse
Heyho,
which Android version are you using and on which action (pull/push) does the timestamps get lost?
Normally i preserve the timestamps but on some Android versions the "timestamp" field in the ADB-Protocol is ignored.
Maybe i can set the timestamps on an other way, but therefore i need to know the version.
Regards,
Sebastian
PS:
Some code where i set the timestamps
Upload
Code:
public void Close(DateTime fileCreationTime)
{
if (_ch?.IsConnected ?? false)
{
if (CanWrite)
{
int o = 0, w;
byte[] d = new byte[8];
d.SetUInt32LE((UInt32)SyncCmd.DONE, 0);
d.SetUInt32LE(ToUnixTime(fileCreationTime), 4);
//...
}
_ch.Close();
}
}
Download
Code:
//...
using (FileStream dfs = destination.Open(FileMode.Create, FileAccess.Write))
{
using (AFileStream sfs = OpenRead())
{
sfs.CopyTo(dfs, DMAX, msg, cancellationToken);
ct = sfs.CreationTime;
}
}
//...
if (msg.State == TransferState.Done)
{
destination.CreationTime = ct;
transferEventHandler?.Invoke(Client.ID, new FileTransferEventArgs(Client.ID, msg));
return true;
}
//...
Thank you really great program keep it up
Hey,
I am operating under lineageOS 16 on Galaxy S5 (klte), using adb 1.0.39 on windows 10 64-bits, either via wifi or usb connect.
I check file dates under Windows, in console mode with far manager (M: last write time, C: creation time, A: last access time).
I am using linux command ls -l under adb shell from Windows command line to list files pushed to Android.
When pushing files from Windows to Android, only M is preserved, with a 2 hours offset (ES file explorer tells it is modified date) Maybe daylight issue or bad timezone.
When pulling files from Android, only C is preserved
When I pull back to Windows, files pushed to Android, all original date is lost.
But I am pretty sure we can preserve last access, modified and creation date as I could see Adbexplorer (another project) pull files keeping M and A (adb pull -a).
Hope I give you enough details.
k1ll3r8e said:
Heyho,
which Android version are you using and on which action (pull/push) does the timestamps get lost?
Normally i preserve the timestamps but on some Android versions the "timestamp" field in the ADB-Protocol is ignored.
Maybe i can set the timestamps on an other way, but therefore i need to know the version.
Regards,
Sebastian
PS:
Some code where i set the timestamps
Upload
Code:
public void Close(DateTime fileCreationTime)
{
if (_ch?.IsConnected ?? false)
{
if (CanWrite)
{
int o = 0, w;
byte[] d = new byte[8];
d.SetUInt32LE((UInt32)SyncCmd.DONE, 0);
d.SetUInt32LE(ToUnixTime(fileCreationTime), 4);
//...
}
_ch.Close();
}
}
Download
Code:
//...
using (FileStream dfs = destination.Open(FileMode.Create, FileAccess.Write))
{
using (AFileStream sfs = OpenRead())
{
sfs.CopyTo(dfs, DMAX, msg, cancellationToken);
ct = sfs.CreationTime;
}
}
//...
if (msg.State == TransferState.Done)
{
destination.CreationTime = ct;
transferEventHandler?.Invoke(Client.ID, new FileTransferEventArgs(Client.ID, msg));
return true;
}
//...
Click to expand...
Click to collapse
skyrail01 said:
Hey,
I am operating under lineageOS 16 on Galaxy S5 (klte), using adb 1.0.39 on windows 10 64-bits, either via wifi or usb connect.
I check file dates under Windows, in console mode with far manager (M: last write time, C: creation time, A: last access time).
I am using linux command ls -l under adb shell from Windows command line to list files pushed to Android.
When pushing files from Windows to Android, only M is preserved, with a 2 hours offset (ES file explorer tells it is modified date) Maybe daylight issue or bad timezone.
When pulling files from Android, only C is preserved
When I pull back to Windows, files pushed to Android, all original date is lost.
But I am pretty sure we can preserve last access, modified and creation date as I could see Adbexplorer (another project) pull files keeping M and A (adb pull -a).
Hope I give you enough details.
Click to expand...
Click to collapse
Heyho,
THX for that info, i'll check the "adbd" source which LOS uses, maybe there is the prob. According to "adb pull -a" i'll also have a look at the adb source, because i think they do some "touch" stuff. Because the ADB-Protocol it self only supports creation/last modified time. In the source is a another "struct" for "STA2" (stat 2) command. But i have never seen a adb binary which supports this. (All binaries use the "STAT" command.)
EDIT 1:
Just checked the adb source again, seems they changed it a bit...
(This is the current STAT (v1) header)
Code:
# cmd name STAT or STA2 // 4 bytes
st->st_mode = msg.stat_v1.mode; // 4 bytes
st->st_size = msg.stat_v1.size; // 4 bytes
st->st_ctime = msg.stat_v1.mtime; // 4 bytes
st->st_mtime = msg.stat_v1.mtime; // 4 bytes
My HTC-One M9, Sensation, VM-Ware (Kitkat - Nougat) none of them has a 20 byte header. ALL of them return a 16 byte header.
Code:
CMD // 4 bytes
Mode // 4 bytes
Size // 4 bytes
CTime // 4 bytes
So it seems the protocol is highly inconsistent... I'll check how much time gets lost by calling touch on each file, because, currently i open a sync channel via an smart-socket, transfer the file and read all data provided by the protocol header. This is really fast, but if i have to spin up each time another channel to get a shell for the touch, this will increase the time each copy needs. Because, a shell depending on the version (v1, v2), has a lot checks you need to perform, specially the shell_v2 because it's like a ssh protocol.
EDIT 2:
Just for completeness, i'm pretty sure your device also sends only a 16 byte header for the stat v1 command, because:
(This is a cut of my implemented "Stat(byte[] bytes)" class)
Code:
if (c == (uint)SyncCmd.STA2 && bytes.Length >= 72)
{
ID = SyncCmd.STA2;
Error = bytes.GetUInt32LE(4);
Dev = bytes.GetUInt64LE(8);
INode = bytes.GetUInt64LE(16);
Mode = bytes.GetUInt32LE(24);
NLink = bytes.GetUInt32LE(28);
UID = bytes.GetUInt32LE(32);
GID = bytes.GetUInt32LE(36);
Size = bytes.GetUInt64LE(40);
ATime = bytes.GetInt64LE(48);
MTime = bytes.GetInt64LE(56);
CTime = bytes.GetInt64LE(64);
}
else if (c == (uint)SyncCmd.STAT && bytes.Length == 16)
{
ID = SyncCmd.STAT;
Mode = bytes.GetUInt32LE(4);
Size = bytes.GetUInt32LE(8);
CTime = bytes.GetUInt32LE(12);
}
As you can see, the both structures differ in there field order, if your device would send a 20 byte header, the test (bytes.Length == 16) wouldn't match. And you couldn't download a file.
EDIT 3:
After playing a while with "stat" and "touch" on some Android versions, i decided to rely on those functions. The next build should restore and write the correct timestamps.
EDIT 4:
Well, setting timestamps on the SD-Card doesn't work, also, setting timestamps on the "internal" SD-Card doesn't work either. Seems that it's related to the underlying FS. If i try to set the timestamp on an ext4 partition, it works. So it doesn't make sense to rewrite the push/pull functions because the return of touch for 99% of the time will be "touch: '/sdcard/TWRP/test.pdf': Operation not permitted". So it's simply a time waste during the copy procedure. BUT, i'll implement it at least for the download, so u'll get the correct timestamps on Windows.
EDIT 5:
Added a screenshot of the new "Properties Window" which also proves that the download timestamps are now correct.
(Btw. C doesn't mean created - it means changed)
Code:
stat /sdcard
File: `/sdcard' -> `/storage/self/primary'
Size: 21 Blocks: 0 IO Blocks: 512 symbolic link
Device: 1h/1d Inode: 4432 Links: 1
Access: (777/lrwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 1970-01-01 01:00:00.000000000
Modify: 1970-01-01 01:00:00.000000000
Change: 1970-01-01 01:00:00.360063176
Little update about the "creation time". After a bit research i found this post on Stack Exchange, there is explained that the so called "birth time" is stored since ext4 as part of the INode field. But it seems you need a special version of "stat" to read this info, it's called "statx". But so far i could see, Android doesn't support this feature, maybe some kernel does but it seems that it's more the rare case.
Regards,
Sebastian
Thanks for the update!
I was wondering what could be causing a small delay in copying files over, once the progress finishes, the transfer dialog remains frozen for a 1-2 seconds. I'm copying over a photo, so around 2MB.
squabbi said:
Thanks for the update!
I was wondering what could be causing a small delay in copying files over, once the progress finishes, the transfer dialog remains frozen for a 1-2 seconds. I'm copying over a photo, so around 2MB.
Click to expand...
Click to collapse
Heyho ,
yup i still working on it. It seems that the "Task.Delay()" isn't performed inside the Task itself, instead it's executed on the main thread. The reason for the freeze is, that i try to show the last result, otherwise the copy window would close immediately after the last element and you couldn't see if it's transferred or not. So i keep it like windows, wait 1,5-2,5 sec before closing the window.
The delay you might feel extremely is the "Media-Scanner". It runs on the end of each copy/delete action, the reason for this is, that files pushed/copied by adb are not reported to the MTP interface. So you couldn't see those files if you connect your device after such an adb copy via MTP. Also files/folders deleted by adb are also not reported to the MTP interface. So you will see those elements via MTP if you don't perform manually the "Media-Scanner" lookup. - But if you work only with adb for example, you could turn the "Media-Scanner" off. All device based explorers and of course adb will see those files/folders at any times. (But if you need those files/folders for exchange you should keep the "Media-Scanner" on )
EDIT:
This is executed for every file which is copied/pushed/deleted.
Code:
_adb.Device.Manager.ActivityManager.Broadcast("android.intent.action.MEDIA_SCANNER_SCAN_FILE", "-a", string.Concat("-d 'file://", remotePath, "' > /dev/null"));
EDIT 2 (a bit off-topic):
You could also simply use the "Media-Scanner" with my AndroidCtrl.dll. The calls are:
Code:
//"_adb" is a instance of "ADBClient"
_adb.Device.IO.MediaScanner.CreateScanList(string remoteDirectory, MediaScanMode mode);
_adb.Device.IO.MediaScanner.CreateScanList(string remoteDirectory, MediaScanMode mode, CancellationToken cancellationToken);
_adb.Device.IO.MediaScanner.CreateScanList(string remoteDirectory, IList<string> files, MediaScanMode mode, CancellationToken cancellationToken);
_adb.Device.IO.MediaScanner.ScanDirectory(string remotePath, MediaScanMode mode);
_adb.Device.IO.MediaScanner.ScanDirectory(string remotePath, MediaScanMode mode, CancellationToken cancellationToken);
_adb.Device.IO.MediaScanner.ScanDirectory(IEnumerable<string> remotePaths, MediaScanMode mode);
_adb.Device.IO.MediaScanner.ScanDirectory(IEnumerable<string> remotePaths, MediaScanMode mode, CancellationToken cancellationToken);
_adb.Device.IO.MediaScanner.ScanFile(string remotePath, MediaScanMode mode);
_adb.Device.IO.MediaScanner.ScanFile(IEnumerable<string> remotePaths, MediaScanMode mode);
_adb.Device.IO.MediaScanner.ScanFile(IEnumerable<string> remotePaths, MediaScanMode mode, CancellationToken cancellationToken);
_adb.Device.IO.MediaScanner.ScanObject(ITransferMessage message, MediaScanMode mode);
EDIT 3:
Found the bad boy, seems "Task.Delay()" only works when used in "async" context. Now the "freeze" is gone, you can move the window until it vanishes. So, in the next update those "freezes" are gone.
---
Little Update:
@squabbi
The next update includes a little editor as suggested by @reynard1. A screenshot can be found as attachment.
Regards,
Sebastian
k1ll3r8e said:
**snip**
EDIT 3:
Found the bad boy, seems "Task.Delay()" only works when used in "async" context. Now the "freeze" is gone, you can move the window until it vanishes. So, in the next update those "freezes" are gone.
---
Little Update:
@squabbi
The next update includes a little editor as suggested by @reynard1. A screenshot can be found as attachment.
Regards,
Sebastian
Click to expand...
Click to collapse
Woohoo! Thanks for digging into it! I'm glad you found the culprit haha.
Looking forward to that editor feature! Do you know if it's possible to integrate with Windows Explorer? It's probably a little harder, but something like how WinSCP can drag files from the remote to a local Explorer window.
If that's a little difficult, would this be possible to implement? If I drag and drop a folder/file onto the local pane, it will change directory (and highlight the file if a file was dragged onto the local pane). Just to make it easier to work with folders I have already open.
Still using Windows 7?
squabbi said:
Woohoo! Thanks for digging into it! I'm glad you found the culprit haha.
Looking forward to that editor feature! Do you know if it's possible to integrate with Windows Explorer? It's probably a little harder, but something like how WinSCP can drag files from the remote to a local Explorer window.
If that's a little difficult, would this be possible to implement? If I drag and drop a folder/file onto the local pane, it will change directory (and highlight the file if a file was dragged onto the local pane). Just to make it easier to work with folders I have already open.
Still using Windows 7?
Click to expand...
Click to collapse
Heyho
Yes its definatly possible, we need to use the so called "VirtualFileDataObject". I tried to implement it some time ago, but doesn't worked as expected. But i'll give it another try.
-
Yup, i still use Win 7 as my main system, but i have some VMs running, like my Debian server which serves the documentation and some test sites for my php projects, a few Android x86 Versions and of course a legit Win10 installation to test If everything works.
*Never change a running system! - Currently my main hdd has a uptime of 2689 days with 216 restarts, i think that tells a lot *
---
Little Update:
As the screenshot shows, the editor is working fine so far. (Added also a few more controls.) The only problem i still have is, that if ADB doesn't run as root you can't edit for example the "build.prop". Because ADB can't write the file directly back, so i need to build a kind of "tmp" file. The next problem will be, that you (the user) have to remount the mount point, before you start editing those "root" and "write protected" files. There is also a problem with "binary" files, because the "RichTextBox" screws up when it gets "binary to ASCII/UTF8" transformed data, which ends in an app freeze... So i have to check on some way if the stream contains really text-data, the file extension doesn't help here much because, you know, linux uses also a lot of txt files without any extension.
Update 2:
Just got the "binary" files running... With a super BIG drawback, 248 kb (4069 rows) text results in 269,364 mb memory utilization by the "RichTextBox". - The prob here is, that the ADB filestream doesn't support seek, so i need to load the whole doc in one, which is quiet to much for the "RichTextBox"...
Update 3:
Soo, i wrote a kind of paging for the "RichTextBox" which works so far really nice, at least when it comes to the memory (even during scrolling, with free running wheel, only 15 - 27 mb increase), there is now a fixed amount of rows (40) which will be shown, all other rows are hidden from the "RichTextBox". This opens a few new issues^^ - Currently there is no selection possible which goes beyond the 40 rows. Also insert and delete are a little challenge because, i need to "overwrite" the default behavior with the some "PreviewKeyDown/etc." events... - Looks all a bit hacky, but lets see if it works in the end.
Update 4:
Well, the "RichTextBox" is out of the race^^ - It triggers events more or less random instead when you expect it, it removes blank lines (for example you have 3x "\n", this gets wrapped to 1x "\n") and the best, you remove "\r" during stream reading and the RTB adds it again, also random (some paragraphs get an "\r" some not). Editing text in a solid way without losing something isn't possible with this thing... So i'll try the "TextBox".
Last Update before release:
So, after testing the "RichTextBox" and "TextBox" i ask myself why those controls are there^^. Both can't edit text with more than a few hundert lines, the "TextBox" is at least much better as the "RichTextBox" but it also screws up when i comes to more as 250 kb text. So the "Editor" will be one of your installed applications. I add a little tool window, which offers the temporary download to the windows temp folder, after that i launch the windows "OpenAs" dialog that you can choose the editor you want. Also, i'll attach a "FileSystemWatcher" to the file that the upload automatically happens when you press save in your editor.
Little Info:
It take a few more days for the "edit" update, because i started also to implement the TAP pattern, this increased for example the download speed by factor 6. But to implement it the right way, i have to rewrite a lot of code in the AndroidCtrl.dll and AndroidCtrlUI.dll.
Regards,
Sebastian
k1ll3r8e said:
Heyho
Yes its definatly possible, we need to use the so called "VirtualFileDataObject". I tried to implement it some time ago, but doesn't worked as expected. But i'll give it another try.
-
Yup, i still use Win 7 as my main system, but i have some VMs running, like my Debian server which serves the documentation and some test sites for my php projects, a few Android x86 Versions and of course a legit Win10 installation to test If everything works.
*Never change a running system! - Currently my main hdd has a uptime of 2689 days with 216 restarts, i think that tells a lot *
** snip **
Click to expand...
Click to collapse
That'll be great to see haha, and that does make sense keeping your system as is, if it works, it works.
Thanks for your hard work in checking out what's best for the new edit function. Maybe there's a library out there that can implement a text viewer better? I'm not familiar with WPF libraries, or how many there are.
squabbi said:
That'll be great to see haha, and that does make sense keeping your system as is, if it works, it works.
Thanks for your hard work in checking out what's best for the new edit function. Maybe there's a library out there that can implement a text viewer better? I'm not familiar with WPF libraries, or how many there are.
Click to expand...
Click to collapse
Heyho,
i have had a look on Avalon Texteditor but on StackOverflow is also a discussion about how to open a file bigger than 20 mb. It seems WPF is not that great for such things. I found also another one, written by a lonely dev like me , but it's not maintained since 7 years. So the best way might be, open a installed App which is well designed for that purpose.
A bit off-topic
I nearly finished the TAP implementation for the AndroidCtrl.dll, so far it brought a great speed increase. Also, it consumes less CPU time, for example the remote desktop uses only 3-7% on an Intel I5 with 32 GB memory (but up to 36% on an single-core Intel Pentium M with 1,5 Ghz and 1 GB memory - my old well working Laptop, also with Win7 ). So you might be happy to see all the new "real async" overloads in the lib. (I implemented all from scratch, so there is NO Task.Run() or Task.StartNew() in those functions.)
Edit:
Soo, after a few horrible days, the TAP pattern is now fully integrated! But there is still a little issue with the Remote-Desktop recovery viewer. It seems that everything got a speed boost except the recovery viewer, the viewer is currently nearly 4x slower as before... After i fixed this last problem, i'll release the new asynchronous version.
Regards,
Sebastian

Categories

Resources